- 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
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 multani#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):
- 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
- 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?)
- 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
- 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?)
- 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
- 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?
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