Commit Graph

1016 Commits

Author SHA1 Message Date
Anna Schumaker 16038a16f1 sidebar: Create a Stack with pages
Additionally, we save the current page when it is changed and restore on
startup.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-20 10:04:54 -05:00
Anna Schumaker 31695863de sidebar: Create a TableWindow scrolled window
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-20 10:04:54 -05:00
Anna Schumaker 2e4062a515 sidebar: Create a UserView list view
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-20 10:04:54 -05:00
Anna Schumaker 9dc466e8f1 sidebar: Create a TableView list view
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-20 10:04:54 -05:00
Anna Schumaker 869ab6d274 sidebar: Create a UserRow and UserRowFactory
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-20 10:04:54 -05:00
Anna Schumaker e1cab1de6f sidebar: Create a TreeRow and {User,Library,}TreeRowFactorys
This is a Gtk.TreeExpander with some extra functions to work the way we
need it. We don't have a way to create Gtk.TreeListRows manually, so we
can't test the set_item() and unset_item() functions directly.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>

sidebar: Create a LibraryTreeRowFactory

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-20 10:04:54 -05:00
Anna Schumaker 3bd60b0f06 sidebar: Create a LibraryGrid
This adds a menu button with extra options for libraries

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-20 10:04:54 -05:00
Anna Schumaker 0e7cb81476 sidebar: Create a UserGrid
This adds a button users can click to remove the playlists they create.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-20 10:04:54 -05:00
Anna Schumaker d1d84af228 sidebar: Create a row Grid
This contains the actual widgets used to display playlist information. I
override the GtkGrid.attach() function so it returns the attached widget
to simplify setup a little bit.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-20 10:04:54 -05:00
Anna Schumaker b75fc78de7 sidebar: Create a row Label
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-20 10:04:54 -05:00
Anna Schumaker fdc4bb7275 sidebar: Create a LibraryPopover
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-20 10:04:54 -05:00
Anna Schumaker 0014e5fa55 sidebar: Create a LibraryButtons box
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-20 10:04:54 -05:00
Anna Schumaker 59d9c3b484 sidebar: Create a UserSelection list model
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-20 10:04:54 -05:00
Anna Schumaker 1d5a52623c sidebar: Create a TableSelection list model
Configured to allow unselecting items so we have a way of choosing an
item if it is the only one in the list.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-20 10:04:52 -05:00
Anna Schumaker b74f948acb sidebar: Create a FilterUserModel list model
With a custom filter that only displays playlists that users can add
tracks to directly.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-19 10:34:08 -05:00
Anna Schumaker 43ec165a56 sidebar: Create a FilterTableModel list model
With a custom Regex filter that checks if the parent or any children
match the given pattern.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-19 10:34:08 -05:00
Anna Schumaker c982fe624b sidebar: Create a TreeListModel helper function
I can't inherit from Gtk.TreeListModel since the new() constructor is
the only way to set the create_child_func. Instead, use this wrapper
function to do the same thing.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-19 10:34:08 -05:00
Anna Schumaker 17391acd4d sidebar: Create a ChildModel list model
This will be used to display the children of some of our playlists.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-19 10:34:08 -05:00
Anna Schumaker f02104a9c1 Emmental 2.8 AUR commit
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-19 10:32:12 -05:00
Anna Schumaker b62c7f1554 Emmental 2.8
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-19 10:29:59 -05:00
Anna Schumaker bc4c3588e6 ui: Convert Window code into a class
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 16:49:58 -05:00
Anna Schumaker b05ef737f2 ui: Convert Pane code into a class
This lets us create a new instance for each test we do, so we don't need
to keep resetting a single static instance.

Implements: #21 (Convert ui.pane.Pane into a class)
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 16:49:58 -05:00
Anna Schumaker 7979cb1a4a ui: Switch to the new audio.Header()
And delete the old ui/header.py code

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 16:49:58 -05:00
Anna Schumaker 880f0a686b audio: Replace load_track() with change_track()
To mark tracks played and then emit the track-changed signal to start
the next track.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 16:49:58 -05:00
Anna Schumaker 97a05efe7e audio: Give the Player a play_track() function
To load and play a different track

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 16:49:58 -05:00
Anna Schumaker 96956c730d audio: Give the AutoPauseScale a keep_playing property
And a function to find out if we are about to pause or not.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 16:49:58 -05:00
Anna Schumaker 049eeec38a audio: Implement a Header bar
This moves the code out of ui/ and turns it into a class for easier
testing.

