===
Changelog and major TODO list
Server
- Refactored behavior of the
Channel
prototype into a small core with several modules - Refactored
User
prototype to be compatible with newChannel
prototype - Refactored the way ranks/aliases are stored in
User
objects. - Added
json-typecheck
node module to abstract typechecking of incoming socket messages - Added support for IPv6 connections with IP masking and banning
- Changed playback handler to automatically refresh Google Docs videos
Client
- Removed SSL user option in favor of defaulting to SSL if the server supports it
- Added
/rank
command for managing channel ranks via chat. Syntax:/rank <username> <rank>
UI
- Updated Bootstrap to 3.0
- Redesigned playlist controls
- Redesigned channel moderator settings
- Added HD layout
- Added Slate and Cyborg themes
- Moved guest login form to chatbox
- Added aliases list to profile box (for moderators)
Webserver
- Changed from static HTML + AJAX to Jade templates rendered serverside
- Changed login system to
httpOnly
cookies- More secure, more convenient, solves the problem of being logged in on multiple devices
- Changed account management system
- Refactored web handlers
Server
- Changed configuration to YAML
- Changed the way config keys are handled/read
- Changed database format
- Refactored channel code
- Refactored database code
- Changed to persist global announcements in the database after reboot
- Added database version key
- Can be used to automate updates in the future
- Improve type-checking and (where applicable) truncating of user supplied data
- Change login system and get rid of that
iframe
login page mess - Replace
node-validator
dependency with in-house XSS solution
- Synchronize volume level calzoneman/sync#322
- Fix a strange corner case bug in
Channel.userJoin
- Fix a potential cause for the mysterious crash that doesn't log any errors
- possible google drive embed example link
<iframe src="https://docs.google.com/file/d/0BwMmuYY4RxzSMnQzdk4yeWN2V1U/preview"></iframe>
- Has limitations
- Channel passwords
- Change the way mute is handled
- Change broadcastUserUpdate to only send specific changes
- new system of asynchronous event queueing
- decouple media lookups and permissions from playlist.js
- Fix /clean
- Clientside throttle for comma separated queues
- Combine multiple queuefails
- Improve the way the link filter works
- possibly include the link that failed in queueFail
- supposedly there's something wrong with /clean
- Fix UTF-8 encoding in the database
- Fix banning guest names
- Don't query the database for unregistered channels
- Don't query the database for livestreams
- Fix typos
- Add an extra clientside check for stuck duplicate names
- Allow renaming custom embeds
- Fix video durations not showing up in the library
- Fix giving administrator rank to guest logins on empty channels
- Fix #255
- Fix name hover getting stuck when someone joins
- Video transition time
- Refactor API
- Change endpoint locations to be more logical/clear (e.g.
GET /api/users/:user/profile
,POST /api/account/passwordchange
) - Use
POST
for endpoints which require passwords (e.g.POST /api/login
)
- Change endpoint locations to be more logical/clear (e.g.
- Refactor database to use the
mysql
module instead ofmysql-libmysqlclient
mysql
is written in JS, thus it doesn't require thelibmysqlclient-dev
system package- Refactored database to be asynchronous - should improve performance
- All queries to the database are abstracted through database.js, which should make future changes and additions smoother (since the queries aren't spread out across files)
- Instead of caching the entire channel library in RAM, media additions are queried to the channel library in the database - should reduce memory usage
- Add
defer
attribute to the API<script>
tags in channel.html - should improve load time - Revisit the ban system
- Ensure that IP bans work as intended
- Check global rank as well as channel rank to prevent IP banning site admins
- Address some issues with IP masking for non-siteadmins
- Clear afk timer regardless of whether someone is afk when voteskipping
- Move custom embed permission next to queue livestream
- Fix paginator still showing 5 buttons when there's less pages
- Remove modestbranding youtube param so people can have their like/dislike buttons
- [Tentative] options for userlist sort
- Default
- Admins/mods at the top
- AFKers at the bottom
- Show usercount breakdown on hover
- Clientside handling of attempted chat impersonation
- Fix issues with returning leader to server
- Clear playlist event queue when new playlist arrives
- Change "Loaded Channels" to "Public Channels"
- Add back quick promotion buttons to userlist
- Decided to add a dropdown selector instead of the old single-step promote/demote buttons
- Change 'Take Leader' to 'Remove Leader' and only show if they are a leader
- Clarification: there is one button. If someone is a leader, it reads 'Remove Leader', otherwise it reads 'Give Leader'
- Investigate using a lock icon button on the same row as voteskip
- Add volume slider to Soundcloud
- Refactor media lookup
- Add GDATA v3 API
- Note: v3 of the YouTube API is only implemented for single video retrieval. For playlists and search, it doesn't return the video length, so I would have to make a second request, which makes it not really worth switching to
- Support YouTube API v2 developer keys
- Note: This developer key is applied when available to playlists, searches, and (when
enable-ytv3
is set tofalse
) individual videos
- Note: This developer key is applied when available to playlists, searches, and (when
- My Channels interface on Account page
- List user channels in ACP
- Allow channel admins to view channel log
- Log voteskips
- Log video adds/moves/deletes
- Custom embed support (
iframe
andobject
) - Refactor clientside player loader
- Add setting for
wmode=transparent
- Change "Show Library" to "Show Library/YouTube search"
- Make voteskips suck less
- Move resizing calculation away from
#queue
- [FIX] Check for
NO_WEBSOCKETS || USEROPTS.altsocket
instead of justNO_WEBSOCKETS
- [FIX] setAFK italics
- [FIX] calzoneman/sync#244
- [FIX] calzoneman/sync#247
- Use paginator.js for ACP
- Use paginator.js for channel ranks, library/search
- Instead of SELECT * FROM actionlog, query the action names, and have the client request them specifically
- Only record administrator logins for login-success
- Linewrap index page because people use stupid URLs