curds: Improve the LibraryManager
I change it to a sorted list for easier indexing by the UI iterators. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
0873f0458c
commit
524af59ec1
|
@ -1,22 +1,28 @@
|
|||
# Copyright 2019 (c) Anna Schumaker.
|
||||
from . import collection
|
||||
from . import library
|
||||
from .. import notify
|
||||
import os
|
||||
|
||||
class LibraryManager(dict):
|
||||
class LibraryManager(list):
|
||||
def __init__(self):
|
||||
self.name = "Library"
|
||||
self.icon = "folder"
|
||||
|
||||
def __getitem__(self, key):
|
||||
key = os.path.abspath(key)
|
||||
if not key in self.keys():
|
||||
self[key] = library.LibraryPlaylist(key)
|
||||
return self.get(key)
|
||||
|
||||
def __str__(self):
|
||||
return f"<big>{self.name}</big>"
|
||||
|
||||
def add(self, path):
|
||||
path = os.path.abspath(path)
|
||||
if len([ plist for plist in self if plist.name == path ]) > 0:
|
||||
return None
|
||||
|
||||
plist = library.LibraryPlaylist(path)
|
||||
self.append(plist)
|
||||
self.sort()
|
||||
notify.Notify.notify("new-library-playlist", plist)
|
||||
return plist
|
||||
|
||||
|
||||
class PlaylistManager(dict):
|
||||
def __init__(self):
|
||||
|
|
|
@ -18,6 +18,7 @@ class TestPlaylistManager(unittest.TestCase):
|
|||
tags.tag_map.clear()
|
||||
if not library.library_thread.is_alive():
|
||||
library.library_thread = threadqueue.ThreadQueue()
|
||||
self.cb_plist = None
|
||||
|
||||
def tearDown(self):
|
||||
library.library_thread.stop()
|
||||
|
@ -28,28 +29,45 @@ class TestPlaylistManager(unittest.TestCase):
|
|||
self.assertIsInstance(playman, dict)
|
||||
self.assertIsInstance(playman["Collection"], collection.CollectionPlaylist)
|
||||
self.assertIsInstance(playman["Library"], manager.LibraryManager)
|
||||
self.assertIsInstance(playman["Library"], dict)
|
||||
self.assertIsInstance(playman["Library"], list)
|
||||
|
||||
def on_new_library(self, plist):
|
||||
self.cb_plist = plist
|
||||
|
||||
def test_manager_library(self):
|
||||
notify.Notify.notify_me("new-library-playlist", self.on_new_library)
|
||||
playman = manager.PlaylistManager()
|
||||
plist = playman["Library"][test_library + "/"]
|
||||
|
||||
plist = playman["Library"].add(test_library + "/")
|
||||
self.assertEqual(self.cb_plist, plist)
|
||||
self.assertEqual(str(playman["Library"]), "<big>Library</big>")
|
||||
self.assertEqual(playman["Library"].name, "Library")
|
||||
self.assertEqual(playman["Library"].icon, "folder")
|
||||
self.assertEqual(plist.name, test_library)
|
||||
self.assertIsInstance(plist, library.LibraryPlaylist)
|
||||
self.assertEqual(id(plist), id(playman["Library"][test_library]))
|
||||
|
||||
alist = playman["Library"][test_album]
|
||||
self.cb_plist = None
|
||||
self.assertIsNone(playman["Library"].add(test_library))
|
||||
self.assertIsNone(self.cb_plist)
|
||||
|
||||
alist = playman["Library"].add(test_album)
|
||||
self.assertEqual(self.cb_plist, alist)
|
||||
self.assertIsInstance(alist, library.LibraryPlaylist)
|
||||
self.assertNotEqual(id(plist), id(alist))
|
||||
self.assertIn(alist, playman["Library"].values())
|
||||
self.assertIn(plist, playman["Library"].values())
|
||||
self.assertIn(alist, playman["Library"])
|
||||
self.assertIn(plist, playman["Library"])
|
||||
|
||||
def test_manager_on_scan(self):
|
||||
playman = manager.PlaylistManager()
|
||||
alist = playman["Library"][test_album]
|
||||
plist = playman["Library"][test_library]
|
||||
plist = playman["Library"].add(test_library)
|
||||
self.assertEqual(playman["Library"].index(plist), 0)
|
||||
self.assertEqual(playman["Library"][0], plist)
|
||||
|
||||
alist = playman["Library"].add(test_album)
|
||||
self.assertEqual(playman["Library"].index(alist), 0)
|
||||
self.assertEqual(playman["Library"].index(plist), 1)
|
||||
self.assertEqual(playman["Library"][0], alist)
|
||||
self.assertEqual(playman["Library"][1], plist)
|
||||
|
||||
library.library_thread.join()
|
||||
self.assertEqual(len(plist), 1250)
|
||||
|
|
Loading…
Reference in New Issue