curds: Add helpful playlist shortcuts

- curds.playlist.current() for the currently selected playlist
- curds.playlist.lookup() for lookups

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2019-05-17 09:49:52 -04:00
parent 729dad28e3
commit ac7001c3bf
13 changed files with 63 additions and 33 deletions

View File

@ -8,8 +8,14 @@ Node = node.PlaylistNode
Root = root.Root
Starred = Root.lookup("Playlists").lookup("Starred")
def current():
return Root.current[0]
def lookup(name):
return Root.lookup(name)
def reset():
global Starred
Root.reset()
library.reset()
Starred = Root.lookup("Playlists").lookup("Starred")
Starred = lookup("Playlists").lookup("Starred")

20
curds/test_playlist.py Normal file
View File

@ -0,0 +1,20 @@
# Copyright 2019 (c) Anna Schumaker.
from . import playlist
import unittest
class TestPlaylist(unittest.TestCase):
def test_current_shortcut(self):
self.assertEqual(playlist.current(), playlist.lookup("Collection"))
playlist.Root.select(playlist.Starred)
self.assertEqual(playlist.current(), playlist.Starred)
def test_lookup_shortcut(self):
self.assertEqual(playlist.lookup("Collection"), playlist.Root.lookup("Collection"))
self.assertEqual(playlist.lookup("Playlists"), playlist.Root.lookup("Playlists"))
def test_starred_shortcut(self):
self.assertEqual(playlist.Starred, playlist.Root.lookup("Playlists").lookup("Starred"))
playlist.Starred = None
playlist.reset()
self.assertEqual(playlist.Starred, playlist.Root.lookup("Playlists").lookup("Starred"))

View File

@ -151,7 +151,7 @@ class TestAutoPause(unittest.TestCase):
self.assertEqual(autopause.__icon__(), "media-playback-pause")
def test_pause_estimate(self):
curds.playlist.Root.lookup("Libraries").lookup(test_album)
curds.playlist.lookup("Libraries").lookup(test_album)
curds.playlist.library.join()
playbin.set_uri(test_track, Gst.State.PAUSED)

View File

@ -73,7 +73,7 @@ class TestAudioWidgets(unittest.TestCase):
self.assertEqual(playbin.get_state(), Gst.State.NULL)
self.assertEqual(curds.playlist.Root.track, None)
curds.playlist.Root.lookup("Libraries").lookup(test_album)
curds.playlist.lookup("Libraries").lookup(test_album)
curds.playlist.library.join()
widgets.Next.clicked()
@ -184,7 +184,7 @@ class TestAudioWidgets(unittest.TestCase):
self.assertIsNone(widgets.NEXT_TRACK)
def test_eos(self):
curds.playlist.Root.lookup("Libraries").lookup(test_album)
curds.playlist.lookup("Libraries").lookup(test_album)
curds.playlist.library.join()
track = curds.playlist.Root.next()
@ -200,7 +200,7 @@ class TestAudioWidgets(unittest.TestCase):
self.assertNotEqual(curds.playlist.Root.track, track)
def test_about_to_finish(self):
curds.playlist.Root.lookup("Libraries").lookup(test_album)
curds.playlist.lookup("Libraries").lookup(test_album)
curds.playlist.library.join()
track = curds.playlist.Root.next()

View File

@ -26,7 +26,7 @@ Cancel.connect("clicked", cancel_clicked)
def ok_clicked(button):
Popover.popdown()
path = Chooser.get_filename()
curds.playlist.Root.lookup("Libraries").lookup(path)
curds.playlist.lookup("Libraries").lookup(path)
Ok = gtk.Builder.get_object("library_ok")
Ok.connect("clicked", ok_clicked)

View File

@ -41,7 +41,7 @@ class NodeTreeModel(GObject.GObject, Gtk.TreeModel):
def do_get_playlist_value(self, plist, column):
if column == 1:
text = GLib.markup_escape_text(str(plist))
if plist == curds.playlist.Root.current[0]:
if plist == curds.playlist.current():
return f"<b>{text}</b>"
return text
elif column == 2:

