playlist: Have the Factory create a visible Playlist
I either create or reuse an existing Playlist object when the db-visible property changes to a new value. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
f5ef144419
commit
b0734a41d0
|
@ -1,6 +1,7 @@
|
||||||
# Copyright 2023 (c) Anna Schumaker.
|
# Copyright 2023 (c) Anna Schumaker.
|
||||||
"""An object for managing the visible and active playlists."""
|
"""An object for managing the visible and active playlists."""
|
||||||
from gi.repository import GObject
|
from gi.repository import GObject
|
||||||
|
from . import playlist
|
||||||
from .. import db
|
from .. import db
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,15 +14,37 @@ class Factory(GObject.GObject):
|
||||||
db_previous = GObject.Property(type=db.playlist.Playlist)
|
db_previous = GObject.Property(type=db.playlist.Playlist)
|
||||||
db_visible = GObject.Property(type=db.playlist.Playlist)
|
db_visible = GObject.Property(type=db.playlist.Playlist)
|
||||||
|
|
||||||
|
visible_playlist = GObject.Property(type=playlist.Playlist)
|
||||||
|
|
||||||
def __init__(self, sql: db.Connection):
|
def __init__(self, sql: db.Connection):
|
||||||
"""Initialize the Playlist Factory."""
|
"""Initialize the Playlist Factory."""
|
||||||
super().__init__(sql=sql)
|
super().__init__(sql=sql)
|
||||||
self.sql.bind_property("active-playlist", self, "db-active")
|
self.sql.bind_property("active-playlist", self, "db-active")
|
||||||
self.connect("notify", self.__notify_db_playlists)
|
self.connect("notify", self.__notify_db_playlists)
|
||||||
|
|
||||||
|
def __run_factory(self, label: str) -> None:
|
||||||
|
db_plist = self.get_property(f"db-{label}")
|
||||||
|
plist = self.get_property(f"{label}-playlist")
|
||||||
|
|
||||||
|
print(f"factory: {label} playlist is:",
|
||||||
|
"<None>" if db_plist is None else db_plist.name)
|
||||||
|
|
||||||
|
if db_plist is None:
|
||||||
|
plist.playlist = None
|
||||||
|
new = None
|
||||||
|
elif plist is None:
|
||||||
|
new = playlist.Playlist(self.sql, db_plist)
|
||||||
|
else:
|
||||||
|
plist.playlist = db_plist
|
||||||
|
return
|
||||||
|
|
||||||
|
self.set_property(f"{label}-playlist", new)
|
||||||
|
|
||||||
def __notify_db_playlists(self, factory: GObject.GObject, param) -> None:
|
def __notify_db_playlists(self, factory: GObject.GObject, param) -> None:
|
||||||
match param.name:
|
match param.name:
|
||||||
case "db-active" | "db-previous" | "db-visible":
|
case "db-active" | "db-previous":
|
||||||
plist = self.get_property(param.name)
|
plist = self.get_property(param.name)
|
||||||
name = "<None>" if plist is None else plist.name
|
name = "<None>" if plist is None else plist.name
|
||||||
print(f"factory: {param.name[3:]} playlist is:", name)
|
print(f"factory: {param.name[3:]} playlist is:", name)
|
||||||
|
case "db-visible":
|
||||||
|
self.__run_factory("visible")
|
||||||
|
|
|
@ -61,3 +61,25 @@ class TestFactory(tests.util.TestCase):
|
||||||
self.factory.db_visible = None
|
self.factory.db_visible = None
|
||||||
self.assertRegex(mock_stdout.getvalue(),
|
self.assertRegex(mock_stdout.getvalue(),
|
||||||
"factory: visible playlist is: <None>")
|
"factory: visible playlist is: <None>")
|
||||||
|
|
||||||
|
def test_visible_playlist(self, mock_stdout: io.StringIO):
|
||||||
|
"""Test creating a Playlist when setting the db_visible property."""
|
||||||
|
self.assertIsNone(self.factory.visible_playlist)
|
||||||
|
|
||||||
|
self.factory.db_visible = self.user_plist
|
||||||
|
self.assertIsInstance(self.factory.visible_playlist,
|
||||||
|
emmental.playlist.playlist.Playlist)
|
||||||
|
self.assertEqual(self.factory.visible_playlist.sql, self.sql)
|
||||||
|
self.assertEqual(self.factory.visible_playlist.playlist,
|
||||||
|
self.user_plist)
|
||||||
|
|
||||||
|
orig_id = id(self.factory.visible_playlist)
|
||||||
|
self.factory.db_visible = self.sql.playlists.collection
|
||||||
|
self.assertEqual(id(self.factory.visible_playlist), orig_id)
|
||||||
|
self.assertEqual(self.factory.visible_playlist.playlist,
|
||||||
|
self.sql.playlists.collection)
|
||||||
|
|
||||||
|
visible = self.factory.visible_playlist
|
||||||
|
self.factory.db_visible = None
|
||||||
|
self.assertIsNone(self.factory.visible_playlist)
|
||||||
|
self.assertIsNone(visible.playlist)
|
||||||
|
|
Loading…
Reference in New Issue