trackdb: Create an observer for when tracks are updated

And publish a notification after marking tracks as played.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2020-10-20 11:10:04 -04:00
parent a29bcabc6c
commit 98d4709954
4 changed files with 29 additions and 0 deletions

View File

@ -58,6 +58,7 @@ class TestTrackDB(unittest.TestCase):
def test_trackdb_reset(self):
trackdb.library.TrackAdded.register(1)
trackdb.library.TrackRemoved.register(1)
trackdb.track.TrackUpdated.register(1)
trackdb.LibraryAdded.register(1)
trackdb.LibraryRemoved.register(1)
trackdb.library_paths = [ 1, 2, 3 ]
@ -66,5 +67,6 @@ class TestTrackDB(unittest.TestCase):
self.assertEqual(trackdb.library_paths, [ ])
self.assertEqual(trackdb.library.TrackAdded.subscribers, set())
self.assertEqual(trackdb.library.TrackRemoved.subscribers, set())
self.assertEqual(trackdb.track.TrackUpdated.subscribers, set())
self.assertEqual(trackdb.LibraryAdded.subscribers, set())
self.assertEqual(trackdb.LibraryRemoved.subscribers, set())

View File

@ -36,3 +36,4 @@ def reset():
LibraryAdded.reset()
LibraryRemoved.reset()
library.reset()
track.reset()

View File

@ -1,4 +1,5 @@
# Copyright 2020 (c) Anna Schumaker.
from lib import publisher
from . import track
import datetime
import pathlib
@ -7,11 +8,22 @@ import unittest
test_tracks = pathlib.Path("./trier/Test Album")
class TestTrack(unittest.TestCase):
def setUp(self):
self.count_updated = 0
track.TrackUpdated.register(self.on_track_updated)
def tearDown(self):
track.reset()
def on_track_updated(self, path):
self.count_updated += 1
def test_track_init(self):
trak = track.Track(1, test_tracks / "01 - Test Track.ogg")
self.assertEqual(trak.trackid, 1)
self.assertEqual(trak.filepath, test_tracks / "01 - Test Track.ogg")
self.assertIsInstance(trak.tags, dict)
self.assertIsInstance(track.TrackUpdated, publisher.Publisher)
def test_track_album(self):
trak = track.Track(1, test_tracks / "01 - Test Track.ogg")
@ -64,9 +76,11 @@ class TestTrack(unittest.TestCase):
self.assertEqual(trak.tags["lastplayed"], datetime.date.today())
self.assertEqual(trak["playcount"], "1")
self.assertEqual(trak["lastplayed"], str(datetime.date.today()))
self.assertEqual(self.count_updated, 1)
trak.played()
self.assertEqual(trak.tags["playcount"], 2)
self.assertEqual(trak["playcount"], "2")
self.assertEqual(self.count_updated, 2)
def test_track_title(self):
trak = track.Track(1, test_tracks / "01 - Test Track.ogg")
@ -87,3 +101,8 @@ class TestTrack(unittest.TestCase):
trak2 = track.Track(2, test_tracks / "02 - Test {Disc 2}.ogg")
self.assertEqual(trak2.tags["year"], 2019)
self.assertEqual(trak2["year"], "2019")
def test_track_reset(self):
track.TrackUpdated.register(1)
track.reset()
self.assertEqual(track.TrackUpdated.subscribers, set())

View File

@ -1,8 +1,11 @@
# Copyright 2020 (c) Anna Schumaker.
from lib import publisher
import datetime
import mutagen
import re
TrackUpdated = publisher.Publisher()
class Track:
def __init__(self, trackid, filepath):
self.trackid = trackid
@ -46,3 +49,7 @@ class Track:
def played(self):
self.tags["playcount"] += 1
self.tags["lastplayed"] = datetime.date.today()
TrackUpdated.publish(self)
def reset():
TrackUpdated.reset()