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:
parent
e0e7b556be
commit
3cda4caa76
|
@ -262,3 +262,17 @@ class Thread(threading.Thread):
|
||||||
self._mtime = mtime
|
self._mtime = mtime
|
||||||
self._tags = None
|
self._tags = None
|
||||||
self._condition.notify()
|
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)
|
||||||
|
|
|
@ -400,3 +400,37 @@ class TestTaggerThread(tests.util.TestCase):
|
||||||
emmental.db.connection.Connection)
|
emmental.db.connection.Connection)
|
||||||
self.assertEqual(audio_tags.artists[0].name, "Some Artist")
|
self.assertEqual(audio_tags.artists[0].name, "Some Artist")
|
||||||
self.assertEqual(audio_tags.artists[1].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))
|
||||||
|
|
Loading…
Reference in New Issue