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
|
Cleanup:
--------
* remove useless self. (start in Stream, Playlist) so that we really know
the locality of things
* extract constants (path for config and directories) so they can be reused
(no more magic values)
* try: play more with Gtk signals: don't overtest self.conn but disconnect
signals when not connected to MPD, and reconnect signals when connected to
MPD again?
* improve perf
* must start faster (as fast as py2/gtk2 at least)
* improve *PyGObject* perfs first?
* rework artwork cache (broken since 12df68). Is it really useful?
* lyrics:
* check why at startup unkown lyrics are fetched 2 or 3 times, and fix it
Plugins:
--------
* instead of::
lyrics_fetchers = pluginsystem.get('lyrics_fetching')
if lyrics_fetchers:
for plugin, get_lyrics in lyrics_fetchers:
have something like::
pluginsystem.execute('lyrics_fetching', callback_one_plugin, *args, **kwargs)
* work on plugin repositories (see https://github.com/multani/sonata/pull/17)
* load/reload new plugins without restart
* find an API to limit global states in plugin (no need to have globals as such)
* make plugins easier to write:
* limit the work to be done in the plugin (if it needs to be done in
each plugin, then there's a problem):
* see stuff like
https://github.com/multani/sonata/commit/e5a966de350daa19a5adbb9ec78c29334bab74fa
* provide more API to access Sonata's content/features:
* save/restore config values
* fix cover plugin: it always download the first cover, even if another one has
been selected
* fix cover plugin: doesn't download any cover when several cover plugins are
enabled
UI:
---
* remote artwork dialog:
* on no result, display the message in the middle, disable "can be selected"
state, disable 'OK' button
* library:
* browse an album with a cover -> the cover appears in the breadcrumb. Close
Sonata, reopen, go to Libraryy again -> the album is already browsed, but
the cover doesn't appear in the breadcrumd (need to go to the Album view
again, load all the covers, then it works)
* lyrics:
* when no lyrics, improve the rendering (writing "No lyric" or "Fetching
lyrics failed" instead of the lyrics is not very nice/pretty...)
* general:
* remove the hard-coded shortcuts in the About a window and try to regenerate
them from Gtk.AccelMap.get(): they are obsolete, they are a pain in the ass
to gather by hand, and they are probably all set up in this map anyway.
* current:
* consume mode slow when changing song (rebuild of the model after each songs?)
Gtk 3:
------
* in Info tab, more/less should hide boxes containing both labels, instead
of hiding each labels separately
* remove other deprecated calls:
* GtkBox -> GtkGrid ?
* size_request() -> get_preferrred_width/height
CLI:
----
* delete class Args (useless)
* use argparse instead
* remove local imports + globals to modules (W. T. F. ?!)
* simplify the best we can (do we need all those _execute_() methods?)
Threads:
--------
* log with thread-id enable, and see what's going on
* do we have to access MPD from different threads (Mic92 from python-mpd
says the module is not thread-safe, but Sonata steps clearly on this).
* codingteam has a number of thread-related issues reported. Fix those, look
for similar pattern to see if they can be fixed as well
* **ultimately: remove as much threading code as possible**
MPD:
----
* implements missing MPD features:
* stickers (need to found a common database for stickers' values, cf.
http://sourceforge.net/mailarchive/forum.php?thread_name=50E7F811.50607%40beatradar.no&forum_name=musicpd-dev-team)
* idle-mode
* what else?
* if playlists change while Sonata is running, the playlists' list desn't get
refreshed
* bug when creating a playlist with a "/" (forbidden by MPD, but Sonata should
konw how to react)
* bug when renaming playlist (see mpd log from Sonata, can't rename same
playlist twice)
* if was connected and MPD is shutdown, it sometimes log "Already connected" ->
what's happening?
Old TODO file
=============
::
v1.6.3
sonata freezes with gail/accessibility enabled during new library searching
translations - bold, commas for arabic (ahmad farghal email)
#3992: enabling/disabling outputs
#4370: number in playlist
contextual statusbar depending on tab opened? (michael email)
save to playlist.. default to selected files? pref?
tag editing - support for composer, disc
song queue (mpd-git will be bringing it back)
search results - show albums, artists, genres that match
right-click on tab bar (michael email)
0.15 has input support for last.fm radio
v1.7
albumartist tag for, e.g., VA albums; composer for classical
plugin support
- single instance, mmkeys (could remove dbus; faster on startup, less memory)
- artwork
- lyrics
- system tray
- audioscrobbler
- popup notification
- tag editing
- #2419 dynamic playlist (patch)
- #2454 Add as Next Track (patch)
- #4007 stop after track ('single' command in 0.15)
- #Zeroconf/avahi (patch)
Future:
support for new idle command (waiting on python-mpd)
work with mpd's new "allow authenticated local users to add any local file to the playlist"
- waiting on python-mpd to implement unix socket paths
- dnd from a file manager (implemented and untested because of above)
- new library browsing mode to open any file?
remember: no tags and implications for remote mpd users.
crop songs in current playlist?
mpd statistics
better playlist support (mpd 0.13+ only):
ability to view songs, reorder songs, remove songs, etc
lazy loading of the treeview
http://log.emmanuelebassi.net/documentation/lazy-loading/
http://blogs.gnome.org/jamesh/2006/03/31/re-lazy-loading/
clean-up
extract duplicate code into functions, classes etc.
document interfaces and implementation
modularity:
- limit module size to 1000 lines
- limit dependencies between modules
style:
- rewrite unpythonic or complicated parts
- fix reasonable pychecker/pylint warnings
tests:
- write automated tests
- refactor code into parts that can be tested
exceptions:
- add class restrictions to most "except:" clauses
- add debug logging to most except clauses
threading:
- design, document, and implement a bug-free use of threads
```
# vim:ft=rst tw=80
|