trackdb: Give LibraryPaths an add_track() function

To mimic how curds.trak.lookup() works, only in the library path itself.

We also take this time to delete the curds/trak directory as nothing
there is used anymore.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2020-11-15 19:57:59 -05:00
parent 2001639d93
commit 6f0d092414
21 changed files with 57 additions and 129 deletions

View File

@ -3,7 +3,6 @@ from . import data
from . import notify
from . import playlist
from . import threadqueue
from . import trak
import os
import trackdb
@ -20,7 +19,7 @@ Track = trackdb.track.Track
def reset():
notify.clear()
trak.reset()
trackdb.reset()
playlist.reset()
def stop():

View File

@ -4,7 +4,6 @@ from . import playlist
from . import root
from .. import data
from .. import notify
from .. import trak
import random
import threading
import trackdb

View File

@ -2,7 +2,6 @@
from . import playlist
from .. import notify
from .. import threadqueue
from .. import trak
from .. import tree
import os
import trackdb

View File

@ -1,7 +1,6 @@
# Copyright 2019 (c) Anna Schumaker.
from .. import notify
from .. import sort
from .. import trak
from .. import tree
import random
import trackdb

View File

@ -2,7 +2,6 @@
from . import artist
from . import playlist
from .. import notify
from .. import trak
from .. import tree
import os
import pathlib
@ -14,7 +13,7 @@ test_album = pathlib.Path("./trier/Test Library/Test Artist 01/Test Album 1")
class TestArtistPlaylist(unittest.TestCase):
def setUp(self):
notify.clear()
trak.reset()
trackdb.reset()
self.lib = trackdb.add_path(test_album)
def test_artist_node(self):
@ -35,7 +34,7 @@ class TestArtistPlaylist(unittest.TestCase):
anode = artist.ArtistNode()
self.assertEqual(anode.n_children(), 0)
track = trak.lookup(test_album / "01 - Test Track 01.ogg", self.lib)
track = self.lib.add_track("01 - Test Track 01.ogg")
self.assertEqual(anode.n_children(), 1)
plist = anode.nth_child(0)
self.assertEqual(plist.name, "Test Artist 01")
@ -62,7 +61,7 @@ class TestArtistPlaylist(unittest.TestCase):
def test_artist_playlist_add(self):
anode = artist.ArtistNode()
track = trak.lookup(test_album / "01 - Test Track 01.ogg", self.lib)
track = self.lib.add_track("01 - Test Track 01.ogg")
plist = anode.nth_child(0)
self.assertEqual(plist.n_children(), 1)

View File

@ -2,7 +2,6 @@
from . import playlist
from . import special
from .. import notify
from .. import trak
import os
import pathlib
import trackdb
@ -12,7 +11,7 @@ test_album = pathlib.Path("./trier/Test Album")
class TestCollectionPlaylist(unittest.TestCase):
def setUp(self):
trak.reset()
trackdb.reset()
self.lib = trackdb.add_path(test_album)
def test_collection_plist(self):
@ -29,7 +28,7 @@ class TestCollectionPlaylist(unittest.TestCase):
plist = special.CollectionPlaylist()
self.assertEqual(len(plist), 0)
track1 = trak.lookup(test_album / "01 - Test Track.ogg", self.lib)
track1 = self.lib.add_track("01 - Test Track.ogg")
self.assertEqual(len(plist), 1)
self.assertEqual(plist[0], track1)

View File

