From 01de88f474fa4b231d4f7fb23c8f898c06949fe2 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Tue, 19 Oct 2021 16:48:03 -0400 Subject: [PATCH] db: Give playlists a refresh() function The Collection playlist uses this to emit the "refreshed" signal to notify higher layers that the contents of the playlist has changed. Eventually, this will also be used to update playlists when sorting. Implements: Issue #15 (Convert Playlists into Gio.ListModels) Signed-off-by: Anna Schumaker --- db/library.py | 2 ++ db/playlist.py | 6 ++++++ db/test_user.py | 18 +++++++++++++++--- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/db/library.py b/db/library.py index 9b0d15d..c9a5126 100644 --- a/db/library.py +++ b/db/library.py @@ -9,6 +9,7 @@ from gi.repository import GObject from . import sql from . import playlist from . import track +from . import user class Library(playlist.Playlist): def __init__(self, row): @@ -31,6 +32,7 @@ class Library(playlist.Playlist): [ newval, self.rowid ]) sql.commit() self._enabled = newval + user.Table.find("Collection").refresh() def delete(self): Table.delete(self) diff --git a/db/playlist.py b/db/playlist.py index 560d460..c2d330f 100644 --- a/db/playlist.py +++ b/db/playlist.py @@ -51,6 +51,9 @@ class Playlist(GObject.GObject): def remove_track(self, track): self.emit("track-removed", track) + def refresh(self): + self.emit("refreshed") + @GObject.Property def name(self): raise NotImplementedError @@ -66,6 +69,9 @@ class Playlist(GObject.GObject): @GObject.Property def rowkey(self): return self._rowkey + @GObject.Signal + def refreshed(self): pass + @GObject.Signal(arg_types=(GObject.TYPE_PYOBJECT,)) def track_added(self, track): pass diff --git a/db/test_user.py b/db/test_user.py index d28da5e..196c8d3 100644 --- a/db/test_user.py +++ b/db/test_user.py @@ -12,6 +12,9 @@ class TestCollection(unittest.TestCase): def track_removed(self, plist, removed): self.removed = removed + def refreshed(self, plist): + self.refreshed = True + def setUp(self): db.reset() def test_init(self): @@ -39,10 +42,19 @@ class TestCollection(unittest.TestCase): def test_library_enabled(self): collection = db.user.Table.find("Collection") - track = db.make_fake_track(1, 1, "Test Track", "/a/b/c/1.ogg") - self.assertEqual(collection.get_n_tracks(), 1) - track.library.enabled = False + track1 = db.make_fake_track(1, 1, "Test Track 1", "/a/b/c/1.ogg") + track2 = db.make_fake_track(2, 2, "Test Track 2", "/a/b/c/2.ogg") + self.assertEqual(collection.get_n_tracks(), 2) + collection.connect("refreshed", self.refreshed) + + track1.library.enabled = False self.assertEqual(collection.get_n_tracks(), 0) + self.assertTrue(self.refreshed) + + self.refreshed = None + track1.library.enabled = True + self.assertEqual(collection.get_n_tracks(), 2) + self.assertTrue(self.refreshed) class TestFavorites(unittest.TestCase):