File: TODO

package info (click to toggle)
sonata 1.7.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, sid
  • size: 4,164 kB
  • sloc: python: 9,480; sh: 33; makefile: 15
file content (205 lines) | stat: -rw-r--r-- 6,849 bytes parent folder | download | duplicates (2)
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