summaryrefslogtreecommitdiff
path: root/muggle-plugin/TODO
blob: 6594daf56dfa8a68ab9f7083ab4e9e30ba762dbe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
/*! \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

    \subsection urgentosd OSD-related Issues

    \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)
	- extend mgSelection with all SQL code needed by mugglei.c, maybe something like mgSelection.SyncWithPath(const char *path, options)
	- then remove all SQL code from mugglei.c
        - Check for memory leaks
        - Check for (reasonably) consistent usage of char pointers and strings
	- mgPlayer used what for?
	  - Could save IP/host name and associate last playlist/index loaded

    \subsection urgentcontent Content handling    
        - Save on exit
	- Think, whether type (mp3, ogg, flac) should be stored in database
          - could be used in searching/structuring as well
        - Party mode (see iTunes)
          - initialization
            - find 15 titles according to the scheme below
          - playing 
            - before entering next title perform track selection
	    - do not increment the playcount
	    - if more than 5 titles are found, make sure the same title is not directly repeated
          - 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
        - Possible to resume play instead of restarting list from the beginning?
	- Display covers
          - Import filename
          - Show image during replay
	- Add FLAC decoder
	- Determine max. framecount (needed for rewinding?)
	- Init scale/level/normalize?
	  - The max. level should be recognized during play
	  - Store max. level in the database
        - Display covers

    \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
    
    - 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
      - Second pass: check for all tracks, whether files do exist
        - delete DB entry if not

    - Album
      - Cover images (based on filename or tag)
      - Genre
      - Modified
      - Cover text

    - Tracks
      - Language (?) - encoded by what standard?
      - Rating?
      - Modified, created
      - Lyrics

    - Import playlist from m3u
    - Run import/update from within OSD?

    \subsection midcode Code issues
    
	\subsection midosd OSD-related issues
        - can mgMenu and mgMainMenu be combined into one class?	
	- can mgActions inherit from cOsdItem?
	- 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

	\subsection midcontent filter issues

        - new OSD list for filters. Only ONE filter can be active at any time
	- filters can be defined recursively, different filters can share subfilters
	- Save/load filter set
	  - table filters and filterrules
	    - filters: id, name, created, author. Uses id 0 from filterrules.
	    - filterrules: PRIMARY(filterid, id), negate, operator, op1, op2, 
	    - if operator is AND or OR, op1 and op2 are filterrule ids
	- filters are always applied, even to "instant play" and "now playing"

	\subsection midcontent Content issues

	- 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
	
        - 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)

*/