Commit Graph

743 Commits

Author SHA1 Message Date
Anna Schumaker 00d43547e5 sidebar: Create a custom listrow for User playlists
With a button that deletes the user-created playlist when clicked

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker 6c8903e7fd sidebar: Bold the top playlist on the trackdb.Stack
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker aa15f9bf69 sidebar: Push selected rows onto the trackdb TagStack
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker d6b7a4bb8b sidebar: Give child TagRows an indented look
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker 3362029123 sidebar: Don't set headers on child TagRows
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker f477f8f12a sidebar: Load child tagstores during __init__()
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker cf23b4f8e0 sidebar: Respond to child Added and Removed notifications
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker de155f6c88 sidebar: Create ParentTagRows
With an expander button that shows or hides its children

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker 43033b4e21 sidebar: Create ParentTagBoxes
For use displaying Tags and SuperTags

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker ab515326c9 sidebar: Create a UserTagBox
With different icons for each type of user playlist

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker e6c936d51e sidebar: Create LibraryTagRows and a LibraryTagBox for library paths
So we can add in buttons for updating and removing individual paths.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker 6059081d03 sidebar: Add a header to some TagBoxes
I enable it for Genre and Artist tagboxes right now

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker 6a044b8d4b sidebar: Load TagRows during TagBox __init__()
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker 2614db8923 sidebar: Give TagBoxes a sort_func()
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker ef759c2e64 sidebar: Give TagBoxes a clear() function
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker ca8d4961de sidebar: TagBoxes can update tag size when changed
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker bf0dbbe5dc sidebar: TagBoxes take a tagstore and icon as constructor arguments
I use the tagstore to register Added and Removed notifications. From
there, I can create and remove TagRow instances in the listbox.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker 9ceb2d8a2f sidebar: Create a TagRow class
This gives me a consistent look to use across each sidebar ListBox

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker 6e8bdf1ae1 sidebar: Add a function for adding library paths
I make sure to carefully select between the parent folder or the
currently selected file.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker e5ce819b23 sidebar: Add directory chooser widgets
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker bb44fbd128 sidebar: Give the Library tab a few extra widgets
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker ac282cb9e3 sidebar: Create a TagBox class
And set it as each of the pages in the sidebar stack

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker f7b2383ff4 trackdb: Add discnumber to the tracknumber field
This is inspired by how Musicbrainz Picard lists tracks during scanning

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:27 -04:00
Anna Schumaker cd94100c22 trackdb: Set artist sort order during scanning
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:26 -04:00
Anna Schumaker b0d419e7bb trackdb: Give the TagStack a NextTrack publisher
This is mostly needed so we save the stack after tracks are picked,
otherwise queued tracks will keep reappearing after a restart.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:24 -04:00
Anna Schumaker d477aeddb2 trackdb: Give TagStacks an autopause counter
And change next() to return both a track and a boolean indicating if we
should keep playing

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:23 -04:00
Anna Schumaker b27b44df38 trackdb: Add a TagStack instance to the trackdb
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:22 -04:00
Anna Schumaker 5870e7e9a1 trackdb: Give TagStacks state related functions
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:20 -04:00
Anna Schumaker 0a8462e5c5 trackdb: Give TagStacks a PushPop publisher
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:19 -04:00
Anna Schumaker 925664f7aa trackdb: Give stacks an easy way to queue up tracks
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:17 -04:00
Anna Schumaker db5bfdb550 trackdb: Give TagStacks next() and previous() operations
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:16 -04:00
Anna Schumaker 90cfcd29f6 trackdb: Create a TagStack with push() and pop() operations
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:15 -04:00
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