@ -2,7 +2,6 @@
from . import decade
from . import playlist
from .. import notify
from .. import trak
from .. import tree
import os
import pathlib
@ -10,14 +9,11 @@ import trackdb
import unittest
test_library = pathlib.Path("./trier/Test Library/Test Artist 01")
test_album = test_library / "Test Album 1" / "01 - Test Track 01.ogg"
test_album2 = test_library / "Test Album 4" / "01 - Test Track 01.ogg"
test_album3 = test_library / "Test Album 4" / "02 - Test Track 02.ogg"
class TestDecadePlaylist(unittest.TestCase):
def setUp(self):
notify.clear()
trak.reset()
trackdb.reset()
self.lib = trackdb.add_path(test_library)
def test_decade_node(self):
@ -39,7 +35,7 @@ class TestDecadePlaylist(unittest.TestCase):
dnode = decade.DecadeNode()
self.assertEqual(dnode.n_children(), 0)
track = trak.lookup(test_album, self.lib)
track = self.lib.add_track("Test Album 1", "01 - Test Track 01.ogg")
self.assertEqual(dnode.n_children(), 1)
plist = dnode.nth_child(0)
self.assertEqual(plist.name, "1970s")
@ -67,7 +63,7 @@ class TestDecadePlaylist(unittest.TestCase):
def test_decade_playlist_add(self):
dnode = decade.DecadeNode()
track = trak.lookup(test_album, self.lib)
track = self.lib.add_track("Test Album 1", "01 - Test Track 01.ogg")
plist = dnode.nth_child(0)
self.assertEqual(plist.n_children(), 1)

View File

@ -2,7 +2,6 @@
from . import genre
from . import playlist
from .. import notify
from .. import trak
from .. import tree
import os
import pathlib
@ -14,7 +13,7 @@ test_library = pathlib.Path("./trier/Test Library/Test Artist 01")
class TestGenrePlaylist(unittest.TestCase):
def setUp(self):
notify.clear()
trak.reset()
trackdb.reset()
self.lib = trackdb.add_path(test_library)
def test_genre_node(self):
@ -25,7 +24,7 @@ class TestGenrePlaylist(unittest.TestCase):
def test_genre_playlist(self):
gnode = genre.GenreNode()
track = trak.lookup(test_library / "Test Album 1" /"01 - Test Track 01.ogg", self.lib)
track = self.lib.add_track("Test Album 1", "01 - Test Track 01.ogg")
self.assertEqual(gnode.n_children(), 1)
plist = gnode.nth_child(0)
@ -44,9 +43,9 @@ class TestGenrePlaylist(unittest.TestCase):
def test_genre_new_tracks(self):
gnode = genre.GenreNode()
track1 = trak.lookup(test_library / "Test Album 1" / "01 - Test Track 01.ogg", self.lib)
track2 = trak.lookup(test_library / "Test Album 2" / "02 - Test Track 02.ogg", self.lib)
track3 = trak.lookup(test_library / "Test Album 2" / "03 - Test Track 03.ogg", self.lib)
track1 = self.lib.add_track("Test Album 1", "01 - Test Track 01.ogg")
track2 = self.lib.add_track("Test Album 2", "02 - Test Track 02.ogg")
track3 = self.lib.add_track("Test Album 2", "03 - Test Track 03.ogg")
self.assertEqual(gnode.n_children(), 2)
plist = gnode.nth_child(0)

View File

@ -2,7 +2,6 @@
from . import library
from . import playlist
from .. import notify
from .. import trak
from .. import tree
import lib
import os
@ -16,7 +15,7 @@ test_album = os.path.abspath("./trier/Test Album")
class TestLibraryPlaylist(unittest.TestCase):
def setUp(self):
notify.clear()
trak.reset()
trackdb.reset()
def tearDownClass():
library.stop()

View File