Implements: Issue #22 (Move Gtk.HeaderBar code into audio/)
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker 03b3c4a806 audio: Fix GstOutputSelector pad negotiation
All sinks need to post the EOS message before the pipeline can pass it
on to our application. Using pad negotiation mode 2 means that the
message is only sent to the active path in the output selector, leaving
our application hanging waiting for the inactive path to post EOS as
well.

Fixes: #33 (Fix Autopause not resetting)
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker 20e4ab4ba5 db: Update icons for the Previous and QueuedTracks playlists
So they match the next and previous button icons

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker cc88dcab0a db: Give QueuedTracks a custom next_track() function
So we can remove tracks from the queue as they are played.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker 2e57e1fe0a db: Preserve the current track when removing tracks
Again, we have to be careful not to check positions against playlists
where current == -1 for performance reasons.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker 2f747ccaa6 db: Preserve the current track when adding tracks
We have to be careful not to check track positions against playlists
where current == -1, because this could drastically slow down adding new
tracks because SQLite would need to find the position for every track

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker e94a737718 db: Provide a passthrough for playlist_state.rowid
So the audio layer can easily access it when saving the current
playlist.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker ee6bf059c1 db: Replace years.year with albums.release in the default sort order
And remove the INNER JOIN with the years table since it is no longer
needed.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker 0b818bc067 db: Attach release information to albums
This lets us sort albums by original release date, so if an artist
releases multiple albums in a year we can sort by month too.
Additionally, this helps us better handle albums with the same name that
were released in different years.

Implements: #40 (Store the full date in the year table)
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker 050a930376 db: Give the Previous playlist special next and previous functions
previous_track() moves deeper into the previous tracks list while
next_track() moves us closer to the start. I also make sure we reset
current track when new tracks are added to the playlist.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker 7a46ffdf47 db: Give playlists a next_track() function
For picking the next track (with or without random enabled)

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker 8a4590f0ed db: Preserve the current track when sorting
Implements: #39 (Preserve current track when sorting)
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker 23699a601d db: Have playlists clamp the current track value
And add a get_current_track() function to make it easier to get the
currently selected track. Clamping behaves differently if random or loop
are enabled to ensure a track is still picked.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker c658e873a6 db: Create a function to find playlists based on state id
So we can write the current playlist stateid to the settings file and
look it up later.

Implements: #36 (Find playlists based on playlist state id)
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker 6b5b2a745e db: Create a function for checking if this is a new database
So the tagdb can attempt to import tracks if none have been added to the
sql database yet.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker f82e299736 db: Add tracks.trackid ASC as a fallback sort option
This keeps us from ever completely clearing the sort field in the
playlist state, since that would lead to an incomplete SQL query error.

Fixes: #38 (PlaylistStates should not allow completely clearing sort)
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker d8dbba0960 db: Commit after deleting a User playlist
Fixes: Issue #35 (Commit when creating or deleting new User playlists)
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker adfbf8fdbc db: Give Discs a "number" property
So we can access the disc number when displaying tracks in the tracklist

Implements: Issue #34 (Give Discs a "number" property)
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker ea31e1539a scanner: Adjust timing for the DirectoryChooserWidget test
Adding a brief sleep when checking main_context iterations gives the
widget a chance to update the path so the test can pass more reliably.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker 472280ca9b sidebar: Don't pop up the dir chooser popover during testing
This can cause a segfault for some reason, but the test works perfectly
fine without it.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker 3d77e8cd2a scanner: Give ImportTasks a "playlists" argument
So users don't need to re-create their playlists when switching over to
the sqlite database.

Implements: #10 (Import user playlists)
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker 2ab67258e9 scanner: Create an EnableSwitch
For changing a library path's "enabled" property

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker 8f98dfdde7 scanner: Create an EnableLibraryTask
For enabling or disabling library paths through an idle task

Implements: Issue #37 (Create an Idle Task to enable / disable library paths)
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00
Anna Schumaker b8da049be9 scanner: Create a commit() shortcut function
For scheduling a commit task

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-11-18 10:20:24 -05:00