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