Commit Graph

711 Commits

Author SHA1 Message Date
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