Commit Graph

1334 Commits

Author SHA1 Message Date
Anna Schumaker 82cf07ff36 curds: Have the playlist track if loop and random values can change
This way, we control it all from one place instead of needing to derive
a new playlist to set these values. Additionally, the UI can use these
values to enable or disable the corresponding buttons

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-25 14:33:17 -04:00
Anna Schumaker b0cbcd7f9d rind: Select the currently playing track in the playlist
And also scroll so the selected path is visible.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-25 13:44:22 -04:00
Anna Schumaker 2d6d4444bf curds: Send next-track notification when changing tracks
This lets the UI know that something changed so scrolling can happen in
the UI.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-25 13:39:38 -04:00
Anna Schumaker 2815724b5c rind: Suppress filtering warnings during testing
These don't show up when running normally, but they can show up during
testing when gtk signals show up after their corresponding test ends.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-25 13:38:39 -04:00
Anna Schumaker b94cc5bd87 rind: Set the playbin video-sink to a fakesink element
I have a few tracks that have their album art embedded as a separate
stream. This results in emmental popping up a window with an image, and
sending an EOS when the image is closed. Suppress any video elements by
setting a fakesink instead of letting the playbin handle this
automatically.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-24 16:43:05 -04:00
Anna Schumaker 52df4373b5 rind: Hide separators when "show more" area is hidden
I think it just looks nicer this way

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-24 15:54:22 -04:00
Anna Schumaker dc5e843d94 rind: Check playlist children when determining visibility
Otherwise nested playlists might not show up, even if we search for them

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-24 10:18:34 -04:00
Anna Schumaker c7d45754a0 curds: Add Album playlists
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-24 09:30:12 -04:00
Anna Schumaker e3e51ee899 rind: Automatically size the node icon column
Images were getting cut off when descending into the node tree, so
automatically changing the sizes keeps the icon visible

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-24 09:09:22 -04:00
Anna Schumaker 9ef6c865c6 curds: Add playlists for individual years
They show up nested under the corresponding decade playlist

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-24 09:09:09 -04:00
Anna Schumaker fb5477da57 curds: Don't hide exceptions during the new-track signal
We need to be able to see what's going on in order to fix the code, so
let's not fail silently and pretend that nothing went wrong.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-24 08:42:52 -04:00
Anna Schumaker 3aa6b93e0e rind: Update NodeTreeModel to use the new walk() function
This cleans up the test a bit and makes it more straightforward.
Additionally, it checks some extra cases that we hadn't checked up until
then.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-23 16:22:51 -04:00
Anna Schumaker 718d44a8d8 curds: Add a way to walk the node tree
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-23 14:11:06 -04:00
Anna Schumaker 8f3178bfc7 rind: Switch node iterators from user_data3 to user_data
These other variables are unused now, so let's just use the first one
for simplicity.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-23 10:59:53 -04:00
Anna Schumaker dcc2f7e6d0 rind: Don't set node iterators based on path
Instead, use the node id and node cache to find playlists.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-23 10:46:17 -04:00
Anna Schumaker e4d96755e9 curds: Make sure PlaylistNode ids are still mapped after a reset
This is mostly in case the node map gets cleared at some point during
testing.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-23 10:44:22 -04:00
Anna Schumaker e116b7a784 rind: Use tree paths when working with the filter model
We already have the filtered path, so it doesn't take too much work to
convert it to the child path and look up the corresponding node.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-22 17:13:09 -04:00
Anna Schumaker 545854ca35 rind: Remove NodeTreeModel iter_valid() function
We can calculate this more efficiently without the extra function call.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-22 17:06:16 -04:00
Anna Schumaker f3987543ed rind: Set the next iterator using PlaylistNode.next_child
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-22 17:06:16 -04:00
Anna Schumaker 16bbdb7105 rind: Add the node id to the GtkTreeIter
We don't use user_data3 for anything yet, so let's use it to find
playlists easier.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-22 17:06:16 -04:00
Anna Schumaker 02f271bba0 rind: Refactor iter_playlist() and playlist_iter()
I want these two functions to be the foundation of the NodeTreeModel, so
they have to be defined without using the GtkTreeModel interface.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-22 17:06:16 -04:00
Anna Schumaker cf8b88b833 rind: Remove playlist_valid_iter()
I'm about to change how iterators work, so remove this function to
simplify the code.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-22 17:06:16 -04:00
Anna Schumaker b49e81f580 curds: Rename ManagerModel to NodeTreeModel
This reflects how we're using the custom model to display the playlist
node tree.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-22 17:06:16 -04:00
Anna Schumaker 8f6be9b6f5 curds: Rename PlaylistManager -> PlaylistRoot
This is the root node of the Playlist Tree, so give it a name reflecting
that.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-22 17:06:16 -04:00
Anna Schumaker b9ad790abf curds: Reorganize the imports
And instantiate the PlaylistManager instance a little earlier

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-22 17:06:16 -04:00
Anna Schumaker c834359cdb curds: Keep a map of PlaylistNode ids
Making it easy to look up a PlaylistNode by the python object id means
we can use the object id in the GtkTreeIter rather than storing the
entire path

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-22 17:06:15 -04:00
Anna Schumaker cfee39ce17 curds: Add a function for finding the root node of the PlaylistNode tree
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-22 08:56:02 -04:00
Anna Schumaker 33e2af2c2d curds: Make sure we're properly setting prev / next pointers
I noticed that the toplevel playlist siblings were always set to None,
so make sure we're properly setting these so they can be used.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-21 10:16:03 -04:00
Anna Schumaker de9c7b0745 curds: Add the DecadeNode to the PlaylistManager
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-20 13:04:33 -04:00
Anna Schumaker a8a9dada49 curds: Add a DecadeNode and DecadePlaylist
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-20 12:49:59 -04:00
Anna Schumaker 0eca51eae1 curds: Change genre and artist node icons
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-19 17:00:39 -04:00
Anna Schumaker 68953c273d curds: Add the ArtistNode to the PlaylistManager
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-19 14:46:13 -04:00
Anna Schumaker 42a26832eb curds: Implement an artist playlist node
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-19 14:45:39 -04:00
Anna Schumaker 0cd702c908 rind: Remove do_iter_previous() from ManagerModel
I haven't seen this get run in the wild, so let's remove it

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-19 12:17:06 -04:00
Anna Schumaker b2dc1b8c5e curds: Remove GenrePlaylist
It is now unused

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-19 12:17:06 -04:00
Anna Schumaker bfe7e3550b rind: Set the row height of PlaylitNodes
If the node is a playlist, then we can use their natural height.
Otherwise, we set a height based on the first playlist in the model.
This way every row has the same height.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-19 11:08:24 -04:00
Anna Schumaker 14851e0c59 curds: Remove newline from PlaylistNode
I'm going to take a different approach with setting the row heights
directly, so start by removing the newline here.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-19 10:14:58 -04:00
Anna Schumaker a767cc08b8 curds: Rename PlaylistManager current_changed()
Simply drop the underscores to make the code a little easier to read.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-18 11:55:01 -04:00
Anna Schumaker dbc7683ccd curds: Move playlist peeking into the Playlist class
It makes more sense to do it here than in the PlaylistManager

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-18 11:48:23 -04:00
Anna Schumaker 277aabb7bd curds: Change the PlaylistManager into a PlaylistNode
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-18 11:00:12 -04:00
Anna Schumaker cd208134ec curds: Remove direct indexing from the PlaylistManager
The PlaylistNode class doesn't support this, so remove it now.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-18 10:45:07 -04:00
Anna Schumaker 8434446dcd curds: PlaylistManager shouldn't inherit from list
This is just the next step in changing this into a PlaylistNode

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-18 10:38:38 -04:00
Anna Schumaker 8ab2d97cf5 curds: Clean up how nodes are inserted and linked
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-17 16:57:22 -04:00
Anna Schumaker 91a606e054 curds: Add .parent variable to the PlaylistManager
And then clean up the ManagerModel with the node functions that we can
now use.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-17 16:14:33 -04:00
Anna Schumaker 8aff4d7f8a curds: Remove the PlaylistManager parent() function
I'm transitioning this class to be a PlaylistNode, and nodes can easily
access their parent through a .parent pointer

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-17 14:38:36 -04:00
Anna Schumaker af54734726 curds: Merge the PlaylistManager with the PlaylistManagerBase
Nothing else inherits from this class anymore, so let's merge it into
one to make it easier to deal with going forward.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-17 13:43:12 -04:00
Anna Schumaker 2c779b475d curds: Remove the PlaylistPlaceholder
It is no longer needed

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-17 11:08:15 -04:00
Anna Schumaker b37a36369f curds: Swap out the GenreManager for the GenreNode
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-17 11:05:38 -04:00
Anna Schumaker 8769423fe8 curds: Remove the placeholder before the Library node
We're putting a newline before the heading, so we don't need an empty
tree row for this.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-17 10:10:23 -04:00
Anna Schumaker eee4e134b0 curds: Swap out the LibraryManager for the LibraryNode
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-04-17 10:10:23 -04:00