trackdb: Store Track objects in LibraryPaths

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2020-10-18 15:12:27 -04:00
parent c98cec1b28
commit 7707f896b7
3 changed files with 24 additions and 17 deletions

View File

@ -1,5 +1,6 @@
# Copyright 2020 (c) Anna Schumaker.
from lib import publisher
from . import track
import pathlib
import threading
@ -21,11 +22,11 @@ class LibraryPath:
def __scan_remove(self):
with self.lock:
removed = [ (id, track) for (id, track) in self.tracks.items() if not track.exists() ]
removed = [ (id, track) for (id, track) in self.tracks.items() if not track.filepath.exists() ]
for (id, track) in removed:
del self.tracks[id]
TrackRemoved.publish(track)
return set([ track for (id, track) in self.tracks.items() ])
return set([ track.filepath for (id, track) in self.tracks.items() ])
def __do_scan__(self):
global NextID
@ -34,9 +35,12 @@ class LibraryPath:
files = [ f for f in self.path.rglob("*") if f.is_file() and f not in track_set ]
with self.lock as A, IDLock as B:
for f in files:
self.tracks[NextID] = f
NextID += 1
TrackAdded.publish(f)
try:
self.tracks[NextID] = track.Track(NextID, f)
NextID += 1
TrackAdded.publish(f)
except:
pass
self.thread = None

View File

@ -1,6 +1,7 @@
# Copyright 2020 (c) Anna Schumaker.
from lib import publisher
from . import library
from . import track
import pathlib
import threading
import unittest
@ -44,27 +45,29 @@ class TestLibraryPath(unittest.TestCase):
lib.thread = None
lib.scan().join()
self.assertEqual(len(lib.tracks), 13)
self.assertEqual(self.count_added, 13)
self.assertEqual(len(lib.tracks), 12)
self.assertEqual(self.count_added, 12)
self.assertEqual(self.count_removed, 0)
self.assertEqual(library.NextID, 13)
self.assertEqual(library.NextID, 12)
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)
self.assertEqual(self.count_added, 18)
self.assertEqual(len(lib.tracks), 12)
self.assertEqual(self.count_added, 16)
self.assertEqual(self.count_removed, 0)
self.assertEqual(library.NextID, 18)
self.assertEqual(library.NextID, 16)
lib.tracks[library.NextID] = pathlib.Path("No Such File")
lib.tracks[library.NextID] = track.Track(library.NextID,
pathlib.Path(test_tracks) / "01 - Test Track.ogg")
lib.tracks[library.NextID].filepath = pathlib.Path("No Such File")
lib.scan().join()
self.assertEqual(len(lib.tracks), 13)
self.assertEqual(self.count_added, 18)
self.assertEqual(len(lib.tracks), 12)
self.assertEqual(self.count_added, 16)
self.assertEqual(self.count_removed, 1)
self.assertEqual(library.NextID, 18)
self.assertEqual(library.NextID, 16)
def test_library_reset(self):
library.TrackAdded.register(1)

View File

@ -69,8 +69,8 @@ generate_track(55, "Test Album/10 - Test {Disc 20}.ogg", { "Title" : "Test {Disc
"album" : "Test Album {Disc 20}" })
generate_track(60, "Test Album/11 - Test Track 11.ogg", { "Title" : "Test Track 11",
"album" : "Test Album 11",
"discnumber" : "1/1",
"tracknumber" : "11/100" })
"discnumber" : "1",
"tracknumber" : "11" })
with open(os.path.join(trier, "Test Album/text.txt"), 'w') as f:
f.write("Test Text")