db: Give playlists a delete() function

So we can remove playlists from the database when needed.

Implemets: Issue #29 (Give playlists a delete() function)
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-10-16 17:37:23 -04:00
parent 2aad28f708
commit 6f9fb34792
18 changed files with 63 additions and 1 deletions

View File

@ -22,6 +22,8 @@ class Album(playlist.ParentPlaylist):
@GObject.Property
def name(self): return self._name
def delete(self): Table.delete(self)
def find_disc(self, number, subtitle):
return self.find_child(number, subtitle)

View File

@ -22,6 +22,8 @@ class Artist(playlist.ParentPlaylist):
@GObject.Property
def name(self): return self._name
def delete(self): Table.delete(self)
def find_album(self, name): return self.find_child(name)
def get_child_table(self): return album.Table

View File

@ -20,8 +20,8 @@ class Decade(playlist.ParentPlaylist):
@GObject.Property
def name(self): return f"{self._decade}s"
def delete(self): Table.delete(self)
def find_year(self, yr): return self.find_child(yr)
def get_child_table(self): return year.Table
def lookup_child(self, yr): return year.Table.lookup(yr)

View File

@ -14,6 +14,8 @@ class Disc(playlist.Playlist):
self._number = row["number"]
self._subtitle = row["subtitle"]
def delete(self): Table.delete(self)
@GObject.Property
def name(self):
if self._subtitle:

View File

@ -25,6 +25,8 @@ class Genre(playlist.Playlist):
playlist.Playlist.__init__(self, row, "emblem-generic")
self._name = row["name"]
def delete(self): Table.delete(self)
@GObject.Property
def name(self): return self._name

View File

@ -32,6 +32,8 @@ class Library(playlist.Playlist):
sql.commit()
self._enabled = newval
def delete(self): Table.delete(self)
def tracks(self):
cursor = sql.execute(f"SELECT trackid FROM tracks "
"WHERE libraryid=?", [ self.rowid ])

View File

@ -11,6 +11,8 @@ class Playlist(GObject.GObject):
self._plstate = state.Table.get(row["plstateid"])
self._icon_name = icon_name
def delete(self): raise NotImplementedError
def has_children(self): return False
@GObject.Property

View File

@ -16,6 +16,12 @@ class TestAlbum(unittest.TestCase):
self.assertEqual(album.get_property("icon-name"), "media-optical-cd-audio")
self.assertEqual(album.get_child_table(), db.disc.Table)
def test_delete(self):
artist = db.artist.Table.find("Test Artist", "Test Sort")
album = artist.find_album("Test Album")
album.delete()
self.assertIsNone(db.album.Table.lookup(artist, "Test Album"))
def test_find_disc(self):
artist = db.artist.Table.find("Test Artist", "Test Sort")
album = artist.find_album("Test Album")

View File

@ -15,6 +15,11 @@ class TestArtist(unittest.TestCase):
self.assertEqual(artist.get_property("icon-name"), "avatar-default-symbolic")
self.assertEqual(artist.get_child_table(), db.album.Table)
def test_delete(self):
artist = db.artist.Table.find("Test Artist", "Test Sort")
artist.delete()
self.assertIsNone(db.artist.Table.lookup("Test Artist"))
def test_find_album(self):
artist = db.artist.Table.find("Test Artist", "Test Sort")
album = artist.find_album("Test Album")

View File

@ -23,6 +23,11 @@ class TestDecade(unittest.TestCase):
self.assertEqual(decade._decade, 2020)
self.assertEqual(decade.get_property("decade"), 2020)
def test_delete(self):
decade = db.decade.Table.find(2020)
decade.delete()
self.assertIsNone(db.decade.Table.lookup(2020))
def test_find_year(self):
decade = db.decade.Table.insert(2020)
decade.connect("children-changed", self.children_changed)

View File

@ -18,6 +18,13 @@ class TestDisc(unittest.TestCase):
self.assertEqual(disc.get_property("icon-name"), "media-optical")
self.assertEqual(disc._number, 1)
def test_delete(self):
artist = db.artist.Table.find("Test Artist", "Test Artist")
album = artist.find_album("Test Album")
disc = album.find_disc(1, "")
disc.delete()
self.assertIsNone(db.disc.Table.lookup(album, 1))
def test_subtitle(self):
disc = self.make_disc("Test Artist", "Test Album", 1, "Test Subtitle")
self.assertEqual(disc._subtitle, "Test Subtitle")

View File

@ -16,6 +16,11 @@ class TestGenre(unittest.TestCase):
self.assertEqual(genre.get_property("name"), "Test Genre")
self.assertEqual(genre.get_property("icon-name"), "emblem-generic")
def test_delete(self):
genre = db.genre.Table.find("Test Genre")
genre.delete()
self.assertIsNone(db.genre.Table.lookup("Test Genre"))
class TestGenreTable(unittest.TestCase):
def setUp(self):

View File

@ -16,6 +16,11 @@ class TestLibrary(unittest.TestCase):
self.assertEqual(library.get_property("name"), "/a/b/c")
self.assertEqual(library.get_property("icon-name"), "folder-music")
def test_delete(self):
library = db.library.Table.find(pathlib.Path("/a/b/c"))
library.delete()
self.assertIsNone(db.library.Table.lookup(pathlib.Path("/a/b/c")))
def test_path(self):
library = db.library.Table.insert(pathlib.Path("/a/b/c"))
self.assertIsInstance(library._path, pathlib.Path)

View File

@ -22,6 +22,8 @@ class TestPlaylist(unittest.TestCase):
with self.assertRaises(NotImplementedError):
plist.get_property("name")
with self.assertRaises(NotImplementedError):
plist.delete()
class TestParentPlaylist(unittest.TestCase):

View File

@ -47,6 +47,11 @@ class TestUserPlaylist(unittest.TestCase):
self.assertEqual(plist.get_property("name"), "Test Playlist")
self.assertEqual(plist.icon_name, "audio-x-generic")
def test_delete(self):
plist = db.user.Table.find("Test Playlist")
plist.delete()
self.assertIsNone(db.user.Table.lookup("Test Playlist"))
class TestUserTable(unittest.TestCase):
def setUp(self):

View File

@ -16,6 +16,12 @@ class TestYear(unittest.TestCase):
self.assertEqual(year.get_property("year"), 2021)
self.assertEqual(year.get_property("icon-name"), "x-office-calendar")
def test_delete(self):
decade = db.decade.Table.find(2020)
year = decade.find_year(2021)
year.delete()
self.assertIsNone(db.year.Table.lookup(2021))
class TestYearTable(unittest.TestCase):
def setUp(self):

View File

@ -20,6 +20,8 @@ class UserPlaylist(playlist.Playlist):
playlist.Playlist.__init__(self, row, icon_name)
self._name = row["name"]
def delete(self): Table.delete(self)
@GObject.Property
def name(self): return self._name

View File

@ -13,6 +13,8 @@ class Year(playlist.Playlist):
playlist.Playlist.__init__(self, row, "x-office-calendar")
self._year = row["year"]
def delete(self): Table.delete(self)
@GObject.Property
def name(self): return str(self._year)