trackdb: Give tracks an about_to_remove() function

And have the TrackAllocator call it before removing tracks

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-06-24 17:08:27 -04:00
parent ec72f186bb
commit 8d6d4a0b44
3 changed files with 22 additions and 0 deletions

View File

@ -51,6 +51,7 @@ class TrackAllocator:
to_rm = [ trak for trak in self.tracks.values() \
if trak.library == lib and not trak.filepath().exists() ]
for trak in to_rm:
trak.about_to_remove()
del self.tracks[trak.trackid]
self.Removed.publish(trak)
return to_rm
@ -68,6 +69,7 @@ class TrackAllocator:
def remove(self, track):
with self.lock:
track.about_to_remove()
del self.tracks[track.trackid]
self.Removed.publish(track)

View File

@ -11,11 +11,13 @@ test_tracks = pathlib.Path("./trier/Test Album")
class TestTrack(unittest.TestCase):
def setUp(self):
tags.reset()
self.count_updated = 0
self.lib = library.LibraryPath(test_tracks)
track.TrackUpdated.register(self.on_track_updated)
def tearDown(self):
tags.reset()
track.reset()
def on_track_updated(self, path):
@ -107,6 +109,16 @@ class TestTrack(unittest.TestCase):
self.assertEqual(trak2.year, tags.Year[trak2.decade, "2019"])
self.assertEqual(trak2["year"], "2019")
def test_track_about_to_remove(self):
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
trak.about_to_remove()
self.assertEqual(len(tags.Artist), 0)
self.assertEqual(len(tags.Album), 0)
self.assertEqual(len(tags.Genre), 0)
self.assertEqual(len(tags.Decade), 0)
self.assertEqual(len(tags.Year), 0)
def test_track_state(self):
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
state = trak.__getstate__()

View File

@ -56,6 +56,14 @@ class Track:
self.decade = tags.Decade.init_track(self.decade, self)
self.year = tags.Year.init_track(self.decade, self.year, self)
def about_to_remove(self):
tags.Artist.remove(self.artist, self)
tags.Album.remove(self.album, self)
for genre in self.genres:
tags.Genre.remove(genre, self)
tags.Decade.remove(self.decade, self)
tags.Year.remove(self.year, self)
def filepath(self):
return self.library.name / self.path