playlist: Have the Factory create a previous Playlist
And add some special handling so a previous.Previous() playlist type is created for the db_previous playlist. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
820eda4c46
commit
fd584e516a
|
@ -2,6 +2,7 @@
|
|||
"""An object for managing the visible and active playlists."""
|
||||
from gi.repository import GObject
|
||||
from . import playlist
|
||||
from . import previous
|
||||
from .. import db
|
||||
|
||||
|
||||
|
@ -15,6 +16,7 @@ class Factory(GObject.GObject):
|
|||
db_visible = GObject.Property(type=db.playlist.Playlist)
|
||||
|
||||
active_playlist = GObject.Property(type=playlist.Playlist)
|
||||
previous_playlist = GObject.Property(type=previous.Previous)
|
||||
visible_playlist = GObject.Property(type=playlist.Playlist)
|
||||
|
||||
def __init__(self, sql: db.Connection):
|
||||
|
@ -24,7 +26,8 @@ class Factory(GObject.GObject):
|
|||
self.connect("notify", self.__notify_db_playlists)
|
||||
|
||||
def __get_playlists(self) -> list[playlist.Playlist]:
|
||||
plists = [self.active_playlist, self.visible_playlist]
|
||||
plists = [self.active_playlist, self.previous_playlist,
|
||||
self.visible_playlist]
|
||||
return [p for p in plists if p is not None]
|
||||
|
||||
def __search_playlists(self, db_plist: db.playlist.Playlist) \
|
||||
|
@ -33,6 +36,12 @@ class Factory(GObject.GObject):
|
|||
if plist.playlist == db_plist:
|
||||
return plist
|
||||
|
||||
def __make_playlist(self,
|
||||
db_plist: db.playlist.Playlist) -> playlist.Playlist:
|
||||
if db_plist == self.sql.playlists.previous:
|
||||
return previous.Previous(self.sql, db_plist)
|
||||
return playlist.Playlist(self.sql, db_plist)
|
||||
|
||||
def __run_factory(self, label: str) -> None:
|
||||
db_plist = self.get_property(f"db-{label}")
|
||||
plist = self.get_property(f"{label}-playlist")
|
||||
|
@ -46,7 +55,7 @@ class Factory(GObject.GObject):
|
|||
new = None
|
||||
elif plist is None or self.__get_playlists().count(plist) > 1:
|
||||
if (new := self.__search_playlists(db_plist)) is None:
|
||||
new = playlist.Playlist(self.sql, db_plist)
|
||||
new = self.__make_playlist(db_plist)
|
||||
elif (new := self.__search_playlists(db_plist)) is None:
|
||||
plist.playlist = db_plist
|
||||
return
|
||||
|
@ -62,9 +71,7 @@ class Factory(GObject.GObject):
|
|||
self.notify("active-loop")
|
||||
self.notify("active-shuffle")
|
||||
case "db-previous":
|
||||
plist = self.get_property(param.name)
|
||||
name = "<None>" if plist is None else plist.name
|
||||
print(f"factory: {param.name[3:]} playlist is:", name)
|
||||
self.__run_factory("previous")
|
||||
case "db-visible":
|
||||
self.__run_factory("visible")
|
||||
|
||||
|
|
|
@ -145,6 +145,22 @@ class TestFactory(tests.util.TestCase):
|
|||
self.assertRegex(mock_stdout.getvalue(),
|
||||
"factory: previous playlist is: <None>")
|
||||
|
||||
def test_previous_playlist(self, mock_stdout: io.StringIO):
|
||||
"""Test creating a Playlist when setting the db_previous property."""
|
||||
self.assertIsNone(self.factory.previous_playlist)
|
||||
|
||||
self.factory.db_previous = self.sql.playlists.previous
|
||||
self.assertIsInstance(self.factory.previous_playlist,
|
||||
emmental.playlist.previous.Previous)
|
||||
self.assertEqual(self.factory.previous_playlist.sql, self.sql)
|
||||
self.assertEqual(self.factory.previous_playlist.playlist,
|
||||
self.sql.playlists.previous)
|
||||
|
||||
previous = self.factory.previous_playlist
|
||||
self.factory.db_previous = None
|
||||
self.assertIsNone(self.factory.previous_playlist)
|
||||
self.assertIsNone(previous.playlist)
|
||||
|
||||
def test_visible(self, mock_stdout: io.StringIO):
|
||||
"""Test the visible playlist property."""
|
||||
self.assertIsNone(self.factory.db_visible)
|
||||
|
@ -205,3 +221,14 @@ class TestFactory(tests.util.TestCase):
|
|||
self.factory.db_visible = None
|
||||
self.assertEqual(visible.playlist, self.user_plist)
|
||||
self.assertIsNone(self.factory.visible_playlist)
|
||||
|
||||
def test_visible_previous_playlist(self, mock_stdout: io.StringIO):
|
||||
"""Test setting the visible playlist to the previous playlist."""
|
||||
self.factory.db_previous = self.sql.playlists.previous
|
||||
self.factory.db_visible = self.sql.playlists.previous
|
||||
self.assertEqual(id(self.factory.visible_playlist),
|
||||
id(self.factory.previous_playlist))
|
||||
|
||||
self.factory.db_visible = self.user_plist
|
||||
self.assertNotEqual(id(self.factory.visible_playlist),
|
||||
id(self.factory.previous_playlist))
|
||||
|
|
Loading…
Reference in New Issue