db: Give the Tagger a function for untagging Tracks

This is used to remove a Track from each of its Playlists before
deleting.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2023-04-12 16:22:08 -04:00
parent e0e7b556be
commit 3cda4caa76
2 changed files with 48 additions and 0 deletions

View File

@ -262,3 +262,17 @@ class Thread(threading.Thread):
self._mtime = mtime
self._tags = None
self._condition.notify()
def untag_track(db: GObject.TYPE_PYOBJECT, track: tracks.Track) -> None:
"""Untag a Track."""
medium = track.get_medium()
year = track.get_year()
playlists = [plist for plist in db.playlists.store]
playlists.extend([medium, medium.get_album()])
playlists.extend(track.get_artists())
playlists.extend([year, year.parent, track.get_library()])
for plist in playlists:
plist.remove_track(track)

View File

@ -400,3 +400,37 @@ class TestTaggerThread(tests.util.TestCase):
emmental.db.connection.Connection)
self.assertEqual(audio_tags.artists[0].name, "Some Artist")
self.assertEqual(audio_tags.artists[1].name, "Some Artist")
class TestUntag(tests.util.TestCase):
"""Test untagging a Track."""
def setUp(self):
"""Set up common variables."""
super().setUp()
self.sql.playlists.load(now=True)
self.file = pathlib.Path("/a/b/c.ogg")
self.library = self.sql.libraries.create(self.file.parent)
self.raw_tags = {"album": ["Album Name"],
"artist": ["Track Artist"],
"date": ["1988-06"],
"title": ["Test Title"],
"tracknumber": ["3"],
"musicbrainz_releasetrackid": ["ab-cd-ef"]}
self.audio_tags = emmental.audio.tagger._Tags(self.file, self.raw_tags,
12345, 678.9)
self.tagged = emmental.db.tagger.Tags(self.sql, self.audio_tags,
self.library)
for tbl in self.sql.playlist_tables():
tbl.queue.complete()
def test_untag_track(self):
"""Test untagging a Track before deleting."""
emmental.db.tagger.untag_track(self.sql, self.tagged.track)
for tbl in self.sql.playlist_tables():
for plist in tbl.store:
with self.subTest(table=tbl, playlist=plist.name):
self.assertFalse(plist.has_track(self.tagged.track))