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
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
|
/*! \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)
*/
|