trackdb: Use the LibraryStore for library paths
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
2199ff819c
commit
109b1b7c62
|
@ -11,8 +11,8 @@ test_tracks = pathlib.Path("./trier/Test Album")
|
|||
|
||||
class TestTrackDB(unittest.TestCase):
|
||||
def setUp(self):
|
||||
trackdb.LibraryAdded.register(self.on_library_added)
|
||||
trackdb.LibraryRemoved.register(self.on_library_removed)
|
||||
trackdb.Library.Added.register(self.on_library_added)
|
||||
trackdb.Library.Removed.register(self.on_library_removed)
|
||||
self.count_added = 0
|
||||
self.count_removed = 0
|
||||
|
||||
|
@ -26,50 +26,35 @@ class TestTrackDB(unittest.TestCase):
|
|||
self.count_removed += 1
|
||||
|
||||
def test_trackdb_init(self):
|
||||
self.assertEqual(trackdb.library_paths, [ ])
|
||||
self.assertIsInstance(trackdb.save_bus, bus.Bus)
|
||||
self.assertIsInstance(trackdb.LibraryAdded, publisher.Publisher)
|
||||
self.assertIsInstance(trackdb.LibraryRemoved, publisher.Publisher)
|
||||
self.assertIsInstance(trackdb.Library, trackdb.library.LibraryStore)
|
||||
self.assertEqual(trackdb.db_file, "trackdb.pickle")
|
||||
self.assertEqual(trackdb.save_bus.timeout, 500)
|
||||
|
||||
self.assertIn(trackdb.save, trackdb.LibraryAdded.subscribers)
|
||||
self.assertIn(trackdb.save, trackdb.LibraryRemoved.subscribers)
|
||||
self.assertIn(trackdb.save, trackdb.Library.Added.subscribers)
|
||||
self.assertIn(trackdb.save, trackdb.Library.Removed.subscribers)
|
||||
self.assertIn(trackdb.save, trackdb.library.Tracks.Added.subscribers)
|
||||
self.assertIn(trackdb.save, trackdb.library.Tracks.Removed.subscribers)
|
||||
self.assertIn(trackdb.save, trackdb.track.TrackUpdated.subscribers)
|
||||
|
||||
def test_trackdb_add_path(self):
|
||||
lib = trackdb.add_path(test_tracks)
|
||||
lib = trackdb.Library.add(test_tracks)
|
||||
self.assertIsInstance(lib, trackdb.library.LibraryPath)
|
||||
self.assertEqual(trackdb.library_paths, [ lib ])
|
||||
self.assertEqual(self.count_added, 1)
|
||||
self.assertEqual(self.count_removed, 0)
|
||||
|
||||
self.assertIsNone(trackdb.add_path(test_tracks))
|
||||
self.assertEqual(len(trackdb.library_paths), 1)
|
||||
self.assertEqual(trackdb.Library.add(test_tracks), lib)
|
||||
self.assertEqual(self.count_added, 1)
|
||||
self.assertEqual(self.count_removed, 0)
|
||||
|
||||
trackdb.remove_path(test_tracks)
|
||||
self.assertEqual(trackdb.library_paths, [ ])
|
||||
trackdb.Library.remove(lib)
|
||||
self.assertEqual(len(trackdb.Library), 0)
|
||||
self.assertEqual(self.count_added, 1)
|
||||
self.assertEqual(self.count_removed, 1)
|
||||
|
||||
def test_trackdb_get_library(self):
|
||||
self.assertIsNone(trackdb.get_library(test_tracks))
|
||||
lib = trackdb.add_path(test_tracks)
|
||||
self.assertEqual(trackdb.get_library(test_tracks), lib)
|
||||
|
||||
def test_trackdb_get_track(self):
|
||||
lib = trackdb.add_path(test_tracks)
|
||||
lib.scan().join()
|
||||
self.assertEqual(trackdb.get_track(3), lib.tracks[3])
|
||||
self.assertIsNone(trackdb.get_track(200))
|
||||
|
||||
def test_trackdb_save_load(self):
|
||||
db_file = data.DataFile(trackdb.db_file, data.READ)
|
||||
lib = trackdb.add_path(test_tracks)
|
||||
lib = trackdb.Library.add(test_tracks)
|
||||
lib.scan()
|
||||
|
||||
trackdb.save()
|
||||
|
@ -82,12 +67,11 @@ class TestTrackDB(unittest.TestCase):
|
|||
self.assertTrue(db_file.exists())
|
||||
|
||||
trackdb.tags.reset()
|
||||
trackdb.library_paths.clear()
|
||||
trackdb.library.NextID = 0
|
||||
trackdb.Library.reset()
|
||||
trackdb.load()
|
||||
self.assertEqual(len(trackdb.library.Tracks), 12)
|
||||
self.assertEqual(len(trackdb.library_paths), 1)
|
||||
self.assertEqual(len(trackdb.library_paths[0].tracks), 12)
|
||||
self.assertEqual(len(trackdb.Library), 1)
|
||||
self.assertEqual(len(trackdb.Library[test_tracks]), 12)
|
||||
self.assertEqual(len(trackdb.tags.Artist), 3)
|
||||
self.assertEqual(len(trackdb.tags.Album), 12)
|
||||
self.assertEqual(len(trackdb.tags.Genre), 4)
|
||||
|
@ -95,7 +79,7 @@ class TestTrackDB(unittest.TestCase):
|
|||
self.assertEqual(len(trackdb.tags.Year), 2)
|
||||
|
||||
def test_trackdb_stress(self):
|
||||
lib = trackdb.add_path(pathlib.Path("./trier/Test Library/"))
|
||||
lib = trackdb.Library.add(pathlib.Path("./trier/Test Library/"))
|
||||
lib.scan()
|
||||
trackdb.save_bus.complete()
|
||||
|
||||
|
@ -103,18 +87,18 @@ class TestTrackDB(unittest.TestCase):
|
|||
trackdb.library.Tracks.Added.register(1)
|
||||
trackdb.library.Tracks.Removed.register(1)
|
||||
trackdb.track.TrackUpdated.register(1)
|
||||
trackdb.LibraryAdded.register(1)
|
||||
trackdb.LibraryRemoved.register(1)
|
||||
trackdb.library_paths = [ 1, 2, 3 ]
|
||||
trackdb.Library.Added.register(1)
|
||||
trackdb.Library.Removed.register(1)
|
||||
trackdb.Library.store = { "a" : 1, "b" : 2, "c" : 3 }
|
||||
trackdb.need_save = True
|
||||
with data.DataFile(trackdb.db_file, data.WRITE) as f:
|
||||
f.pickle([ 0, [] ])
|
||||
|
||||
trackdb.reset()
|
||||
self.assertEqual(trackdb.library_paths, [ ])
|
||||
self.assertEqual(len(trackdb.Library), 0)
|
||||
self.assertIn(trackdb.save, trackdb.library.Tracks.Added.subscribers)
|
||||
self.assertIn(trackdb.save, trackdb.library.Tracks.Removed.subscribers)
|
||||
self.assertIn(trackdb.save, trackdb.track.TrackUpdated.subscribers)
|
||||
self.assertIn(trackdb.save, trackdb.LibraryAdded.subscribers)
|
||||
self.assertIn(trackdb.save, trackdb.LibraryRemoved.subscribers)
|
||||
self.assertIn(trackdb.save, trackdb.Library.Added.subscribers)
|
||||
self.assertIn(trackdb.save, trackdb.Library.Removed.subscribers)
|
||||
self.assertFalse(data.DataFile(trackdb.db_file, data.READ).exists())
|
||||
|
|
|
@ -10,56 +10,31 @@ import threading
|
|||
|
||||
db_file = "trackdb.pickle"
|
||||
save_bus = bus.Bus(500)
|
||||
library_paths = [ ]
|
||||
LibraryAdded = publisher.Publisher()
|
||||
LibraryRemoved = publisher.Publisher()
|
||||
|
||||
def add_path(path):
|
||||
if get_library(path) == None:
|
||||
lib = library.LibraryPath(path)
|
||||
library_paths.append(lib)
|
||||
LibraryAdded.publish(lib)
|
||||
return lib
|
||||
|
||||
def get_library(path):
|
||||
for lib in library_paths:
|
||||
if lib.name == pathlib.Path(path):
|
||||
return lib
|
||||
return None
|
||||
|
||||
def get_track(trackid):
|
||||
return library.Tracks[trackid]
|
||||
|
||||
def remove_path(path):
|
||||
lib = get_library(path)
|
||||
library_paths.remove(lib)
|
||||
LibraryRemoved.publish(lib)
|
||||
Library = library.LibraryStore()
|
||||
|
||||
def _do_save():
|
||||
with data.DataFile(db_file, data.WRITE) as f:
|
||||
f.pickle([ tags.Artist, tags.Album, tags.Genre, tags.Decade, tags.Year, library.Tracks, library_paths ])
|
||||
f.pickle([ tags.Artist, tags.Album, tags.Genre, tags.Decade, tags.Year, library.Tracks, Library ])
|
||||
|
||||
def save(*args):
|
||||
save_bus.board(_do_save)
|
||||
|
||||
def load():
|
||||
global library_paths
|
||||
global Library
|
||||
with data.DataFile(db_file, data.READ) as f:
|
||||
if f.exists():
|
||||
(tags.Artist, tags.Album, tags.Genre, tags.Decade, tags.Year, library.Tracks, library_paths) = f.unpickle()
|
||||
(tags.Artist, tags.Album, tags.Genre, tags.Decade, tags.Year, library.Tracks, Library) = f.unpickle()
|
||||
|
||||
def __register_callbacks():
|
||||
LibraryAdded.register(save)
|
||||
LibraryRemoved.register(save)
|
||||
Library.Added.register(save)
|
||||
Library.Removed.register(save)
|
||||
library.Tracks.Added.register(save)
|
||||
library.Tracks.Removed.register(save)
|
||||
track.TrackUpdated.register(save)
|
||||
__register_callbacks()
|
||||
|
||||
def reset():
|
||||
library_paths.clear()
|
||||
LibraryAdded.reset()
|
||||
LibraryRemoved.reset()
|
||||
Library.reset()
|
||||
tags.reset()
|
||||
library.reset()
|
||||
track.reset()
|
||||
|
|
Loading…
Reference in New Issue