/*! \page issues Muggle Issue List The page lists a number of open issues and possible ideas for improvement. It can be seen as a notepad for the developers or as an entry point for volunteers. There is no real order among those things and even the occurrence of an issue does not mean that it will be implemented/resolved at some time. If you feel, something is really urgent, go ahead. We'll help you. \section urgent Urgent/Short-term issues \subsection bugs Bugs and testing needed - Test execution of playlist commands - Crashes in filter selections? - Keep this? Test mgPCMPlayer::getSourceFile() for GD case (find) \subsection urgentosd OSD-related Issues - Possible to resume play instead of restarting list from the beginning? - Save on exit \subsection urgentcode Code polishing - Clean up coding style and documentation in general - Logging - extend mgLog with static logging methods - in DEBUG mode, issue logs, warnings, errors to stderr - otherwise issue errors only to syslog - Check for unnecessary log commands - Generate HTML documentation using doxygen, - use dotty/gv for state machines of player - make available online - Clean up mugglei (abstract code where possible) - Check for memory leaks - Why do filters use pointers? - Check for (reasonably) consistent usage of char pointers and strings - mgDatabase class is not used - should handle a static object with a MySQL connection - execute queries - escape query strings - mgPlayer used what for? - Could save IP/host name and associate last playlist/index loaded \subsection urgentcontent Content handling - Think, whether type (mp3, ogg, flac) should be stored in database - could be used in searching/structuring as well - Handle loop mode in mgPlaylist - Handle shuffle mode in mgPlaylist - shuffle mode on - for next file: - generate a set of random numbers as long as the playlist - re-generate when removing or adding entries - in mgPlaylist::getCurrent use this additional set as a mapping - Party mode (see iTunes) - initialization - find 15 titles according to the scheme below - playing - before entering next title perform track selection - track selection - generate a random uid - if file exists: - determine maximum playcount of all tracks - generate a random number n - if n < playcount / max. playcount - add the file to the end of the list \subsection urgentplayer Player extensions - Determine max. framecount (needed for rewinding)? - Init scale/level/normalize? - The max. level should be recognized during play - Store max. level in the database \subsection deploy Deployment - Script to publish a version - make dist - copy .tgz, README, CHANGES, HISTORY into web directory - generate documentation - copy into web directory - sync with web - How to track bugs and feature requests? \verbatim # $1: version name (e.g. 0.0.5-BETA) # how to determine current path? svn copy ... http://.../svn/muggle/tags/$1 make dist # obtain name from output? or copy commands and make correctly mv vdr-muggle-0.0.1.tgz ~/Web/current/htpc/muggle/vdr-muggle-$1.tgz cp README ... cp TODO ... cp CHANGES ... doxygen muggle.doxygen cp -R doc ~/Web/current/htpc/muggle/ sitecopy --update htpctech \endverbatim \section mid ToDo items of moderate importance \subsection midimport Import stuff - Album - Genre - Modified - Cover text - Cover images (based on filename or tag) - Tracks - Language (?) - Genre1, 2 - Rating? - Modified, created - Lyrics - Import playlist from m3u - Run import/update from within OSD? - Handle updates in both directions - Check modification date in DB/fstat - if file is newer: update tags into db - if DB is newer: update db into tags \subsection midcode Code issues - really abstract from specific queries etc. - mgDatabase should completely abstract database (mySQL) stuff!? - read/write queries - return results (needs a homogeneous representation of results?) \subsection midosd OSD-related issues - Incremental search - Type numbers to enter characters and jump to first title accordingly - Check whether submenus (as implemented in VDR) are more suitable - do not permit jumping to arbitrary menus though - Add play indicators - Toggle display with Ok (off -> track info -> album info -> playlist info -> off) - Display track info (use vdr 1.3.12 progress display) - Song title - Artist - Genre - Album - Bitrate, channels, samplerate, format, ... - Progress display - Display album info - Album name - Artist - Year - No. Tracks - Track names? - Display playlist info - Overall progress - Next track(s) \subsection midcontent Content issues - Save/load filter sets - Apply filter set as dynamic playlist (i.e. show filters when loading playlists) - Handle ratings (increase/decrease during replay) - Keys to directly increase - handle a playcounter - when playfrequency reaches lower level x from above: decrease rating - when playfrequency reaches lower level x from below: increase rating - when playfrequency reaches upper level y from above: decrease rating - when playfrequency reaches upper level y from below: increase rating \subsection midplayer Player issues - Display covers - Add FLAC decoder - Use single CD files with cuesheets in metadata for FLAC - Handle recoding samplerate, limiter etc correctly \section vision Long term ideas and visions - daapd integration? - netjuke integration? - Display arbitrary images while playing music - handle off-line media (CDs, DVDs, recordings) - handle streams (live TV with channel list, MP3 radio,..., EPG) - handle images (possibly in sync with music/radio) - muggle content syndication (e.g. via DAAPD) - access media on someone elses computer - provide a stream (e.g. icecast) of the currently played music? - allow remote stations to attach to this \section done Done - BUG: Check play speed (was XINE related) - BUG: Playlists starts with 2nd song (DONE) - Export playlists - Delete selected item - Add command line option for top level directory - Prepend top level dir to filename in non-GD-mode - Edit playlist (move tracks like channels in VDR channel list) (OK in playlist view) - Instant play = empty current playlist, append tracks of current node and play (easy, in submenu of browser) - Clear playlist (submenu action) - Find files from database entry based on GD compatibility flag - Handle Next/PrevFile in mgPlaylist (vdr_player.c) - Add plugin parameters for database name/host/user/pass - Add plugin parameter for GD filename compatibility - handle filters: - create tracklist from filter - create tree from filter - i18n (english and german) - Album import - Various artists import (assorted) - Ogg/Vorbis decoder integration - cOggFile kept - cOggInfo dismissed in favor of obtaining info from DB - coding conventions adapted - Schema extended to keep audio properties - Import (mugglei) extended to store audio properties in DB (most notably samplerate, no. channels) - Extended mgContentItem with audio properties - Extended mgGdTrack with audio properties (bitrate, samplerate, channels) - in mgPCMPlayer/vdr_player.c: - pass m_playing to mp3/ogg decoder (instead of filename) - mgOggDecoder: obtain audio properties from DB (channels, sampling rate via mgContentItem) - mgPCMPlayer::getSourceFile moved to abstract data layer (mgContentItem) and made concrete in subclasses (mgGdTrack) - mgDecoders::findDecoder: extend decoder detection - BUG: Check compatibility for 1.3.12 (DONE) - BUG: Plugin crashes when deleting playlist while playing - should stop playing immediately or not permit this - BUG: Check deletion of entries while playing - only allowed, if item is not currently played - adapt index in playlist - BUG: Playlist indexing not correct - Player jumps e.g. from track 1 to track 3 - Make sure jumping beyond the end of the list is not permitted - BUG: Plugin crashes when selecting entries with special characters - Escape query strings correctly - should go into gd_content_interface.c (row[] in lines 1175,1179,1882)? - Simple progress indicator for 1.3.12 - Attach to graphlcd plugin via replay string - Test Instant play from browser view - Displaying the menu while progress display is shown makes VDR crash (DONE) - Check int/unsigned stuff in mg_playlist - mgPCMPlayer::GetIndex: obtain track length from database (DONE) - Import (mugglei) now checks for duplicate entries based on filenames - Playlist view: start at selected on Ok - Toggle Track view/playlist view (red) - For playlist view show playlist name, total time - For track view show name, artist, time - Toggle detail/progress view (green) - Track view: all metadata - Playlist view: all tracks (past three, upcoming ones) */