@ -1,7 +1,6 @@
# Copyright 2019 (c) Anna Schumaker.
from . import playlist
from . import user
from .. import trak
import os
import pathlib
import trackdb
@ -11,7 +10,7 @@ test_album = pathlib.Path("./trier/Test Album/")
class TestNewPlaylist(unittest.TestCase):
def setUp(self):
trak.reset()
trackdb.reset()
self.lib = trackdb.add_path(test_album)
def test_new_plist(self):
@ -26,13 +25,13 @@ class TestNewPlaylist(unittest.TestCase):
plist = user.NewPlaylist()
self.assertEqual(len(plist), 0)
track = trak.lookup(test_album / "01 - Test Track.ogg", self.lib)
track = self.lib.add_track("01 - Test Track.ogg")
self.assertEqual(len(plist), 1)
self.assertEqual(plist[0], track)
def test_new_plist_get_state(self):
plist = user.NewPlaylist()
track = trak.lookup(test_album / "01 - Test Track.ogg", self.lib)
track = self.lib.add_track("01 - Test Track.ogg")
plist.add(track)
plist.current = 3

View File

@ -1,7 +1,6 @@
# Copyright 2019 (c) Anna Schumaker.
from . import playlist
from .. import notify
from .. import trak
from .. import tree
import os
import pathlib
@ -14,7 +13,7 @@ test_album = test_library / "Test Artist 01" / "Test Album 1"
class TestPlaylist(unittest.TestCase):
def setUp(self):
trak.reset()
trackdb.reset()
notify.register("add-track", self.on_add_remove)
notify.register("remove-track", self.on_add_remove)
notify.register("playlist-changed", self.on_plist_changed)
@ -32,11 +31,7 @@ class TestPlaylist(unittest.TestCase):
def add_tracks(self, tracknos):
tracks = [ ]
for t in tracknos:
track = trackdb.get_track(t)
if track == None:
path = test_album / f"{t:02} - Test Track {t:02}.ogg"
track = trackdb.track.Track(t, path)
self.lib.tracks[t] = track
track = self.lib.add_track(f"{t:02} - Test Track {t:02}.ogg")
tracks.append(track)
self.plist.add(track)
return tracks
@ -122,9 +117,6 @@ class TestPlaylist(unittest.TestCase):
self.assertEqual(self.cb_plist, self.plist)
self.assertEqual(self.cb_index, 5)
self.add_tracks([6])
self.assertEqual(len(self.plist), 6)
self.plist.add(None)
self.assertEqual(len(self.plist), 6)
@ -141,7 +133,7 @@ class TestPlaylist(unittest.TestCase):
for track in tracks:
self.assertTrue(self.plist.contains(track))
track = trak.lookup(test_album / f"10 - Test Track 10.ogg", self.lib)
track = self.lib.add_track(f"10 - Test Track 10.ogg")
self.assertFalse(self.plist.contains(track))
def test_playlist_get_markup(self):
@ -158,7 +150,7 @@ class TestPlaylist(unittest.TestCase):
for i, track in enumerate(tracks):
self.assertEqual(self.plist.index(track), i)
track = trak.lookup(test_album / f"10 - Test Track 10.ogg", self.lib)
track = self.lib.add_track(f"10 - Test Track 10.ogg")
self.assertIsNone(self.plist.index(track))
self.assertIsNone(self.plist.index(None))
@ -168,7 +160,7 @@ class TestPlaylist(unittest.TestCase):
for i, track in enumerate(tracks):
self.assertEqual(self.plist.index(track), i)
track = trak.lookup(test_album / f"10 - Test Track 10.ogg", self.lib)
track = self.lib.add_track(f"10 - Test Track 10.ogg")
self.assertIsNone(self.plist.index(track))
self.assertIsNone(self.plist.index(None))

View File

