todo: Add task about refactoring device hacks
[profile/ivi/rygel.git] / TODO
1   * MediaDB:
2     * Refactor the beast
3     * Some of the new classes need to be 'internal'.
4     * persist update count for containers
5     * More errors needed in MediaDBError
6     * Remove generic save*() & get*()
7     * Fix coding-style/indentation everywhere.
8     * DB tables should directly correspond/map to class hierarchy & naming
9     * scheme.
10
11   * MetadataExtractor
12     * Find a way to handle images properly
13       * Will be done automagically by
14       * https://bugzilla.gnome.org/show_bug.cgi?id=626531
15
16   * MediaExport
17     * '''Fix coding-style everywhere'''
18     * Filesystem-based cover art (Implement feeding-part of MediaArtStorageSpec)
19       * Preliminary patch exists, though ugly
20     * React to configuration changes
21     * Add configurable filter on "Genre" to decide between Audio and Music for
22     * UPnP class
23     * check if g_file_enumerator_container can simplify harvester
24     * D-Bus API
25       * Add 'title' param to AddURI?
26         * Patch needs cleaning
27       * Removing URI
28         * causes assertion failure followed by a crash if done during its
29           harvested at rygel-media-export-root-container.vala:393
30
31   * See if any of sunil mohan's changes are mergable.
32
33   * Check in HTTPSeek really needed?
34
35   * crash on trying to trancode ogg to wmv.
36
37   * Always build/run tests if configured with '--enable-tests'.
38
39   * autogen passes '--enable-tests' to configure by default.
40
41   * Use common.m4 in tests/Makefile.am.
42
43   * Cache response(s). If user fast forwards a stream, one request completes and
44     a second will be issued with a new time offset.  It is important to keep the
45     latency of starting the new request small.
46
47   * Refactor ItemCreator class (especially run method).
48
49   * Tracker
50    * Get mime-type from gupnp-dlna when dlna pn is known.
51         OR
52    * Make sure tracker uses mime from gupnp-dlna.
53
54   * Assign priorities to gstreamer threads
55     (See gstreamer/tests/examples/streams/stream-status.c)
56
57   * UI
58     * Make sure we restart rygel when configuration changes.
59     * Fix tooltips.
60     * Get interfaces directly from NM.
61     * Show available APs for Wifi interface.
62
63   * rygel copies config file to user's home dir if not already there.
64     * Copy code from UI.
65
66   * Start rygel as part of user session.
67     * Remove relavent code from UI code.
68
69   * XBox hacks:
70     * Split in XBox hacks and ContentDirectory:1 hacks
71     * Config for device hacks user-agent.
72
73   * Transcoding:
74     * Make use of encodebin when it's ready (update README/wiki afterwards).
75     * Use h264 instead of mpeg2 video?
76
77   * UI:
78     * Kill preferences UI
79       * Move UI components to gnome-user-share (bastien will do this, really?)
80       * Remove rygel-preferences (code and UI file).
81       * Remove unneeded API from UserConfig.
82       * Remove related stuff from this TODO file.
83
84   * MediaItem.add_resource() should take a res (and renamed) rather than
85     taking a didl_item and returning a res.
86
87   * Tracker
88     * More suitable name for SearchContainer (QueryContainer?)
89     * Async creation of containers.
90     * Fetch as much metadata from added item as possible.
91     * Use tracker:id for IDs.
92     * Complete search implementation.
93       * Deal with number search expressions.
94       * Deal with logical expressions too.
95     * Move dbus path constants to relavent interfaces.
96
97   * Document plugin API.
98
99   * Use methods (with errors) in Player's API to set props.
100
101   * Player's APIs should be async.
102
103   * Make all GIO calls async
104
105   * Replace magic keywords in model description as well.
106
107   * Get rid of 'handle_error' in most places.
108
109   * save_modified_desc is in two classes.
110
111   * Unit tests
112     * HTTPGetHandler
113       * HTTPIdentityHandler
114       * HTTPTranscodeHandler
115     * UserConfig
116       * config file not available
117
118   * MediaProviderSpec/External
119     * incrementally browse containers at startup.
120     * Fix search: complete prop translation.
121     * search: What about multvalued props?
122     * Make use of "*" filter.
123
124   * How to hide ContentDirectoryError?
125
126   * mpris
127     * use icons for media objects.
128
129   * AVTransport
130     * Handle Next/Prev
131     * Handle GetMediaInfo_Ext
132     * Actually handle all advertized actions/variables.
133
134   * Playbin
135     * configuration options to set gst playbin props?
136
137   * Handle all provided metadata in CreateObject.
138
139   * Put common code in item and container into object (e.g upnp_class)
140
141   * Totem plugin that implements MediaRenderer spec.
142
143   * plugins should keep version of rygel they were compiled against.
144
145   * ScheduledRecording (ScheduledRecording spec, especially section 2.9.2.2.1)
146     * Add MediaItem.ChannelID prop.
147     * MediaItem.ChannelID prop gets serialized into DIDL.
148     * Skeleton ScheduledRecording service implementation
149     * RecordSchedule : MediaObject
150     * RecordTask : MediaObject
151     * Implement ScheduledRecording and RecordingBrowse classes (only allow
152       single RecordTask in each RecordSchedule)
153     * Make ScheduledRecording and ContentDir derive from a common class
154     (Browsable?). Same goes for RecordingBrowse and ContentDirBrowse.
155
156   * Move common code (construction and serializating) to MediaObject.
157
158   * Move the res field and it's manipulation to MediaObject.
159
160   * ScheduledRecording
161     * export EPG hierarchy
162       * EPG container
163       * EPG item
164
165   * Tracker:
166     * Port to libtracker-sparql.
167     * Set the pixel-aspect-ratio props.
168     * MetadataValues:
169       * Document delegate functions.
170     * Rid of choping tails.
171     * Do something about total_count param of search (using COUNT?)
172     * Missing metadata:
173       * Video: resolution info, author, framerate, bitrate etc.
174       * Image: album.
175     * Make use of refID.
176     * Use ~/.face as icon if available.
177     * Request creation of thumbnails (http://live.gnome.org/ThumbnailerSpec).
178     * Remove redundant "Item" from item class names.
179     * share playlists and other categories?
180
181   * Internal res:
182     * Provide IP.
183
184   * Provide APIs for D-Bus service-based plugins (external,mpris,tracker).
185
186 === Doubtful / issues ===
187
188   * Use cached props instead of Properties.get*() for cleaner code. issue: How
189     to deal with optional properties on MediaServer2?
190
191   * move contents of src dir a level up?
192
193   * Pass a function to HTTPServer and HTTPRequest for item search, rather than
194     ContentDir itself?
195
196   * Implement DLNA's time seeking for non-transcoded contents as well.
197
198   * Turn Rygel into a library?
199     * most c files put into a lib: librygel.so
200     * update pkg-config.
201
202   * remove project prefix from file names?
203
204   * use soup_buffer_new_with_owner() to save memory?
205
206   * UTF16 conversion to UTF8.
207
208   * mark the plugins using %h option.
209
210   * listen to hostname changes and re-create plugins that use %h magic.
211
212   * Port to Gio.Variant and GDBus.
213     * Asynchronous DBusService/Interface.shutdown.
214     * Remove FreeDesktop.Properties ?
215
216 === Wishes ===
217
218   * http://zee-nix.blogspot.com/2008/10/rygel-gnome-upnp-media-server.html