View File

@ -17,9 +17,9 @@ class TestNodeTreeModel(unittest.TestCase):
curds.reset()
self.model = model.NodeTreeModel()
self.artist = curds.playlist.Root.lookup("Artists")
self.decade = curds.playlist.Root.lookup("Decades")
self.genre = curds.playlist.Root.lookup("Genres")
self.artist = curds.playlist.lookup("Artists")
self.decade = curds.playlist.lookup("Decades")
self.genre = curds.playlist.lookup("Genres")
curds.Track.lookup(os.path.join(test_album1, "01 - Test Track 01.ogg"))
curds.Track.lookup(os.path.join(test_album2, "01 - Test Track 01.ogg"))

View File

@ -55,8 +55,8 @@ class TestNodeTreeView(unittest.TestCase):
def test_node_inserted(self):
path = os.path.abspath("./trier/Test Library/Test Artist 01")
library = curds.playlist.Root.lookup("Libraries")
user = curds.playlist.Root.lookup("Playlists")
library = curds.playlist.lookup("Libraries")
user = curds.playlist.lookup("Playlists")
row = Gtk.TreePath(library.get_path())
crow = Gtk.TreePath(user.get_path())
@ -92,8 +92,8 @@ class TestNodeTreeView(unittest.TestCase):
self.assertFalse(view.Selection.path_is_selected(path))
def test_select_path(self):
collection = curds.playlist.Root.lookup("Collection")
previous = curds.playlist.Root.lookup("Previous")
collection = curds.playlist.lookup("Collection")
previous = curds.playlist.lookup("Previous")
self.assertNotEqual(playlist.model.PlistModel.playlist, previous)
@ -109,22 +109,21 @@ class TestNodeTreeView(unittest.TestCase):
self.assertEqual(playlist.model.PlistModel.playlist, collection)
def test_row_activate(self):
collection = curds.playlist.Root.lookup("Collection")
playlists = curds.playlist.Root.lookup("Playlists")
starred = playlists.lookup("Starred")
collection = curds.playlist.lookup("Collection")
playlists = curds.playlist.lookup("Playlists")
column = view.TreeView.get_column(1)
self.assertEqual(curds.playlist.Root.current[0], collection)
self.assertEqual(curds.playlist.current(), collection)
path = Gtk.TreePath(starred.get_path())
path = Gtk.TreePath(curds.playlist.Starred.get_path())
path = view.Filter.convert_child_path_to_path(path)
view.TreeView.row_activated(path, column)
self.assertEqual(curds.playlist.Root.current[0], starred)
self.assertEqual(curds.playlist.current(), curds.playlist.Starred)
path = Gtk.TreePath(playlists.get_path())
path = view.Filter.convert_child_path_to_path(path)
view.TreeView.row_activated(path, column)
self.assertEqual(curds.playlist.Root.current[0], starred)
self.assertEqual(curds.playlist.current(), curds.playlist.Starred)
def test_filter_error(self):
view.Entry.set_text("*v")

View File

@ -73,6 +73,12 @@ class PlaylistModel(GObject.GObject, Gtk.TreeModel):
return self.playlist[iter.user_data]
return None
def scroll_to_current(self):
if self.playlist.current >= 0 and Treeview.get_model() == self:
path = Gtk.TreePath([ self.playlist.current ])
Treeview.get_selection().select_path(path)
Treeview.scroll_to_cell(path, None, True, 0.25, 0)
def set_playlist(self, plist):
Treeview.set_model(None)
self.playlist = plist
@ -93,5 +99,5 @@ class PlaylistModel(GObject.GObject, Gtk.TreeModel):
return None
PlistModel = PlaylistModel(curds.playlist.Root.lookup("Collection"))
PlistModel = PlaylistModel(curds.playlist.lookup("Collection"))
Treeview.set_model(PlistModel)

View File

