================================================================================ Synopses ================================================================================ -------------------------------------------------------------------------------- THINGS I WISH OTHER PEOPLE WOULD DO FOR ME -------------------------------------------------------------------------------- - tell me how to send a wakeup event to xscreensaver, and possibly how to wake up APM screen blanking. - port brain to Win32 and make it work with Winamp -------------------------------------------------------------------------------- LITTLE BUGS -------------------------------------------------------------------------------- - cannot remove unknown album -------------------------------------------------------------------------------- BEFORE 0.6 ALPHA RELEASE COMPLETION -------------------------------------------------------------------------------- - debian packages - script building of that package -------------------------------------------------------------------------------- BEFORE 0.9 BETA RELEASE -------------------------------------------------------------------------------- 1. Unit tests - add infrastructure to handle this in the default build. This means figuring out how to use qmake to differentiate between release and debug builds - perhaps test.cpp can have all necessary data constructs and simply have a function for each cpp file that needs testing? - perhaps each class should have a testme() function. - AlbumDB can have an isTest() that tells if it has the test data - Tests required: - for any template serializors, dump to and from a buffer. Compare. - transport to a file - transport over a socket - transport in text-mode 2. Fix the player implementation. - See below for message-passing arch. - XmPlayer.cpp: should individually add track-files for a given album. This will be handy later, should we decide to populate the database with something more sophisticated than parsing filenames. 3. UI fixes - many more menus - genres / cats - track next/prev - album next/prev - fullscreen toggle - font size - font size autoswitching for IR / keyboard 4. Prettification - make filtration dropdowns disappear if they are empty. - one-album per directory is quite artificial. Would it be so hard to use a filename parsing regexp? - it would also be nice to have the option of using ID3 tags. -------------------------------------------------------------------------------- Wishlist -------------------------------------------------------------------------------- CONFIG - QFile options, existence verification? - paths (: separated), existence verification? - expanded help describes inputs - specify debug output destination - port to STL instead of QT - differentiate between status output and debug logging UNIT/REGR TESTS - transport to a file - over a socket ================================================================================ 1. Fix the player implementation. ================================================================================ Currently, when I implement a new player command, it requires changes in about ten places: - the network client header and implementation - the network server implementation - the general player header / implementation - the stubbed-out player implementation - the specific (i.e., Xmms, maybe later Winamp) player header / implementation But there's only two _real_ pieces of info: - The format of the command within brain. I.e. text [argument] - The linkage of the command to the player I.e., xmms_remote_TEXT(_sess, arg); - NB, this is sometimes non-trivial, e.g., "play A3T12" == play(26) Thoughts: - Player parses string commands directly - perhaps Player is subclassed into ClPlayer, which provides slots that send the appropriate string through netclient? - info requests like "db" don't get passed to the player? - Ultimately, the layout might look like: GeneralPlayer::GeneralPlayer() { cmds += PlayerCmd ("stop"); // like stop button cmds += PlayerCmd ("play"); // Press play on tape cmds += PlayerCmd ("play", "num"); // Play with a numeric argument. } class Xmms : public GeneralPlayer ... Xmms::Xmms() { link( PlayerCmd ("stop"), xmms_remote_stop(_session) ); link( PlayerCmd ("play"), xmms_remote_play(_session) ); link( PlayerCmd ("play %d"), xmms_set_playlist_pos(_session, %d ) ); } bool Xmms::receive(QString str) { ... else { DBG(2, "Unimplemented command %s\n", str); return false; } }