rind: Add an iter_playlist() function to the MangaerModel

Converting between a TreeIter and a playlist is very useful, so
implement that functionality now.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2019-03-16 08:30:49 -04:00
parent 4c256f7656
commit 6539299212
2 changed files with 21 additions and 16 deletions

View File

@ -23,17 +23,12 @@ class ManagerModel(GObject.GObject, Gtk.TreeModel):
return Gtk.TreePath((iter.user_data))
def do_get_value(self, iter, column):
top = toplevel[iter.user_data]
if top != None:
plist = curds.PlaylistManager[top]
if column == 0:
return plist.icon
if column == 1:
if not isinstance(plist, curds.Playlist):
return f"<big>{plist.name}</big>"
l = len(plist)
return f"{plist.name}\n{len(plist)} Track{'s' if l != 1 else ''}"
return ""
plist = self.iter_playlist(iter)
if plist == None:
return ""
if column == 0:
return plist.icon
return str(plist)
def do_iter_has_child(self, iter):
return False
@ -56,6 +51,12 @@ class ManagerModel(GObject.GObject, Gtk.TreeModel):
return (False, None)
return (True, iter)
def iter_playlist(self, iter):
top = toplevel[iter.user_data]
if top != None:
return curds.PlaylistManager[top]
return None
def on_add_track(self, plist, track):
if plist.name in toplevel:
iter = self.iter_nth_child(None, toplevel.index(plist.name))

View File

@ -6,9 +6,11 @@ import os
import unittest
from gi.repository import Gtk, GObject
test_album = os.path.abspath("./trier/Test Library/Test Artist 02/Test Album 1")
toplevel_names = [ "Collection\n0 Tracks", "", "<big>Library</big>" ]
toplevel_icons = [ "emblem-music", "", "folder" ]
plist_mgr = curds.PlaylistManager
test_album = os.path.abspath("./trier/Test Library/Test Artist 02/Test Album 1")
toplevel_names = [ "Collection\n0 Tracks", "", "<big>Library</big>" ]
toplevel_icons = [ "emblem-music", "", "folder" ]
toplevel_plist = [ plist_mgr["Collection"], None, plist_mgr["Library"] ]
class TestManager(unittest.TestCase):
def setUp(self):
@ -40,6 +42,7 @@ class TestManager(unittest.TestCase):
self.assertEqual(iter.user_data, 0)
self.assertFalse(model.iter_has_child(iter))
self.assertEqual(model.iter_n_children(iter), 0)
self.assertEqual(model.iter_playlist(iter), plist_mgr["Collection"])
self.assertEqual(model.get_value(iter, 0), toplevel_icons[0])
self.assertEqual(model.get_value(iter, 1), toplevel_names[0])
track = curds.Track.lookup(os.path.join(test_album, "01 - Test Track 01.ogg"))
@ -53,8 +56,9 @@ class TestManager(unittest.TestCase):
self.assertEqual(iter.user_data, i)
self.assertEqual(path.get_indices()[0], i)
self.assertEqual(model.iter_n_children(iter), 0)
self.assertEqual(model.get_value(iter, 0), toplevel_icons[i])
self.assertEqual(model.get_value(iter, 1), toplevel_names[i])
self.assertEqual(model.iter_playlist(iter), toplevel_plist[i])
self.assertEqual(model.get_value(iter, 0), toplevel_icons[i])
self.assertEqual(model.get_value(iter, 1), toplevel_names[i])
iter = model.iter_nth_child(None, 2)
self.assertEqual(iter.user_data, 2)