curds: Create "new-album" and "new-track" notifications
And update the playlist manager to use the new-track, rather than relying on "on-scan" Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
752ebece3d
commit
8a4d3219d2
|
@ -17,7 +17,7 @@ class PlaylistManager(dict):
|
|||
self["Collection"] = playlist.Playlist("collection")
|
||||
self["Library"] = LibraryManager()
|
||||
|
||||
notify.Notify.notify_me("on-scan", self.on_scan)
|
||||
notify.Notify.notify_me("new-track", self.on_new_track)
|
||||
|
||||
def on_scan(self, plist, track):
|
||||
def on_new_track(self, track):
|
||||
self["Collection"].add(track)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
# Copyright 2019 (c) Anna Schumaker.
|
||||
from . import data
|
||||
from . import notify
|
||||
import mutagen
|
||||
import os
|
||||
import re
|
||||
|
@ -11,8 +12,11 @@ class Tag:
|
|||
def extract(info, key, default):
|
||||
return info.get(key, [ default ])[0]
|
||||
|
||||
def lookup(tag):
|
||||
return tag_map.setdefault(hash(tag), tag)
|
||||
def lookup(tag, cb):
|
||||
ret = tag_map.setdefault(hash(tag), tag)
|
||||
if ret == tag:
|
||||
notify.Notify.notify(cb, ret)
|
||||
return ret
|
||||
|
||||
|
||||
class Album(Tag):
|
||||
|
@ -34,7 +38,7 @@ class Album(Tag):
|
|||
return hash((self.album, self.albumartist, self.date))
|
||||
|
||||
def lookup(info):
|
||||
return Tag.lookup(Album(info))
|
||||
return Tag.lookup(Album(info), "new-album")
|
||||
|
||||
|
||||
class Track(Tag):
|
||||
|
@ -67,7 +71,7 @@ class Track(Tag):
|
|||
|
||||
def add(path):
|
||||
track = Track(path)
|
||||
return track if Tag.lookup(track) == track else None
|
||||
return track if Tag.lookup(track, "new-track") == track else None
|
||||
|
||||
|
||||
def save():
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# Copyright 2019 (c) Anna Schumaker.
|
||||
from . import notify
|
||||
from . import tags
|
||||
import unittest
|
||||
|
||||
|
@ -6,6 +7,11 @@ album_info = {"album" : [ "Test Album" ], "albumartist" : [ "Test Artist" ],
|
|||
"date" : [ "2019" ], "genre" : [ "Test" ], "tracktotal" : [ "1" ]}
|
||||
|
||||
class TestAlbumTag(unittest.TestCase):
|
||||
def setUp(self):
|
||||
notify.Notify.clear()
|
||||
tags.tag_map.clear()
|
||||
self.cb_album = None
|
||||
|
||||
def test_album_init_basic(self):
|
||||
a = tags.Album(album_info)
|
||||
self.assertIsInstance(a, tags.Tag)
|
||||
|
@ -45,13 +51,20 @@ class TestAlbumTag(unittest.TestCase):
|
|||
self.assertEqual(tags.Album({"album" : [ "Test Album;CdFive" ]}).album, "Test Album")
|
||||
self.assertEqual(tags.Album({"album" : [ "Test Album CD 9/10" ]}).album, "Test Album")
|
||||
self.assertEqual(tags.Album({"album" : [ "Disc One: Test Album" ]}).album, "Disc One: Test Album")
|
||||
|
||||
def on_new_album(self, album):
|
||||
self.cb_album = album
|
||||
|
||||
def test_album_lookup(self):
|
||||
tags.tag_map.clear()
|
||||
notify.Notify.notify_me("new-album", self.on_new_album)
|
||||
a = tags.Album.lookup(album_info)
|
||||
self.assertIsNotNone(a)
|
||||
self.assertIn(a, tags.tag_map.values())
|
||||
self.assertEqual(a, self.cb_album)
|
||||
|
||||
self.cb_album = None
|
||||
for i in range(10):
|
||||
b = tags.Album.lookup(album_info)
|
||||
self.assertEqual(a, b)
|
||||
self.assertIsNone(self.cb_album)
|
||||
self.assertEqual(len(tags.tag_map), 1)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# Copyright 2019 (c) Anna Schumaker.
|
||||
from . import notify
|
||||
from . import tags
|
||||
import os
|
||||
import unittest
|
||||
|
@ -6,6 +7,11 @@ import unittest
|
|||
test_tracks = os.path.abspath("./trier/Test Album")
|
||||
|
||||
class TestTrackTag(unittest.TestCase):
|
||||
def setUp(self):
|
||||
notify.Notify.clear()
|
||||
tags.tag_map.clear()
|
||||
self.cb_track = None
|
||||
|
||||
def test_track_init_basic(self):
|
||||
p = [ test_tracks, "01 - Test Track.ogg" ]
|
||||
t = tags.Track(os.path.join(*p))
|
||||
|
@ -50,16 +56,22 @@ class TestTrackTag(unittest.TestCase):
|
|||
self.assertEqual(tags.Track(join(test_tracks, "09 - Test {Disc 02}.ogg")).discnumber, 2)
|
||||
self.assertEqual(tags.Track(join(test_tracks, "10 - Test {Disc 20}.ogg")).discnumber, 20)
|
||||
|
||||
def on_new_track(self, track):
|
||||
self.cb_track = track
|
||||
|
||||
def test_track_add(self):
|
||||
tags.tag_map.clear()
|
||||
notify.Notify.notify_me("new-track", self.on_new_track)
|
||||
t = tags.Track.add(os.path.join(test_tracks, "01 - Test Track.ogg"))
|
||||
self.assertIsNotNone(t)
|
||||
self.assertIn(t, tags.tag_map.values())
|
||||
self.assertIn(t.album, tags.tag_map.values())
|
||||
self.assertEqual(t, self.cb_track)
|
||||
|
||||
self.cb_track = None
|
||||
for i in range(10):
|
||||
u = tags.Track.add(os.path.join(test_tracks, "01 - Test Track.ogg"))
|
||||
self.assertIsNone(u)
|
||||
self.assertIsNone(self.cb_track)
|
||||
self.assertEqual(len(tags.tag_map), 2)
|
||||
|
||||
def test_track_getitem(self):
|
||||
|
|
Loading…
Reference in New Issue