@ -2,7 +2,6 @@
from . import playlist
from . import special
from .. import notify
from .. import trak
import os
import pathlib
import trackdb
@ -12,7 +11,7 @@ test_album = pathlib.Path("./trier/Test Library/Test Artist 01/Test Album 1")
class TestPreviousPlaylist(unittest.TestCase):
def setUp(self):
trak.reset()
trackdb.reset()
notify.register("add-track", self.on_add_track)
self.cb_plist = None
self.cb_track = None
@ -37,7 +36,7 @@ class TestPreviousPlaylist(unittest.TestCase):
def test_previous_getstate(self):
plist = special.PreviousPlaylist()
track = trak.lookup(test_album / "01 - Test Track 01.ogg", self.lib)
track = self.lib.add_track("01 - Test Track 01.ogg")
plist.add(track)
plist.current = 3
@ -52,9 +51,9 @@ class TestPreviousPlaylist(unittest.TestCase):
plist = special.PreviousPlaylist()
plist.visible = True
track1 = trak.lookup(test_album / "01 - Test Track 01.ogg", self.lib)
track2 = trak.lookup(test_album / "02 - Test Track 02.ogg", self.lib)
track3 = trak.lookup(test_album / "03 - Test Track 03.ogg", self.lib)
track1 = self.lib.add_track("01 - Test Track 01.ogg")
track2 = self.lib.add_track("02 - Test Track 02.ogg")
track3 = self.lib.add_track("03 - Test Track 03.ogg")
self.assertEqual(plist.current, -1)
self.assertEqual(plist.next(), None)

View File

@ -9,7 +9,6 @@ from . import special
from . import user
from .. import notify
from .. import threadqueue
from .. import trak
from .. import tree
import os
import random
@ -21,7 +20,7 @@ test_library = os.path.abspath("./trier/Test Library")
class TestPlaylistRoot(unittest.TestCase):
def setUp(self):
trak.reset()
trackdb.reset()
notify.register("next-track", self.on_next_track)
notify.register("playlist-changed", self.on_playlist_changed)

View File

@ -1,6 +1,5 @@
# Copyright 2019 (c) Anna Schumaker.
from .. import notify
from .. import trak
from . import special
import os
import pathlib
@ -11,7 +10,7 @@ test_album = pathlib.Path("./trier/Test Library/Test Artist 01/Test Album 1")
class TestUpNextPlaylist(unittest.TestCase):
def setUp(self):
trak.reset()
trackdb.reset()
notify.register("remove-track", self.on_remove)
self.cb_plist = None
self.cb_track = None
@ -29,9 +28,9 @@ class TestUpNextPlaylist(unittest.TestCase):
def add_tracks(self, plist):
tracks = [ ]
for i in range(1, 4,):
path = test_album / f"0{i} - Test Track 0{i}.ogg"
tracks.append(trak.lookup(path, self.lib))
plist.add(tracks[-1])
ret = self.lib.add_track(f"0{i} - Test Track 0{i}.ogg")
tracks.append(ret)
plist.add(ret)
return tracks
def test_up_next_playlist(self):

View File

@ -1,6 +1,5 @@
# Copyright 2019 (c) Anna Schumaker.
from . import user
from .. import trak
from .. import tree
import unittest

View File

@ -2,7 +2,6 @@
from . import data
from . import notify
from . import playlist
from . import trak
import os
import pathlib
import random
@ -16,7 +15,7 @@ test_library = pathlib.Path("./trier/Test Library")
class TestPlaylist(unittest.TestCase):
def setUp(self):
data.DataFile("playlists.pickle", data.WRITE).remove()
trak.reset()
trackdb.reset()
playlist.reset()
self.orig = playlist.Root
self.lib = trackdb.add_path(test_path)
@ -124,7 +123,7 @@ class TestPlaylist(unittest.TestCase):
def test_save_playlists(self):
dfile = data.DataFile("playlists.pickle", data.READ)
track = trak.lookup(test_album / "01 - Test Track.ogg", self.lib)
track = self.lib.add_track("01 - Test Track.ogg")
playlist.Root = None
playlist.Track = 1234

View File

