- 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?
- check why at startup unkown lyrics are fetched 2 or 3 times, and fix it
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):
- 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
- 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)
- when no lyrics, improve the rendering (writing "No lyric" or "Fetching lyrics failed" instead of the lyrics is not very nice/pretty...)
- 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.
- 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)
- 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