Skip to content

Instantly share code, notes, and snippets.

@calzoneman
Last active August 29, 2015 14:00
Show Gist options
  • Save calzoneman/11198387 to your computer and use it in GitHub Desktop.
Save calzoneman/11198387 to your computer and use it in GitHub Desktop.
CyTube 3.x Development Plans

https://f076d534f36238f9d651505af83c3648b17fc479.googledrive.com/host/0Bx83dbUTzBGETktRaE1BOE1QWFU/Brothers_Conflict_-_Beloved_x_Survival.mp3

Misc Changes

Requests

  • [permissions] Select from Anonymous, Guest, Registered, Leader, Moderator, Admin, Owner and Founder (instead of Anonymous, Guest, Registered, Moderator and Channel Admin) for better control.
  • Add permissions for: view (and change) permissions, view logs, view (and change) javascript and view (and change) CSS.
  • Add permission to clear chat.
  • Log commands (i.e. /clear)
  • Webm images in chat (whitelist)
  • support hitbox.tv
  • subtitles on google docs

3.5.1 - ReDoS

  • Investigate plausibility of using PCRE module

3.5 - web improvements

3.4.1 - Replace current HTML5 video player/flash fallback with VideoJS

  • Set up VideoJS
  • Blocked on investigation of better flash option

3.4 - IP changes

  • Implement IRC-style cloaking
  • Move tor banning to per-channel option

3.3.2

  • support google+ videos
  • clean up startPlayback and video refreshing

3.3.1 Channel JS changes

  • Add prompt for users to allow/deny scripts
  • Save user preference
  • Manage preferences in Options menu

3.3 Merge channel-specific tables

  • Merge library tables into one table with an indexed channel column
  • Merge rank tables into one table with an indexed channel column
  • Merge ban tables into one table with an indexed channel column
  • Add console command for deleting old channel tables

Testing

  • Conversion testing on production DB
  • Performance testing on production DB

Library

  • Don't create library table on registration
  • Don't attempt to drop library table on deletion of channel
  • Add to library
  • Get item from library
  • Search library
  • Delete from library

Ranks

  • Don't create ranks table on registration
  • Don't attempt to drop ranks table on deletion of channel
  • Add owner rank to channel_ranks on channel registration
  • Look up user rank in channel
  • Look up multiple user ranks at once
  • Query all ranks from the channel
  • Update a user's rank without overwriting
  • Overwrite an existing rank
  • Delete a rank (demote below mod)

Bans

  • Creating a channel does not create any ban table
  • Deleting a channel does not attempt to drop a ban table
  • Adding a ban
  • Testing if an IP is banned
  • Testing if a name is banned
  • Listing all bans
  • Unban

TODO

  • Figure out why duplicate entries are reported for conversion of feelingkeen and pouni rank tables -- It turns out these 2 channels have duplicate tables for different casings. Only one casing is actually used, so the wrong case can safely be dropped.
    • DROP TABLE chan_feelingkeen_ranks; DROP TABLE chan_feelingkeen_library; DROP TABLE chan_feelingkeen_bans;
    • DROP TABLE chan_pouni_ranks; DROP TABLE chan_pouni_library; DROP TABLE chan_pouni_bans;
  • Test MySQL performance
  • Fix merge notice appearing at the wrong time
  • Fix db_version not being updated

3.2 Raw file playback with ffmpeg

  • Merge FlashPlayer and RawVideoPlayer into FilePlayer which assumes HTML5 and falls back on flash
  • Figure out which container/video stream types are supported by the flash player (and HTML5 browsers)
  • Modify queue parser to detect file extensions of supported types and prompt for title input
  • Implement a similar override to jw: to allow queueing of valid files with the wrong extension
  • Add serverside ffmpeg metadata parser using fluent-ffmpeg module
  • Add queueWarn for high bitrate videos (> 1000kbps?)
  • Add a note when queueing JWPlayer saying you should try file player first

Misc stuff that needs to be fixed

  • Look into the MOTD editor not being updated properly on MOTD change
  • Make sure things that require database queries don't happen for unregistered channels
  • Extra key: type - add some useful information to report back
  • Make sure gdocs meta doesn't get saved in chandumps
  • Transition from gdocs to gdocs causes the video player size to mess up
  • Allegedly seeking with leader on gdocs doesn't work
  • Make findUserlistItem() less hacky (request from admin in /r/Frozen)
  • Missing key currentTime for mediaUpdate -- cannot reproduce
  • PMs don't work with capital letter users
  • Check profile
  • Allow google drive to be cached in library

3.1 - Channel Refactoring

Over the past year of development, the Channel prototype has become a 3,000 line behemoth managing practically every aspect of channel operation. The object of this refactoring is to separate this functionality into smaller modules that can each load/save their own data from/to the JSON chandump, register socket event handlers when a user is accepted, reject a user's request to join, register chat commands, etc. This refactoring also makes it necessary to refactor the User prototype to be compatible with this new API.

  • lib/channel/module.js - Module prototype definition
  • lib/channel/chat.js - Chat module
  • chat muting
  • lib/channel/filters.js - Chat filters module
  • lib/channel/emotes.js - Chat emotes module
  • lib/channel/library.js - Channel library module
  • lib/channel/opts.js - Channel options module
  • lib/channel/customization.js - Channel customization (CSS, JS, MOTD) module
  • lib/channel/permissions.js - Channel permissions module
  • Unregistered channel permissions
  • lib/channel/playlist.js - Playlist and playback module
  • user playlists in playlist.js
  • lib/channel/accesscontrol.js - Password protected channel join module
  • lib/channel/kickban.js - Kick/Ban module
  • lib/channel/ranks.js - Rank management module
  • lib/channel/voteskip.ks - Voteskip module
  • Channel log view

Typechecking incoming data from the wire has left socket handlers riddled with large prologues of if statements checking for possibly bad data. I wrote a small library to typecheck JSON objects against a template, and I think using it (perhaps automatically with a special function for registering a type checking listener) would improve readability of the code.

  • Clean up socket listeners with json-typecheck

The playlist should automatically refresh Google Docs links

  • Auto-refresh google docs links

Modules that are completed still need to be tested.

Things that are broken

  • Set proper rank for non-global admins
  • Anonymous users should not appear in the userlist
  • Refresh media button does not work
  • Filters/emotes
  • AFK timer reset
  • Kick old user on duplicate join
  • /ban should kick the target
  • Editing channel permissions doesn't work
  • Changing channel settings doesn't work
  • Rank editor interface doesn't send proper message
  • Fix /rank
  • [acp] Initialized ACP for undefined
  • Guest seems broken
  • queueing a youtube playlist triggered an error for activeLock on null
  • Check if registering channels sets the rank right
  • Check if login doesn't work right

Other considerations for the future (tentative, not definite)

As of CyTube 3.0, database columns for storing IP addresses have been expanded to allow storage of IPv6 addresses. Allowing IPv6 connections will require modifications to IP masking and banning functions.

  • IPv6 address masking

  • IPv6 address banning

  • Link multiple servers together

  • Cluster socket.io connections with that thing I found on reddit

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment