From c658e873a607ae50930aa6badf971806a1eb95d1 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Wed, 10 Nov 2021 14:51:33 -0500 Subject: [PATCH] db: Create a function to find playlists based on state id So we can write the current playlist stateid to the settings file and look it up later. Implements: #36 (Find playlists based on playlist state id) Signed-off-by: Anna Schumaker --- db/__init__.py | 25 +++++++++++++++++++++++++ db/test_db.py | 11 +++++++++++ 2 files changed, 36 insertions(+) diff --git a/db/__init__.py b/db/__init__.py index 5a9d548..3274157 100644 --- a/db/__init__.py +++ b/db/__init__.py @@ -21,6 +21,31 @@ from . import track from . import state from . import user +from . import sql +def _search_table(table, key, search): + if row := sql.execute(f"SELECT {key} FROM {table} " + f"WHERE plstateid=?", [ search ]).fetchone(): + return row[0] + +def find_playlist(plstateid): + if playlistid := _search_table("playlists", "playlistid", plstateid): + return user.Table.get(playlistid) + if artistid := _search_table("artists", "artistid", plstateid): + return artist.Table.get(artistid) + if albumid := _search_table("albums", "albumid", plstateid): + return album.Table.get(albumid) + if discid := _search_table("discs", "discid", plstateid): + return disc.Table.get(discid) + if genreid := _search_table("genres", "genreid", plstateid): + return genre.Table.get(genreid) + if decadeid := _search_table("decades", "decadeid", plstateid): + return decade.Table.get(decadeid) + if yearid := _search_table("years", "yearid", plstateid): + return year.Table.get(yearid) + if libraryid := _search_table("libraries", "libraryid", plstateid): + return library.Table.get(libraryid) + return None + def make_fake_track(trackno, length, title, path, lib="/a/b/c", art="Test Artist", alb="Test Album", disk=1, subtitle=None, yeer=2021): lib = library.Table.find(pathlib.Path(lib)) diff --git a/db/test_db.py b/db/test_db.py index 3366772..c0c253c 100644 --- a/db/test_db.py +++ b/db/test_db.py @@ -4,6 +4,17 @@ import unittest class TestDB(unittest.TestCase): def test_new_db(self): + db.reset() self.assertTrue(db.new_db()) db.make_fake_track(1, 1, "Test Track", "/a/b/c/1.ogg") self.assertFalse(db.new_db()) + + def test_find_playlist(self): + track = db.make_fake_track(1, 1, "Test Track", "/a/b/c/1.ogg") + collection = db.user.Table.find("Collection") + genre = db.genre.Table.find("Test Genre") + + self.assertIsNone(db.find_playlist(123456)) + for plist in [ collection, track.artist, track.album, track.disc, + genre, track.decade, track.year, track.library ]: + self.assertEqual(db.find_playlist(plist.plist_state.rowid), plist)