Commit Graph

755 Commits

Author SHA1 Message Date
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
Anna Schumaker 5275feecf3 runtime: Handle changing the runtime label
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:51:54 -04:00
Anna Schumaker f40d72c05b runtime: Handle changing the visible count label
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:51:54 -04:00
Anna Schumaker b10851496c runtime: Add widgets for runtime and visible tracks
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:51:54 -04:00
Anna Schumaker 5556ed163c pulser: Add a progress bar to the UI window
The intention is to pulse it whenever a background thread is running. I
also add a horizontal separator to show that this is a separate area

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:51:54 -04:00
Anna Schumaker 9339ce22bb pane: Add a GtkPane to the Window's grid
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:51:54 -04:00
Anna Schumaker ac5c8c30d8 window: Add a GtkGrid as the window's main child
We'll pack in more widgets later

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:51:54 -04:00