@ -1,33 +0,0 @@
# Copyright 2019 (c) Anna Schumaker.
from . import data
from . import notify
from . import trak
from . import threadqueue
import os
import pathlib
import trackdb
import unittest
test_path = pathlib.Path("./trier")
test_library = pathlib.Path("./trier/Test Library")
test_tracks = pathlib.Path("./trier/Test Album")
class TestTags(unittest.TestCase):
def setUp(self):
notify.clear()
trak.reset()
self.new_track = None
self.lib = trackdb.add_path(test_path)
def on_new_track(self, track, lib):
self.new_track = track
def test_trak_lookup(self):
trackdb.library.TrackAdded.register(self.on_new_track)
path = test_tracks / "01 - Test Track.ogg"
track = trak.lookup(path, self.lib)
self.assertEqual(track.filepath, pathlib.Path(path))
self.assertEqual(self.new_track, track)
self.assertIsNone(trak.lookup(test_tracks / "test.txt", self.lib))

View File

@ -1,17 +0,0 @@
# Copyright 2019 (c) Anna Schumaker.
import pathlib
import trackdb
def lookup(path, lib):
try:
tid = len(lib.tracks)
ret = trackdb.track.Track(tid, pathlib.Path(path))
lib.tracks[tid] = ret
trackdb.library.TrackAdded.publish(ret, lib)
except Exception as e:
#print(e)
return None
return ret
def reset():
trackdb.reset()

View File

@ -11,8 +11,6 @@ import unittest
from gi.repository import Gtk, GObject, GLib
test_album = pathlib.Path("./trier/Test Library/Test Artist 02/")
test_album1 = test_album / "Test Album 1"
test_album2 = test_album / "Test Album 2"
class TestNodeTreeModel(unittest.TestCase):
def setUp(self):
@ -23,8 +21,8 @@ class TestNodeTreeModel(unittest.TestCase):
self.decade = curds.playlist.lookup("Decades")
self.genre = curds.playlist.lookup("Genres")
self.lib = trackdb.add_path(test_album)
curds.trak.lookup(test_album1 / "01 - Test Track 01.ogg", self.lib)
curds.trak.lookup(test_album2 / "01 - Test Track 01.ogg", self.lib)
self.lib.add_track("Test Album 1", "01 - Test Track 01.ogg")
self.lib.add_track("Test Album 2", "01 - Test Track 01.ogg")
def tearDown(self):
curds.notify.cancel("first-child", self.model.on_first_child)

View File

@ -32,7 +32,7 @@ class TestEmmental(unittest.TestCase):
def test_reset_stop_curds(self):
lib = trackdb.add_path(pathlib.Path("trier") / "Test Album")
path = os.path.join("trier", "Test Album", "01 - Test Track.ogg")
track = curds.trak.lookup(path, lib)
track = lib.add_track("01 - Test Track.ogg")
self.assertIsNotNone(track)
self.assertGreater(len(lib.tracks), 0)

View File

@ -33,7 +33,20 @@ class LibraryPath:
self.thread = None
self.lock = threading.Lock()
def __scan_remove(self):
def __add_track__(self, path):
global NextID
with IDLock as A, self.lock as B:
try:
trak = track.Track(NextID, path)
self.tracks[NextID] = trak
NextID += 1
except Exception as e:
return
TrackAdded.publish(trak, self)
return trak
def __scan_remove__(self):
with self.lock:
removed = [ (id, track) for (id, track) in self.tracks.items() if not track.filepath.exists() ]
for (id, track) in removed:
@ -42,22 +55,15 @@ class LibraryPath:
return set([ track.filepath for (id, track) in self.tracks.items() ])
def __do_scan__(self):
global NextID
track_set = self.__scan_remove()
track_set = self.__scan_remove__()
files = [ f for f in self.path.rglob("*") if f.is_file() and f not in track_set ]
for f in files:
with IDLock as A, self.lock as B:
try:
trak = track.Track(NextID, f)
self.tracks[NextID] = trak
NextID += 1
except Exception as e:
continue
TrackAdded.publish(trak, self)
self.__add_track__(f)
self.thread = None
def add_track(self, *components):
return self.__add_track__(self.path / pathlib.Path(*components))
def scan(self):
if not self.thread:
self.thread = threading.Thread(target = self.__do_scan__)