@ -13,7 +13,7 @@ class TestPlaylistModel(unittest.TestCase):
def setUp(self):
curds.reset()
node.reset()
model.PlistModel.set_playlist(curds.playlist.Root.lookup("Collection"))
model.PlistModel.set_playlist(curds.playlist.lookup("Collection"))
self.playlist = curds.Playlist("Test Playlist")
self.track1 = curds.tags.Track.lookup(os.path.join(test_album, "01 - Test Track 01.ogg"))
@ -67,9 +67,8 @@ class TestPlaylistModel(unittest.TestCase):
self.assertEqual(self.model.get_value(iter, 7), "1973")
self.assertEqual(self.model.get_value(iter, 8).title(), "Test Genre 1")
iter = self.model.track_iter(self.track2)
starred = curds.playlist.Root.lookup("Playlists").lookup("Starred")
starred.add(self.track2)
iter = self.model.track_iter(self.track2)
curds.playlist.Starred.add(self.track2)
self.assertEqual(self.model.get_value(iter, 0), "starred")
self.assertEqual(self.model.get_value(iter, 1), "02")
@ -123,7 +122,7 @@ class TestPlaylistModel(unittest.TestCase):
def test_model(self):
plist = curds.Playlist("Test Playlist")
plist_model = model.PlaylistModel(curds.playlist.Root.lookup("Collection"))
plist_model = model.PlaylistModel(curds.playlist.lookup("Collection"))
path = Gtk.TreePath(1)
tracks = [ ]

View File

@ -47,7 +47,7 @@ curds.notify.register("playlist-changed", on_playlist_changed, queue=True)
def on_stream_start():
plist = model.PlistModel.playlist
if plist == curds.playlist.Root.current[0]:
if plist == curds.playlist.current():
if plist.current < 0:
Selection.unselect_all()
else:

View File

@ -33,7 +33,7 @@ class TestLibrary(unittest.TestCase):
library.Cancel.clicked()
gtk.main_loop(iteration_delay=0.01)
self.assertFalse(library.Popover.is_visible())
self.assertEqual(curds.playlist.Root.lookup("Libraries").n_children(), 0)
self.assertEqual(curds.playlist.lookup("Libraries").n_children(), 0)
def test_add_ok(self):
music_dir = os.path.join(os.path.expanduser("~"), "Music")
@ -50,7 +50,7 @@ class TestLibrary(unittest.TestCase):
library.Ok.clicked()
gtk.main_loop(iteration_delay=0.01)
self.assertEqual(curds.playlist.Root.lookup("Libraries").n_children(), 1)
self.assertEqual(curds.playlist.lookup("Libraries").n_children(), 1)
self.assertFalse(library.Popover.is_visible())
curds.playlist.library.join()

View File

@ -14,7 +14,7 @@ class TestEmmental(unittest.TestCase):
self.assertEqual(curds.Playlist, curds.playlist.playlist.Playlist)
self.assertEqual(curds.playlist.Library, curds.playlist.library.LibraryPlaylist)
self.assertEqual(curds.playlist.Node, curds.playlist.node.PlaylistNode)
self.assertEqual(curds.playlist.Starred, curds.playlist.Root.lookup("Playlists").lookup("Starred"))
self.assertEqual(curds.playlist.Starred, curds.playlist.lookup("Playlists").lookup("Starred"))
self.assertIsNotNone(curds.notify)
self.assertIsInstance(curds.playlist.Root, curds.playlist.root.PlaylistRoot)
@ -41,8 +41,8 @@ class TestEmmental(unittest.TestCase):
curds.reset()
self.assertEqual(curds.tags.tag_map, {})
self.assertTrue(curds.playlist.library.library_thread.is_alive())
self.assertEqual(len(curds.playlist.Root.lookup("Collection")), 0)
self.assertEqual(curds.playlist.Root.lookup("Libraries").n_children(), 0)
self.assertEqual(len(curds.playlist.lookup("Collection")), 0)
self.assertEqual(curds.playlist.lookup("Libraries").n_children(), 0)
curds.stop()
self.assertFalse(curds.playlist.library.library_thread.is_alive())