trackdb: Use the LibraryStore for library paths

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-06-25 11:14:55 -04:00
parent 2199ff819c
commit 109b1b7c62
2 changed files with 27 additions and 68 deletions

View File

@ -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())

View File

@ -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()