db: Give Tracks a Decade property and genres() function

For accessing a Track's Decade playlist or list of genres

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-10-19 13:37:41 -04:00
parent f6c72ed081
commit 32dcd83865
2 changed files with 19 additions and 0 deletions

View File

@ -16,6 +16,7 @@ class TestTrack(unittest.TestCase):
self.assertIsInstance(track.artist, db.artist.Artist)
self.assertIsInstance(track.album, db.album.Album)
self.assertIsInstance(track.disc, db.disc.Disc)
self.assertIsInstance(track.decade, db.decade.Decade)
self.assertIsInstance(track.year, db.year.Year)
self.assertEqual(track.number, 1)
self.assertEqual(track.playcount, 0)
@ -23,6 +24,14 @@ class TestTrack(unittest.TestCase):
self.assertEqual(track.length, 1.234)
self.assertEqual(track.title, "Test Title")
def test_genres(self):
track = db.make_fake_track(1, 1.234, "Test Title", "/a/b/c/1.ogg")
self.assertEqual(track.genres(), [ ])
genre = db.genre.Table.find("Test Genre")
genre.add_track(track)
self.assertEqual(track.genres(), [ genre ])
def test_played(self):
track = db.make_fake_track(1, 1.234, "Test Title", "/a/b/c/1.ogg")
track.played()

View File

@ -18,6 +18,7 @@ from . import artist
from . import album
from . import decade
from . import disc
from . import genre
from . import library
from . import sql
from . import table
@ -32,6 +33,7 @@ class Track(GObject.GObject):
self._artist = artist.Table.get(row["artistid"])
self._album = album.Table.get(row["albumid"])
self._disc = disc.Table.get(row["discid"])
self._decade = decade.Table.get(row["decadeid"])
self._year = year.Table.get(row["yearid"])
self._number = row["number"]
self._playcount = row["playcount"]
@ -55,6 +57,9 @@ class Track(GObject.GObject):
@GObject.Property
def disc(self): return self._disc
@GObject.Property
def decade(self): return self._decade
@GObject.Property
def year(self): return self._year
@ -84,6 +89,11 @@ class Track(GObject.GObject):
@GObject.Property
def path(self): return self._path
def genres(self):
rows = sql.execute(f"SELECT genreid FROM genre_map WHERE trackid=?",
[ self.rowid ]).fetchall()
return [ genre.Table.get(row[0]) for row in rows ]
def update(self, column, newval):
sql.execute(f"UPDATE tracks SET {column}=? WHERE trackid=?",
[ newval, self.rowid ])