trackdb: Store the LibraryPath pointer in the track
This makes it so tracks can get to their libraries directly Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
8fcd84e7d3
commit
f4a1ef67e8
|
@ -38,7 +38,7 @@ class LibraryPath:
|
|||
|
||||
with IDLock as A, self.lock as B:
|
||||
try:
|
||||
trak = track.Track(NextID, path)
|
||||
trak = track.Track(NextID, path, self)
|
||||
self.tracks[NextID] = trak
|
||||
NextID += 1
|
||||
except Exception as e:
|
||||
|
@ -48,11 +48,11 @@ class LibraryPath:
|
|||
|
||||
def __scan_remove__(self):
|
||||
with self.lock:
|
||||
removed = [ (id, track) for (id, track) in self.tracks.items() if not track.filepath.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, self)
|
||||
return set([ track.filepath for (id, track) in self.tracks.items() ])
|
||||
return set([ track.filepath() for (id, track) in self.tracks.items() ])
|
||||
|
||||
def __do_scan__(self):
|
||||
track_set = self.__scan_remove__()
|
||||
|
|
|
@ -81,8 +81,8 @@ class TestLibraryPath(unittest.TestCase):
|
|||
self.assertEqual(library.NextID, 16)
|
||||
|
||||
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")
|
||||
pathlib.Path(test_tracks) / "01 - Test Track.ogg", lib)
|
||||
lib.tracks[library.NextID].path = pathlib.Path("No Such File")
|
||||
lib.scan().join()
|
||||
self.assertEqual(len(lib.tracks), 12)
|
||||
self.assertEqual(self.count_added, 16)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
# Copyright 2020 (c) Anna Schumaker.
|
||||
from lib import publisher
|
||||
from . import library
|
||||
from . import track
|
||||
import datetime
|
||||
import pathlib
|
||||
|
@ -10,6 +11,7 @@ test_tracks = pathlib.Path("./trier/Test Album")
|
|||
class TestTrack(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.count_updated = 0
|
||||
self.lib = library.LibraryPath(test_tracks)
|
||||
track.TrackUpdated.register(self.on_track_updated)
|
||||
|
||||
def tearDown(self):
|
||||
|
@ -19,41 +21,46 @@ class TestTrack(unittest.TestCase):
|
|||
self.count_updated += 1
|
||||
|
||||
def test_track_init(self):
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg")
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
|
||||
self.assertEqual(trak.trackid, 1)
|
||||
self.assertEqual(trak.filepath, test_tracks / "01 - Test Track.ogg")
|
||||
self.assertEqual(trak.filepath(), test_tracks / "01 - Test Track.ogg")
|
||||
self.assertIsInstance(track.TrackUpdated, publisher.Publisher)
|
||||
|
||||
def test_track_album(self):
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg")
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
|
||||
self.assertEqual(trak.album, "Test Album")
|
||||
self.assertEqual(trak["album"], "Test Album")
|
||||
|
||||
def test_track_artist(self):
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg")
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
|
||||
self.assertEqual(trak.artist, "Test Artist")
|
||||
self.assertEqual(trak["artist"], "Test Artist")
|
||||
trak2 = track.Track(2, test_tracks / "02 - Test {Disc 2}.ogg")
|
||||
trak2 = track.Track(2, test_tracks / "02 - Test {Disc 2}.ogg", self.lib)
|
||||
self.assertEqual(trak2.artist, "Test Album Artist")
|
||||
|
||||
def test_track_decade(self):
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg")
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
|
||||
self.assertEqual(trak.decade(), 2010)
|
||||
trak.year = 1974
|
||||
self.assertEqual(trak.decade(), 1970)
|
||||
|
||||
def test_track_discnumber(self):
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg")
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
|
||||
self.assertEqual(trak.discnumber, 1)
|
||||
self.assertEqual(trak["discnumber"], "01")
|
||||
|
||||
def test_track_filepath(self):
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
|
||||
self.assertEqual(trak.path, pathlib.Path("01 - Test Track.ogg"))
|
||||
self.assertEqual(trak.filepath(), test_tracks / "01 - Test Track.ogg")
|
||||
|
||||
def test_track_genres(self):
|
||||
trak = track.Track(1, test_tracks / "02 - Test {Disc 2}.ogg")
|
||||
trak = track.Track(1, test_tracks / "02 - Test {Disc 2}.ogg", self.lib)
|
||||
self.assertEqual(trak.genre, [ "Test", "Genre", "List" ])
|
||||
self.assertEqual(trak["genre"], "Test, Genre, List")
|
||||
|
||||
def test_track_length(self):
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg")
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
|
||||
self.assertEqual(trak.length, 10)
|
||||
self.assertEqual(trak["length"], "0:10")
|
||||
trak.length = 61
|
||||
|
@ -62,7 +69,7 @@ class TestTrack(unittest.TestCase):
|
|||
self.assertEqual(trak["length"], "0:03")
|
||||
|
||||
def test_track_played(self):
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg")
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
|
||||
trak.playcount = 0
|
||||
trak.lastplayed = None
|
||||
self.assertEqual(trak["playcount"], "0")
|
||||
|
@ -79,22 +86,22 @@ class TestTrack(unittest.TestCase):
|
|||
self.assertEqual(self.count_updated, 2)
|
||||
|
||||
def test_track_title(self):
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg")
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
|
||||
self.assertEqual(trak.title, "Test Track")
|
||||
self.assertEqual(trak["title"], "Test Track")
|
||||
|
||||
def test_track_tracknumber(self):
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg")
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
|
||||
self.assertEqual(trak.tracknumber, 1)
|
||||
self.assertEqual(trak["tracknumber"], "01")
|
||||
trak.tracknumber = 10
|
||||
self.assertEqual(trak["tracknumber"], "10")
|
||||
|
||||
def test_track_year(self):
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg")
|
||||
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
|
||||
self.assertEqual(trak.year, 2019)
|
||||
self.assertEqual(trak["year"], "2019")
|
||||
trak2 = track.Track(2, test_tracks / "02 - Test {Disc 2}.ogg")
|
||||
trak2 = track.Track(2, test_tracks / "02 - Test {Disc 2}.ogg", self.lib)
|
||||
self.assertEqual(trak2.year, 2019)
|
||||
self.assertEqual(trak2["year"], "2019")
|
||||
|
||||
|
|
|
@ -7,9 +7,10 @@ import re
|
|||
TrackUpdated = publisher.Publisher()
|
||||
|
||||
class Track:
|
||||
def __init__(self, trackid, filepath):
|
||||
def __init__(self, trackid, filepath, library):
|
||||
self.trackid = trackid
|
||||
self.filepath = filepath
|
||||
self.path = filepath.relative_to(library.path)
|
||||
self.library = library
|
||||
self.lastplayed = None
|
||||
self.playcount = None
|
||||
|
||||
|
@ -43,6 +44,9 @@ class Track:
|
|||
def decade(self):
|
||||
return (self.year // 10) * 10
|
||||
|
||||
def filepath(self):
|
||||
return self.library.path / self.path
|
||||
|
||||
def played(self):
|
||||
self.playcount += 1
|
||||
self.lastplayed = datetime.date.today()
|
||||
|
|
Loading…
Reference in New Issue