trackdb: Add lookup methods for track ids

Playlists will want to use this when reading saved state to figure out
what tracks they hold.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2020-10-11 10:03:16 -04:00
parent 977c89068e
commit c46f73cbc6
4 changed files with 18 additions and 0 deletions

View File

@ -49,6 +49,12 @@ class TestTrackDB(unittest.TestCase):
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[3])
self.assertIsNone(trackdb.get_track(200))
def test_trackdb_reset(self):
trackdb.library.TrackAdded.register(1)
trackdb.library.TrackRemoved.register(1)

View File

@ -20,6 +20,12 @@ def get_library(path):
return lib
return None
def get_track(trackid):
for lib in library_paths:
if (track := lib[trackid]) != None:
return track
return None
def remove_path(path):
lib = get_library(path)
library_paths.remove(lib)

View File

@ -16,6 +16,9 @@ class LibraryPath:
self.thread = None
self.lock = threading.Lock()
def __getitem__(self, trackid):
return self.tracks.get(trackid)
def __scan_remove(self):
with self.lock:
removed = [ (id, track) for (id, track) in self.tracks.items() if not track.exists() ]

View File

@ -49,6 +49,9 @@ class TestLibraryPath(unittest.TestCase):
self.assertEqual(self.count_removed, 0)
self.assertEqual(library.NextID, 13)
self.assertEqual(lib[3], lib.tracks[3])
self.assertIsNone(lib[200])
lib.tracks = { id:track for (id, track) in lib.tracks.items() if 2 < id < 11 }
lib.scan().join()
self.assertEqual(len(lib.tracks), 13)