Anna Schumaker
eb163b27bb
trackdb: Turn Tracks into GObjects
...
So they can be returned directly by the ListModel
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
7b204f2d1b
lib: Give Tags __getitem__() support
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
6e1da0f7b4
playlist: Have the last column expand to fill any remaining space
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
fc9b734e38
playlist: Initialize column widths to some reasonable values
...
And save / restore through the settings file.
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
849503eaf2
playlist: Create a custom columns class for the playlist ColumnView
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
fa088ae8ea
playlist: Begin playlist widgets
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
193dd7c85c
sidebar: Add a key event controller to user tagrows
...
And respond to the delete key to remove playlists
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
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