~ciaran-liedeman/exaile/ubuntu_sound_menu_plugin

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
NOTE: This file is for significant code changes and improvements that have a 
high probability of happening.  General feature requests and bugs should go
on launchpad instead.


add good album-level handling to xl.trax
    - what features are needed here?
    - current modules that need this:
        xl.covers
        xl.playlist (for album shuffle)


backwards-incompatible changes to make (0.4?):
    database:
        use tuples instead of lists to store multiple values (saves 
                16 bytes or more per use)
        divide tracknumber and discnumber into separate tags 
                instead of using /
            - tracknumber/tracktotal, discnumber/disctotal, as picard uses
        get rid of __basedir and __compilation as they are unnecessary 
                and waste LOTS of space
            - replace __compilation with just an __is_compilation boolean 
                    flag, move heuristics elsewhere
            - basedir can be gotten with gio.File.get_basedir, no need to 
                    store it
        make db into a dir so it can be split into multiple files as needed
            db/
                music
                music-libraries
                music-blacklist
        use pickle instead of shelve to persist the database
            - scales better, more compact

    playlists:
        remove internal format in favor of an extension of XSPF
            - more future-proof, extensible, and compatible
            - use XML namespaces to separate exaile-specific tags

    event:
        make events capable of sending variable numbers of arguments
        change argument order to be more like gobject signals?
        make all events synchronous - event listeners can add async trivially
                with glib.idle_add or @common.threaded

    settings:
        make settings have a registered default value, so that defaults
                don't have to be passed to EVERY instance of get_option.
            - maybe make type explicit too.
    
    misc:
        store volume and mute separately so they persist properly.


TODO: figure out some way of dealing with Collections that have overlapping
    sets of Tracks - right now if you load both from disk one after the other
    one's data for the intersecting Tracks gets clobbered