Anna Schumaker
1cd9780cdf
trackdb: Have the UpNextPlaylist use Track.remove_from_playlist()
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:13 -04:00
Anna Schumaker
13be9e3ee2
trackdb: Add user playlist support to Tracks
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:12 -04:00
Anna Schumaker
0e0ab0c3be
trackdb: Register the save functions after loading
...
We replace each object after unpickling, so we need to make sure we
listen to the new ones when they tell us they've changed.
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:11 -04:00
Anna Schumaker
72a4c4fa95
trackdb: Save playlists when the UserTagStore is changed
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:09 -04:00
Anna Schumaker
9e78b12eb0
trackdb: Create a UserTagStore and add it to the tag state tuple
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:08 -04:00
Anna Schumaker
ad36293335
trackdb: Add a TagStore for User tags
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:07 -04:00
Anna Schumaker
52eca7fd20
trackdb: Add special Tags for user-controlled playlists
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:03 -04:00
Anna Schumaker
11c9f0b267
trackdb: Retry saving if something goes wrong
...
Occasionally we have a problem with tags changing during pickling. If
this happens, reschedule the save for later and hope it doesn't happen
again
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
d1456b14bd
trackdb: Fix setting tags when loading tracks
...
We have to do this as a separate step once the tagstores have been set
in tagdb/tags.py
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
ba64910ef9
trackdb: Clean up test_trackdb.py
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
c27d4d5ce1
trackdb: Clean up __init__.py file
...
And use the new tags.get_state() and tag.set_state() functions
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
0b4c440d66
trackdb: Give tags a get_state() and set_state() function
...
To be used during save and reload
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
7d4e92faa8
trackdb: Move LibraryPaths into the __init__.py file
...
And rename to LibraryTag
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
85727d786b
trackdb: Clean up library test
...
Prepare to move it over to a different file
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
fc647cd9b1
trackdb: Move the LibraryStore into the trackdb/__init__.py file
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
647a1955e5
trackdb: Remove the trackdb.track.TrackUpdated publisher
...
And prefer using the one from the TrackAllocator
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
109b1b7c62
trackdb: Use the LibraryStore for library paths
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
2199ff819c
trackdb: Give LibraryPaths a clear() function
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
8d6d4a0b44
trackdb: Give tracks an about_to_remove() function
...
And have the TrackAllocator call it before removing tracks
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
ec72f186bb
trackdb: Have LibraryPaths inherit from Tag
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
e5f9ac2556
trackdb: Use a thread.Thread for LibraryPath scanning
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
9d90ba2c47
trackdb: Pass pathlib.Path()s to the LibraryPath constructor
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
30f5aa18df
trackdb: Remove unused LibraryPath.add_track() function
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
31902a8b44
trackdb: Use the TrackAllocator Added and Removed publishers directly
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
235c7998dc
trackdb: Convert LibraryPath.tracks into a list
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
c089bfc721
trackdb: Remove LibraryPath __getitem__() function
...
And use the TrackAllocator for this instead
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
51a1078b4d
trackdb: Rename LibraryPath.path to LibraryPath.name
...
So it matches the name of the field in the Tag class
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
219a3184b0
trackdb: Use a TagSuperStore for Years
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
d2a5d940bf
trackdb: Use a TagStore for Decades
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
0e23e25edf
trackdb: Use a TagStore for Genres
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
f98d8bd4dc
trackdb: Use TagSuperStore for Albums
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
d342cb398a
trackdb: Use TagStore for Artists
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
71ae845a99
trackdb: Use the TrackAllocator during scanning
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
8a412ca6dc
trackdb: Give TrackAllocators a played() function
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
518e3cf9ad
trackdb: Give TrackAllocators an autoremove() function
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
eb6eb0180b
trackdb: Give TrackAllocators a len() function
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
c5e317b737
trackdb: Give TrackAllocators a function to list tracks in a library
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
b3b39d2fc4
trackdb: Give state functions to the TrackAllocator
...
So that we don't try to pickle out things that can't be pickled
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
7d310acd8c
trackdb: Add a TrackAllocator() class
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
96fb4e86e7
trackdb: Use the new Metadata class for reading track metadata
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
f4a1ef67e8
trackdb: Store the LibraryPath pointer in the track
...
This makes it so tracks can get to their libraries directly
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
8fcd84e7d3
trackdb: Remove tags dict() from tracks
...
Just set and get these values directly
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
ebf7eb6abc
trackdb: Ride the bus instead of an idle queue
...
This lets us schedule saving on a regular interval instead of waiting
for the user to be idle.
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:52:48 -04:00
Anna Schumaker
ba5f21b0c0
Icons: Add our custom icons to the search path
...
But only when we're running in debug mode. Running while installed
should use the icons from the default search path
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:51:54 -04:00
Anna Schumaker
d98eca8533
pulser: Hide the pulser when not pulsing
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:51:54 -04:00
Anna Schumaker
dc86b1c32e
pulser: Pulse for busses, too
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:51:54 -04:00
Anna Schumaker
fd43952d54
pulser: Pulse when threads are started
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:51:54 -04:00
Anna Schumaker
85b5c964a6
sidebar: Save the current page
...
And initialize to the Library page to make adding that first directory
easier for the user.
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:51:54 -04:00
Anna Schumaker
a00701e722
sidebar: Implement a custom sidebar switcher
...
I'm not a fan of either of the built-in stack switching widgets, so I
implemented my own to take up less space on the side.
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:51:54 -04:00
Anna Schumaker
aff3fade6f
sidebar: Begin sidebar widgets
...
They involve a stack and a vbox where toggle buttons will eventually be
placed.
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:51:54 -04:00