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 <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-10-19 16:48:03 -04:00
parent 0c3afb9d56
commit 01de88f474
3 changed files with 23 additions and 3 deletions

View File

@ -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)

View File

@ -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

View File

@ -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):