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._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)
|
||||
|
|
|
@ -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))
|
||||
|
|
Loading…
Reference in New Issue