Rename trackdb -> tagdb
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
7a41c3b1a1
commit
f78402f258
|
@ -1,7 +1,7 @@
|
||||||
# Copyright 2021 (c) Anna Schumaker.
|
# Copyright 2021 (c) Anna Schumaker.
|
||||||
from lib import settings
|
from lib import settings
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
import trackdb
|
import tagdb
|
||||||
|
|
||||||
class Button(Gtk.MenuButton):
|
class Button(Gtk.MenuButton):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -13,7 +13,7 @@ class Button(Gtk.MenuButton):
|
||||||
|
|
||||||
self.pause = Gtk.Image.new_from_icon_name("media-playback-start")
|
self.pause = Gtk.Image.new_from_icon_name("media-playback-start")
|
||||||
self.counter = Gtk.Scale()
|
self.counter = Gtk.Scale()
|
||||||
self.counter.set_adjustment(trackdb.Stack.Counter)
|
self.counter.set_adjustment(tagdb.Stack.Counter)
|
||||||
self.counter.connect("value-changed", self.on_counter_changed)
|
self.counter.connect("value-changed", self.on_counter_changed)
|
||||||
self.counter.set_format_value_func(self.format_counter)
|
self.counter.set_format_value_func(self.format_counter)
|
||||||
self.counter.set_digits(0)
|
self.counter.set_digits(0)
|
||||||
|
|
|
@ -6,7 +6,7 @@ from . import seeker
|
||||||
from lib import publisher
|
from lib import publisher
|
||||||
from lib import settings
|
from lib import settings
|
||||||
from gi.repository import Gst, GLib
|
from gi.repository import Gst, GLib
|
||||||
import trackdb
|
import tagdb
|
||||||
|
|
||||||
class Player:
|
class Player:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -36,7 +36,7 @@ class Player:
|
||||||
GLib.timeout_add(250, self.update_progress)
|
GLib.timeout_add(250, self.update_progress)
|
||||||
|
|
||||||
self.TrackChanged = publisher.Publisher()
|
self.TrackChanged = publisher.Publisher()
|
||||||
self.track = trackdb.Tracks[settings.get_int("audio.trackid")]
|
self.track = tagdb.Tracks[settings.get_int("audio.trackid")]
|
||||||
self.load_set_state(self.track, Gst.State.PAUSED)
|
self.load_set_state(self.track, Gst.State.PAUSED)
|
||||||
if self.track:
|
if self.track:
|
||||||
self.track.add_to_playlist("Previous")
|
self.track.add_to_playlist("Previous")
|
||||||
|
@ -72,7 +72,7 @@ class Player:
|
||||||
if duration > 0 and (self.runtime() / duration) > (2 / 3):
|
if duration > 0 and (self.runtime() / duration) > (2 / 3):
|
||||||
self.track.played()
|
self.track.played()
|
||||||
|
|
||||||
(track, cont) = trackdb.Stack.next()
|
(track, cont) = tagdb.Stack.next()
|
||||||
state = Gst.State.PLAYING if cont else Gst.State.PAUSED
|
state = Gst.State.PLAYING if cont else Gst.State.PAUSED
|
||||||
self.load_set_state(track, state)
|
self.load_set_state(track, state)
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@ class Player:
|
||||||
return pos if res == True else 0
|
return pos if res == True else 0
|
||||||
|
|
||||||
def previous(self, *args):
|
def previous(self, *args):
|
||||||
self.play_track(trackdb.Stack.previous())
|
self.play_track(tagdb.Stack.previous())
|
||||||
|
|
||||||
def runtime(self):
|
def runtime(self):
|
||||||
if self.playbin.clock == None:
|
if self.playbin.clock == None:
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
from . import menu
|
from . import menu
|
||||||
from lib import settings
|
from lib import settings
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
import trackdb
|
import tagdb
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
class TestAudioMenu(unittest.TestCase):
|
class TestAudioMenu(unittest.TestCase):
|
||||||
|
@ -41,7 +41,7 @@ class TestAudioMenu(unittest.TestCase):
|
||||||
self.assertEqual(button.pause.get_icon_name(), "media-playback-start")
|
self.assertEqual(button.pause.get_icon_name(), "media-playback-start")
|
||||||
self.assertEqual(button.count.get_text(), " ")
|
self.assertEqual(button.count.get_text(), " ")
|
||||||
self.assertEqual(button.count.get_yalign(), 0)
|
self.assertEqual(button.count.get_yalign(), 0)
|
||||||
self.assertEqual(button.counter.get_adjustment(), trackdb.Stack.Counter)
|
self.assertEqual(button.counter.get_adjustment(), tagdb.Stack.Counter)
|
||||||
self.assertEqual(button.counter.get_digits(), 0)
|
self.assertEqual(button.counter.get_digits(), 0)
|
||||||
self.assertTrue(button.counter.get_draw_value())
|
self.assertTrue(button.counter.get_draw_value())
|
||||||
|
|
||||||
|
@ -57,11 +57,11 @@ class TestAudioMenu(unittest.TestCase):
|
||||||
self.assertEqual(button.format_counter(button.counter, 1), "Next Track")
|
self.assertEqual(button.format_counter(button.counter, 1), "Next Track")
|
||||||
self.assertEqual(button.format_counter(button.counter, 2), "2 Tracks")
|
self.assertEqual(button.format_counter(button.counter, 2), "2 Tracks")
|
||||||
|
|
||||||
trackdb.Stack.Counter.increment()
|
tagdb.Stack.Counter.increment()
|
||||||
self.assertEqual(button.pause.get_icon_name(), "media-playback-pause")
|
self.assertEqual(button.pause.get_icon_name(), "media-playback-pause")
|
||||||
self.assertEqual(button.count.get_text(), "0")
|
self.assertEqual(button.count.get_text(), "0")
|
||||||
|
|
||||||
trackdb.Stack.Counter.decrement()
|
tagdb.Stack.Counter.decrement()
|
||||||
self.assertEqual(button.pause.get_icon_name(), "media-playback-start")
|
self.assertEqual(button.pause.get_icon_name(), "media-playback-start")
|
||||||
self.assertEqual(button.count.get_text(), " ")
|
self.assertEqual(button.count.get_text(), " ")
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ from lib import publisher
|
||||||
from lib import settings
|
from lib import settings
|
||||||
from gi.repository import Gst
|
from gi.repository import Gst
|
||||||
import pathlib
|
import pathlib
|
||||||
import trackdb
|
import tagdb
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
test_album = pathlib.Path("./data/Test Album/")
|
test_album = pathlib.Path("./data/Test Album/")
|
||||||
|
@ -17,18 +17,18 @@ test_track = test_album / "01 - Test Track.ogg"
|
||||||
|
|
||||||
class TestPlayer(unittest.TestCase):
|
class TestPlayer(unittest.TestCase):
|
||||||
def setUpClass():
|
def setUpClass():
|
||||||
trackdb.reset()
|
tagdb.reset()
|
||||||
lib = trackdb.Library.add(test_album)
|
lib = tagdb.Library.add(test_album)
|
||||||
lib.scan().join()
|
lib.scan().join()
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.changed = None
|
self.changed = None
|
||||||
settings.reset()
|
settings.reset()
|
||||||
self.library = trackdb.Library.store[test_album]
|
self.library = tagdb.Library.store[test_album]
|
||||||
self.track = [ t for t in self.library.tracks if t.tracknumber == 1 ][0]
|
self.track = [ t for t in self.library.tracks if t.tracknumber == 1 ][0]
|
||||||
|
|
||||||
def tearDownClass():
|
def tearDownClass():
|
||||||
trackdb.reset()
|
tagdb.reset()
|
||||||
|
|
||||||
def on_track_changed(self, prev, new):
|
def on_track_changed(self, prev, new):
|
||||||
self.changed = (prev, new)
|
self.changed = (prev, new)
|
||||||
|
@ -63,10 +63,10 @@ class TestPlayer(unittest.TestCase):
|
||||||
self.assertEqual(self.changed, (None, self.track) )
|
self.assertEqual(self.changed, (None, self.track) )
|
||||||
self.assertFalse(play.play_track(self.track))
|
self.assertFalse(play.play_track(self.track))
|
||||||
|
|
||||||
trackdb.tags.User["Previous"].tracks.clear()
|
tagdb.tags.User["Previous"].tracks.clear()
|
||||||
play2 = player.Player()
|
play2 = player.Player()
|
||||||
self.assertEqual(play2.track, self.track)
|
self.assertEqual(play2.track, self.track)
|
||||||
self.assertIn(self.track, trackdb.tags.User["Previous"].tracks)
|
self.assertIn(self.track, tagdb.tags.User["Previous"].tracks)
|
||||||
|
|
||||||
def test_player_play_pause(self):
|
def test_player_play_pause(self):
|
||||||
play = player.Player()
|
play = player.Player()
|
||||||
|
@ -90,12 +90,12 @@ class TestPlayer(unittest.TestCase):
|
||||||
|
|
||||||
play.next()
|
play.next()
|
||||||
self.assertEqual(play.track.trackid, 0)
|
self.assertEqual(play.track.trackid, 0)
|
||||||
self.assertEqual(self.changed, (None, trackdb.Tracks[0]) )
|
self.assertEqual(self.changed, (None, tagdb.Tracks[0]) )
|
||||||
|
|
||||||
play.next()
|
play.next()
|
||||||
self.assertEqual(play.track.trackid, 1)
|
self.assertEqual(play.track.trackid, 1)
|
||||||
self.assertEqual(self.changed, (trackdb.Tracks[0], trackdb.Tracks[1]) )
|
self.assertEqual(self.changed, (tagdb.Tracks[0], tagdb.Tracks[1]) )
|
||||||
|
|
||||||
play.previous()
|
play.previous()
|
||||||
self.assertEqual(play.track.trackid, 0)
|
self.assertEqual(play.track.trackid, 0)
|
||||||
self.assertEqual(self.changed, (trackdb.Tracks[1], trackdb.Tracks[0]) )
|
self.assertEqual(self.changed, (tagdb.Tracks[1], tagdb.Tracks[0]) )
|
||||||
|
|
|
@ -5,9 +5,9 @@ gi.require_version('Gtk', '4.0')
|
||||||
gi.require_version('Gst', '1.0')
|
gi.require_version('Gst', '1.0')
|
||||||
|
|
||||||
import lib
|
import lib
|
||||||
import trackdb
|
import tagdb
|
||||||
lib.settings.load()
|
lib.settings.load()
|
||||||
trackdb.load()
|
tagdb.load()
|
||||||
|
|
||||||
import ui
|
import ui
|
||||||
ui.Application.run()
|
ui.Application.run()
|
||||||
|
|
|
@ -5,7 +5,7 @@ from . import model
|
||||||
from . import runtime
|
from . import runtime
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
import audio
|
import audio
|
||||||
import trackdb
|
import tagdb
|
||||||
|
|
||||||
Model = model.TagModel()
|
Model = model.TagModel()
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ def on_row_activate(view, position):
|
||||||
track = FilterModel.get_item(position)
|
track = FilterModel.get_item(position)
|
||||||
if audio.Player.play_track(track) == True:
|
if audio.Player.play_track(track) == True:
|
||||||
Model.tag.track_selected(track)
|
Model.tag.track_selected(track)
|
||||||
trackdb.save()
|
tagdb.save()
|
||||||
|
|
||||||
View = Gtk.ColumnView()
|
View = Gtk.ColumnView()
|
||||||
View.connect("activate", on_row_activate)
|
View.connect("activate", on_row_activate)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
from . import filter
|
from . import filter
|
||||||
from . import popover
|
from . import popover
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
import trackdb
|
import tagdb
|
||||||
|
|
||||||
class Controls(Gtk.Box):
|
class Controls(Gtk.Box):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -50,11 +50,11 @@ class Controls(Gtk.Box):
|
||||||
|
|
||||||
def random_toggled(self, toggle):
|
def random_toggled(self, toggle):
|
||||||
self.tag.random = toggle.get_active()
|
self.tag.random = toggle.get_active()
|
||||||
trackdb.save()
|
tagdb.save()
|
||||||
|
|
||||||
def loop_toggled(self, toggle):
|
def loop_toggled(self, toggle):
|
||||||
self.tag.loop = toggle.get_active()
|
self.tag.loop = toggle.get_active()
|
||||||
trackdb.save()
|
tagdb.save()
|
||||||
|
|
||||||
def search_changed(self, search):
|
def search_changed(self, search):
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Copyright 2021 (c) Anna Schumaker.
|
# Copyright 2021 (c) Anna Schumaker.
|
||||||
from gi.repository import Gtk, Gio, GObject
|
from gi.repository import Gtk, Gio, GObject
|
||||||
import trackdb
|
import tagdb
|
||||||
|
|
||||||
Exclude = [ "Collection", "New Tracks", "Previous" ]
|
Exclude = [ "Collection", "New Tracks", "Previous" ]
|
||||||
Icons = { "Favorites" : "emblem-favorites",
|
Icons = { "Favorites" : "emblem-favorites",
|
||||||
|
@ -32,7 +32,7 @@ class AddPopover(Gtk.Popover):
|
||||||
self.listbox.connect("row-activated", self.row_activated)
|
self.listbox.connect("row-activated", self.row_activated)
|
||||||
self.box.append(self.listbox)
|
self.box.append(self.listbox)
|
||||||
|
|
||||||
for tag in trackdb.tags.User.tags():
|
for tag in tagdb.tags.User.tags():
|
||||||
if tag.name not in Exclude:
|
if tag.name not in Exclude:
|
||||||
self.user_added(tag)
|
self.user_added(tag)
|
||||||
|
|
||||||
|
@ -42,8 +42,8 @@ class AddPopover(Gtk.Popover):
|
||||||
self.entry.connect("activate", self.entry_activate)
|
self.entry.connect("activate", self.entry_activate)
|
||||||
self.box.append(self.entry)
|
self.box.append(self.entry)
|
||||||
|
|
||||||
trackdb.tags.User.Added.register(self.user_added)
|
tagdb.tags.User.Added.register(self.user_added)
|
||||||
trackdb.tags.User.Removed.register(self.user_removed)
|
tagdb.tags.User.Removed.register(self.user_removed)
|
||||||
self.set_child(self.box)
|
self.set_child(self.box)
|
||||||
|
|
||||||
def do_add_selected(self, tag):
|
def do_add_selected(self, tag):
|
||||||
|
@ -55,14 +55,14 @@ class AddPopover(Gtk.Popover):
|
||||||
track = FilterModel.get_item(i)
|
track = FilterModel.get_item(i)
|
||||||
track.add_to_playlist(tag.name)
|
track.add_to_playlist(tag.name)
|
||||||
|
|
||||||
trackdb.save()
|
tagdb.save()
|
||||||
self.popdown()
|
self.popdown()
|
||||||
|
|
||||||
def row_activated(self, listbox, row):
|
def row_activated(self, listbox, row):
|
||||||
self.do_add_selected(row.tag)
|
self.do_add_selected(row.tag)
|
||||||
|
|
||||||
def entry_activate(self, entry):
|
def entry_activate(self, entry):
|
||||||
tag = trackdb.tags.User.add(entry.get_text())
|
tag = tagdb.tags.User.add(entry.get_text())
|
||||||
self.do_add_selected(tag)
|
self.do_add_selected(tag)
|
||||||
entry.set_text("")
|
entry.set_text("")
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ class AddPopover(Gtk.Popover):
|
||||||
self.listbox.append(AddPopoverRow(tag))
|
self.listbox.append(AddPopoverRow(tag))
|
||||||
|
|
||||||
def user_removed(self, tag):
|
def user_removed(self, tag):
|
||||||
for i in range(len(trackdb.tags.User)):
|
for i in range(len(tagdb.tags.User)):
|
||||||
row = self.listbox.get_row_at_index(i)
|
row = self.listbox.get_row_at_index(i)
|
||||||
if row is not None and row.tag == tag:
|
if row is not None and row.tag == tag:
|
||||||
self.listbox.remove(row)
|
self.listbox.remove(row)
|
||||||
|
|
|
@ -3,7 +3,7 @@ from . import controls
|
||||||
from . import filter
|
from . import filter
|
||||||
from . import popover
|
from . import popover
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
import trackdb
|
import tagdb
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
class TestPlaylistControls(unittest.TestCase):
|
class TestPlaylistControls(unittest.TestCase):
|
||||||
|
@ -35,8 +35,8 @@ class TestPlaylistControls(unittest.TestCase):
|
||||||
|
|
||||||
def test_playlist_controls_set_tag(self):
|
def test_playlist_controls_set_tag(self):
|
||||||
ctrl = controls.Controls()
|
ctrl = controls.Controls()
|
||||||
fav = trackdb.tags.User["Favorites"]
|
fav = tagdb.tags.User["Favorites"]
|
||||||
prev = trackdb.tags.User["Previous"]
|
prev = tagdb.tags.User["Previous"]
|
||||||
|
|
||||||
self.assertIsNone(ctrl.tag)
|
self.assertIsNone(ctrl.tag)
|
||||||
self.assertFalse(ctrl.random.get_sensitive())
|
self.assertFalse(ctrl.random.get_sensitive())
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
# Copyright 2021 (c) Anna Schumaker.
|
# Copyright 2021 (c) Anna Schumaker.
|
||||||
from . import popover
|
from . import popover
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
import trackdb
|
import tagdb
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
class TestAddPopover(unittest.TestCase):
|
class TestAddPopover(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
trackdb.reset()
|
tagdb.reset()
|
||||||
|
|
||||||
def test_add_popover_init(self):
|
def test_add_popover_init(self):
|
||||||
pop = popover.AddPopover()
|
pop = popover.AddPopover()
|
||||||
|
@ -25,7 +25,7 @@ class TestAddPopover(unittest.TestCase):
|
||||||
self.assertIn(pop.entry, pop.box)
|
self.assertIn(pop.entry, pop.box)
|
||||||
|
|
||||||
def test_add_popover_row(self):
|
def test_add_popover_row(self):
|
||||||
tag = trackdb.tags.User["Favorites"]
|
tag = tagdb.tags.User["Favorites"]
|
||||||
row = popover.AddPopoverRow(tag)
|
row = popover.AddPopoverRow(tag)
|
||||||
|
|
||||||
self.assertEqual(popover.Exclude,
|
self.assertEqual(popover.Exclude,
|
||||||
|
@ -48,7 +48,7 @@ class TestAddPopover(unittest.TestCase):
|
||||||
|
|
||||||
def test_add_popover_list(self):
|
def test_add_popover_list(self):
|
||||||
pop = popover.AddPopover()
|
pop = popover.AddPopover()
|
||||||
user = trackdb.tags.User
|
user = tagdb.tags.User
|
||||||
|
|
||||||
self.assertEqual(pop.listbox.get_row_at_index(0).tag, user["Favorites"])
|
self.assertEqual(pop.listbox.get_row_at_index(0).tag, user["Favorites"])
|
||||||
self.assertEqual(pop.listbox.get_row_at_index(1).tag, user["Up Next"])
|
self.assertEqual(pop.listbox.get_row_at_index(1).tag, user["Up Next"])
|
||||||
|
@ -70,7 +70,7 @@ class TestAddPopover(unittest.TestCase):
|
||||||
pop.entry.set_text("Test")
|
pop.entry.set_text("Test")
|
||||||
|
|
||||||
pop.entry_activate(pop.entry)
|
pop.entry_activate(pop.entry)
|
||||||
tag = trackdb.tags.User["Test"]
|
tag = tagdb.tags.User["Test"]
|
||||||
|
|
||||||
self.assertIsNotNone(tag)
|
self.assertIsNotNone(tag)
|
||||||
self.assertEqual(pop.entry.get_text(), "")
|
self.assertEqual(pop.entry.get_text(), "")
|
||||||
|
|
|
@ -6,7 +6,7 @@ from . import user
|
||||||
from lib import settings
|
from lib import settings
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
import audio
|
import audio
|
||||||
import trackdb
|
import tagdb
|
||||||
|
|
||||||
Switcher = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
|
Switcher = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
|
||||||
Stack = Gtk.Stack()
|
Stack = Gtk.Stack()
|
||||||
|
@ -34,7 +34,7 @@ def switch_page(toggle):
|
||||||
def on_tag_push_pop(old, new):
|
def on_tag_push_pop(old, new):
|
||||||
old.widgets.set_label()
|
old.widgets.set_label()
|
||||||
new.widgets.set_label()
|
new.widgets.set_label()
|
||||||
trackdb.Stack.PushPop.register(on_tag_push_pop)
|
tagdb.Stack.PushPop.register(on_tag_push_pop)
|
||||||
|
|
||||||
def add_stack_page(name, page):
|
def add_stack_page(name, page):
|
||||||
toggle = Gtk.ToggleButton()
|
toggle = Gtk.ToggleButton()
|
||||||
|
@ -51,11 +51,11 @@ def add_stack_page(name, page):
|
||||||
toggle.set_active(settings.get("sidebar.page") == name)
|
toggle.set_active(settings.get("sidebar.page") == name)
|
||||||
|
|
||||||
add_stack_page("Playlists", user.TagBox)
|
add_stack_page("Playlists", user.TagBox)
|
||||||
add_stack_page("Artists", tagbox.ParentTagBox(trackdb.tags.Artist, "avatar-default-symbolic",
|
add_stack_page("Artists", tagbox.ParentTagBox(tagdb.tags.Artist, "avatar-default-symbolic",
|
||||||
trackdb.tags.Album, "media-optical", header=True))
|
tagdb.tags.Album, "media-optical", header=True))
|
||||||
add_stack_page("Genres", tagbox.TagBox(trackdb.tags.Genre, "emblem-generic", header=True))
|
add_stack_page("Genres", tagbox.TagBox(tagdb.tags.Genre, "emblem-generic", header=True))
|
||||||
add_stack_page("Decades", tagbox.ParentTagBox(trackdb.tags.Decade, "x-office-calendar",
|
add_stack_page("Decades", tagbox.ParentTagBox(tagdb.tags.Decade, "x-office-calendar",
|
||||||
trackdb.tags.Year, "x-office-calendar-symbolic"))
|
tagdb.tags.Year, "x-office-calendar-symbolic"))
|
||||||
add_stack_page("Libraries", library.Box)
|
add_stack_page("Libraries", library.Box)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ from . import tagbox
|
||||||
from . import tagrow
|
from . import tagrow
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
import pathlib
|
import pathlib
|
||||||
import trackdb
|
import tagdb
|
||||||
|
|
||||||
|
|
||||||
class LibraryTagRow(tagrow.TagRow):
|
class LibraryTagRow(tagrow.TagRow):
|
||||||
|
@ -28,13 +28,13 @@ class LibraryTagRow(tagrow.TagRow):
|
||||||
self.tag.scan()
|
self.tag.scan()
|
||||||
|
|
||||||
def remove_clicked(self, button):
|
def remove_clicked(self, button):
|
||||||
trackdb.Library.remove(self.tag)
|
tagdb.Library.remove(self.tag)
|
||||||
|
|
||||||
|
|
||||||
class LibraryTagBox(tagbox.TagBox):
|
class LibraryTagBox(tagbox.TagBox):
|
||||||
def __alloc_tagrow__(self, tag):
|
def __alloc_tagrow__(self, tag):
|
||||||
return LibraryTagRow(tag, self.icon)
|
return LibraryTagRow(tag, self.icon)
|
||||||
TagBox = LibraryTagBox(trackdb.Library, "folder-music")
|
TagBox = LibraryTagBox(tagdb.Library, "folder-music")
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -55,7 +55,7 @@ def selected_path():
|
||||||
|
|
||||||
def on_select(button):
|
def on_select(button):
|
||||||
if (path := selected_path()) != None:
|
if (path := selected_path()) != None:
|
||||||
trackdb.Library.add(path).scan()
|
tagdb.Library.add(path).scan()
|
||||||
Popover.popdown()
|
Popover.popdown()
|
||||||
|
|
||||||
DirSelect = Gtk.Button.new_with_label("Select Folder")
|
DirSelect = Gtk.Button.new_with_label("Select Folder")
|
||||||
|
|
|
@ -3,7 +3,7 @@ from . import tagrow
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
import lib
|
import lib
|
||||||
import playlist
|
import playlist
|
||||||
import trackdb
|
import tagdb
|
||||||
|
|
||||||
class TagBox(Gtk.ScrolledWindow):
|
class TagBox(Gtk.ScrolledWindow):
|
||||||
def __init__(self, tagstore, icon, header=False):
|
def __init__(self, tagstore, icon, header=False):
|
||||||
|
@ -48,7 +48,7 @@ class TagBox(Gtk.ScrolledWindow):
|
||||||
cur.set_header(None)
|
cur.set_header(None)
|
||||||
|
|
||||||
def row_activated(self, listbox, row):
|
def row_activated(self, listbox, row):
|
||||||
trackdb.Stack.push(row.tag)
|
tagdb.Stack.push(row.tag)
|
||||||
|
|
||||||
def row_selected(self, listbox, row):
|
def row_selected(self, listbox, row):
|
||||||
playlist.Model.switch_tag(row.tag)
|
playlist.Model.switch_tag(row.tag)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Copyright 2021 (c) Anna Schumaker.
|
# Copyright 2021 (c) Anna Schumaker.
|
||||||
from gi.repository import Gtk, GLib, Pango
|
from gi.repository import Gtk, GLib, Pango
|
||||||
import trackdb
|
import tagdb
|
||||||
|
|
||||||
class TagRow(Gtk.ListBoxRow):
|
class TagRow(Gtk.ListBoxRow):
|
||||||
def __init__(self, tag, icon):
|
def __init__(self, tag, icon):
|
||||||
|
@ -24,7 +24,7 @@ class TagRow(Gtk.ListBoxRow):
|
||||||
|
|
||||||
def set_label(self):
|
def set_label(self):
|
||||||
count = len(self.tag)
|
count = len(self.tag)
|
||||||
bold = trackdb.Stack.current() == self.tag
|
bold = tagdb.Stack.current() == self.tag
|
||||||
text = f"{self.tag.name}\n{count} Track{'s' if count != 1 else ''}"
|
text = f"{self.tag.name}\n{count} Track{'s' if count != 1 else ''}"
|
||||||
self.label.set_markup(("<b>%s</b>" if bold else "%s") %
|
self.label.set_markup(("<b>%s</b>" if bold else "%s") %
|
||||||
GLib.markup_escape_text(text))
|
GLib.markup_escape_text(text))
|
||||||
|
|
|
@ -3,7 +3,7 @@ from . import library
|
||||||
from . import tagbox
|
from . import tagbox
|
||||||
from gi.repository import Gtk, Gio, GLib
|
from gi.repository import Gtk, Gio, GLib
|
||||||
import pathlib
|
import pathlib
|
||||||
import trackdb
|
import tagdb
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
main_context = GLib.main_context_default()
|
main_context = GLib.main_context_default()
|
||||||
|
@ -12,7 +12,7 @@ test_artist1 = test_library / "Test Artist 01"
|
||||||
|
|
||||||
class TestLibrarySidebar(unittest.TestCase):
|
class TestLibrarySidebar(unittest.TestCase):
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
trackdb.reset()
|
tagdb.reset()
|
||||||
library.TagBox.clear()
|
library.TagBox.clear()
|
||||||
|
|
||||||
def test_library_sidebar_init(self):
|
def test_library_sidebar_init(self):
|
||||||
|
@ -28,8 +28,8 @@ class TestLibrarySidebar(unittest.TestCase):
|
||||||
self.assertIn(library.Add, library.Box)
|
self.assertIn(library.Add, library.Box)
|
||||||
|
|
||||||
def test_library_sidebar_row(self):
|
def test_library_sidebar_row(self):
|
||||||
library.TagBox = library.LibraryTagBox(trackdb.Library, "folder-music")
|
library.TagBox = library.LibraryTagBox(tagdb.Library, "folder-music")
|
||||||
lib_tag = trackdb.Library.add(test_artist1)
|
lib_tag = tagdb.Library.add(test_artist1)
|
||||||
lib_tag.scan().join()
|
lib_tag.scan().join()
|
||||||
library.TagBox.bus.complete()
|
library.TagBox.bus.complete()
|
||||||
|
|
||||||
|
@ -95,5 +95,5 @@ class TestLibrarySidebar(unittest.TestCase):
|
||||||
|
|
||||||
library.on_select(library.DirSelect)
|
library.on_select(library.DirSelect)
|
||||||
self.assertFalse(library.Popover.is_visible())
|
self.assertFalse(library.Popover.is_visible())
|
||||||
self.assertIn(test_artist1, trackdb.Library.store)
|
self.assertIn(test_artist1, tagdb.Library.store)
|
||||||
trackdb.Library[test_artist1].scan.join()
|
tagdb.Library[test_artist1].scan.join()
|
||||||
|
|
|
@ -3,7 +3,7 @@ from . import tagbox
|
||||||
from . import tagrow
|
from . import tagrow
|
||||||
from . import user
|
from . import user
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
import trackdb
|
import tagdb
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
Expected = [ ("Collection", "media-playback-start", tagrow.TagRow),
|
Expected = [ ("Collection", "media-playback-start", tagrow.TagRow),
|
||||||
|
@ -25,7 +25,7 @@ class TestUserSidebar(unittest.TestCase):
|
||||||
self.assertEqual(user.Icons["Up Next"], "edit-redo")
|
self.assertEqual(user.Icons["Up Next"], "edit-redo")
|
||||||
|
|
||||||
def test_user_sidebar_row(self):
|
def test_user_sidebar_row(self):
|
||||||
tag = trackdb.tags.User.add("Test")
|
tag = tagdb.tags.User.add("Test")
|
||||||
row = user.UserTagRow(tag, "audio-x-generic")
|
row = user.UserTagRow(tag, "audio-x-generic")
|
||||||
|
|
||||||
self.assertIsInstance(row.remove, Gtk.Button)
|
self.assertIsInstance(row.remove, Gtk.Button)
|
||||||
|
@ -34,14 +34,14 @@ class TestUserSidebar(unittest.TestCase):
|
||||||
self.assertIn(row.remove, row.grid)
|
self.assertIn(row.remove, row.grid)
|
||||||
|
|
||||||
row.remove_tag(row.remove)
|
row.remove_tag(row.remove)
|
||||||
self.assertIsNone(trackdb.tags.User["Test"])
|
self.assertIsNone(tagdb.tags.User["Test"])
|
||||||
|
|
||||||
def test_user_sidebar(self):
|
def test_user_sidebar(self):
|
||||||
user.TagBox = user.UserTagBox(trackdb.tags.User, "audio-x-generic")
|
user.TagBox = user.UserTagBox(tagdb.tags.User, "audio-x-generic")
|
||||||
tag = trackdb.tags.User.add("Test")
|
tag = tagdb.tags.User.add("Test")
|
||||||
user.TagBox.bus.complete()
|
user.TagBox.bus.complete()
|
||||||
|
|
||||||
for (i, (tag, icon, type)) in enumerate(Expected):
|
for (i, (tag, icon, type)) in enumerate(Expected):
|
||||||
self.assertIsInstance(user.TagBox[i], type)
|
self.assertIsInstance(user.TagBox[i], type)
|
||||||
self.assertEqual(user.TagBox[i].tag, trackdb.tags.User[tag])
|
self.assertEqual(user.TagBox[i].tag, tagdb.tags.User[tag])
|
||||||
self.assertEqual(user.TagBox[i].image.get_icon_name(), icon)
|
self.assertEqual(user.TagBox[i].image.get_icon_name(), icon)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
from . import tagbox
|
from . import tagbox
|
||||||
from . import tagrow
|
from . import tagrow
|
||||||
from gi.repository import Gtk, Gdk
|
from gi.repository import Gtk, Gdk
|
||||||
import trackdb
|
import tagdb
|
||||||
|
|
||||||
Icons = { "Collection" : "media-playback-start",
|
Icons = { "Collection" : "media-playback-start",
|
||||||
"Favorites" : "emblem-favorites",
|
"Favorites" : "emblem-favorites",
|
||||||
|
@ -24,10 +24,10 @@ class UserTagRow(tagrow.TagRow):
|
||||||
|
|
||||||
def on_key_released(self, controller, keyval, keycode, state):
|
def on_key_released(self, controller, keyval, keycode, state):
|
||||||
if Gdk.keyval_name(keyval) == "Delete":
|
if Gdk.keyval_name(keyval) == "Delete":
|
||||||
trackdb.tags.User.remove(self.tag)
|
tagdb.tags.User.remove(self.tag)
|
||||||
|
|
||||||
def remove_tag(self, button):
|
def remove_tag(self, button):
|
||||||
trackdb.tags.User.remove(self.tag)
|
tagdb.tags.User.remove(self.tag)
|
||||||
|
|
||||||
|
|
||||||
class UserTagBox(tagbox.TagBox):
|
class UserTagBox(tagbox.TagBox):
|
||||||
|
@ -37,4 +37,4 @@ class UserTagBox(tagbox.TagBox):
|
||||||
return tagrow.TagRow(tag, Icons.get(tag.name, self.icon))
|
return tagrow.TagRow(tag, Icons.get(tag.name, self.icon))
|
||||||
|
|
||||||
|
|
||||||
TagBox = UserTagBox(trackdb.tags.User, "audio-x-generic")
|
TagBox = UserTagBox(tagdb.tags.User, "audio-x-generic")
|
||||||
|
|
|
@ -7,7 +7,7 @@ import lib
|
||||||
import pathlib
|
import pathlib
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
File = "trackdb.pickle"
|
File = "tagdb.pickle"
|
||||||
Bus = lib.bus.Bus(500)
|
Bus = lib.bus.Bus(500)
|
||||||
Tracks = allocator.TrackAllocator()
|
Tracks = allocator.TrackAllocator()
|
||||||
Stack = stack.TagStack()
|
Stack = stack.TagStack()
|
|
@ -0,0 +1,171 @@
|
||||||
|
# Copyright 2020 (c) Anna Schumaker.
|
||||||
|
import lib
|
||||||
|
import pathlib
|
||||||
|
import tagdb
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
test_tracks = pathlib.Path("./data/Test Album")
|
||||||
|
|
||||||
|
class TestLibraryTag(unittest.TestCase):
|
||||||
|
def tearDown(self):
|
||||||
|
tagdb.reset()
|
||||||
|
|
||||||
|
def test_library_tag_init(self):
|
||||||
|
library = tagdb.LibraryTag(test_tracks)
|
||||||
|
self.assertIsInstance(library, lib.tag.Tag)
|
||||||
|
self.assertIsInstance(library.clear, lib.thread.Thread)
|
||||||
|
self.assertIsInstance(library.scan, lib.thread.Thread)
|
||||||
|
|
||||||
|
def test_library_tag_state(self):
|
||||||
|
lib = tagdb.LibraryTag(test_tracks)
|
||||||
|
lib.scan().join()
|
||||||
|
|
||||||
|
state = lib.__getstate__()
|
||||||
|
self.assertEqual(set(state.keys()),
|
||||||
|
set([ "name", "sort", "current", "loop", "random", "tracks" ]))
|
||||||
|
self.assertEqual(state["name"], test_tracks)
|
||||||
|
self.assertEqual(state["tracks"], [ i for i in range(12) ])
|
||||||
|
|
||||||
|
lib.__dict__.clear()
|
||||||
|
lib.__setstate__(state)
|
||||||
|
lib.fix_tracks()
|
||||||
|
self.assertEqual(lib.name, test_tracks)
|
||||||
|
self.assertEqual(lib.tracks, [ tagdb.Tracks[i] for i in range(12) ])
|
||||||
|
self.assertEqual(lib.clear.func, lib.__do_clear__)
|
||||||
|
self.assertEqual(lib.scan.func, lib.__do_scan__)
|
||||||
|
|
||||||
|
def test_library_tag_scan(self):
|
||||||
|
lib = tagdb.LibraryTag(test_tracks)
|
||||||
|
lib.scan().join()
|
||||||
|
for i in range(12):
|
||||||
|
self.assertEqual(lib.tracks[i], tagdb.Tracks[i])
|
||||||
|
|
||||||
|
def test_library_tag_scan_new(self):
|
||||||
|
lib = tagdb.LibraryTag(test_tracks)
|
||||||
|
lib.scan().join()
|
||||||
|
for trak in [ tagdb.Tracks[0], tagdb.Tracks[11] ]:
|
||||||
|
lib.remove_track(trak)
|
||||||
|
tagdb.Tracks.remove(trak)
|
||||||
|
lib.scan().join()
|
||||||
|
self.assertEqual(len(lib.tracks), 12)
|
||||||
|
|
||||||
|
def test_library_tag_scan_remove(self):
|
||||||
|
lib = tagdb.LibraryTag(test_tracks)
|
||||||
|
lib.scan().join()
|
||||||
|
|
||||||
|
trak = tagdb.track.Track(tagdb.Tracks.nextid,
|
||||||
|
test_tracks / "01 - Test Track.ogg", lib)
|
||||||
|
trak.path = pathlib.Path("No Such File")
|
||||||
|
lib.tracks.append(trak)
|
||||||
|
tagdb.Tracks.tracks[trak.trackid] = trak
|
||||||
|
lib.scan().join()
|
||||||
|
self.assertNotIn(trak, lib.tracks)
|
||||||
|
|
||||||
|
def test_library_tag_clear(self):
|
||||||
|
lib = tagdb.LibraryTag(test_tracks)
|
||||||
|
lib.scan().join()
|
||||||
|
self.assertEqual(len(lib), 12)
|
||||||
|
|
||||||
|
lib.clear().join()
|
||||||
|
self.assertEqual(len(lib), 0)
|
||||||
|
self.assertEqual(len(tagdb.Tracks), 0)
|
||||||
|
|
||||||
|
|
||||||
|
class TestLibraryStore(unittest.TestCase):
|
||||||
|
def test_library_store(self):
|
||||||
|
store = tagdb.LibraryStore()
|
||||||
|
lib = store.add(test_tracks)
|
||||||
|
self.assertIsInstance(lib, tagdb.LibraryTag)
|
||||||
|
|
||||||
|
lib.scan().join()
|
||||||
|
self.assertEqual(len(lib), 12)
|
||||||
|
|
||||||
|
store.remove(lib)
|
||||||
|
lib.clear.join()
|
||||||
|
self.assertEqual(len(lib), 0)
|
||||||
|
|
||||||
|
|
||||||
|
class TestTrackDB(unittest.TestCase):
|
||||||
|
def tearDown(self):
|
||||||
|
tagdb.reset()
|
||||||
|
|
||||||
|
def test_tagdb_init(self):
|
||||||
|
self.assertIsInstance(tagdb.Bus, lib.bus.Bus)
|
||||||
|
self.assertIsInstance(tagdb.Tracks, tagdb.allocator.TrackAllocator)
|
||||||
|
self.assertIsInstance(tagdb.Stack, tagdb.stack.TagStack)
|
||||||
|
self.assertIsInstance(tagdb.Library, tagdb.LibraryStore)
|
||||||
|
|
||||||
|
self.assertEqual(tagdb.File, "tagdb.pickle")
|
||||||
|
self.assertEqual(tagdb.Bus.timeout, 500)
|
||||||
|
|
||||||
|
self.assertIn(tagdb.save, tagdb.Library.Added.subscribers)
|
||||||
|
self.assertIn(tagdb.save, tagdb.Library.Removed.subscribers)
|
||||||
|
self.assertIn(tagdb.save, tagdb.Tracks.Added.subscribers)
|
||||||
|
self.assertIn(tagdb.save, tagdb.Tracks.Removed.subscribers)
|
||||||
|
self.assertIn(tagdb.save, tagdb.Tracks.Updated.subscribers)
|
||||||
|
self.assertIn(tagdb.save, tagdb.tags.User.Added.subscribers)
|
||||||
|
self.assertIn(tagdb.save, tagdb.tags.User.Removed.subscribers)
|
||||||
|
self.assertIn(tagdb.save, tagdb.Stack.PushPop.subscribers)
|
||||||
|
self.assertIn(tagdb.save, tagdb.Stack.NextTrack.subscribers)
|
||||||
|
|
||||||
|
def test_tagdb_save_load(self):
|
||||||
|
db_file = lib.data.DataFile(tagdb.File, lib.data.READ)
|
||||||
|
library = tagdb.Library.add(test_tracks)
|
||||||
|
library.scan()
|
||||||
|
tagdb.Stack.push(library)
|
||||||
|
|
||||||
|
tagdb.save()
|
||||||
|
self.assertEqual(tagdb.Bus.passengers, [ (tagdb._do_save, ()) ])
|
||||||
|
self.assertFalse(db_file.exists())
|
||||||
|
|
||||||
|
library.scan.join()
|
||||||
|
tagdb.Bus.complete()
|
||||||
|
self.assertTrue(db_file.exists())
|
||||||
|
|
||||||
|
tagdb.tags.reset()
|
||||||
|
tagdb.Library.reset()
|
||||||
|
tagdb.Tracks.reset()
|
||||||
|
tagdb.Stack.reset()
|
||||||
|
tagdb.load()
|
||||||
|
|
||||||
|
self.assertEqual(len(tagdb.Tracks), 12)
|
||||||
|
self.assertEqual(len(tagdb.Library), 1)
|
||||||
|
self.assertEqual(len(tagdb.Library[test_tracks]), 12)
|
||||||
|
self.assertEqual(len(tagdb.tags.Artist), 3)
|
||||||
|
self.assertEqual(len(tagdb.tags.Album), 12)
|
||||||
|
self.assertEqual(len(tagdb.tags.Genre), 4)
|
||||||
|
self.assertEqual(len(tagdb.tags.Decade), 2)
|
||||||
|
self.assertEqual(len(tagdb.tags.Year), 2)
|
||||||
|
self.assertEqual(tagdb.Stack.tags, [ tagdb.Library[test_tracks] ])
|
||||||
|
|
||||||
|
self.assertIn(tagdb.save, tagdb.Library.Added.subscribers)
|
||||||
|
self.assertIn(tagdb.save, tagdb.Tracks.Added.subscribers)
|
||||||
|
self.assertIn(tagdb.save, tagdb.tags.User.Added.subscribers)
|
||||||
|
|
||||||
|
def test_tagdb_stress(self):
|
||||||
|
lib = tagdb.Library.add(pathlib.Path("./trier/Test Library/"))
|
||||||
|
lib.scan().join()
|
||||||
|
tagdb.Bus.complete()
|
||||||
|
|
||||||
|
tagdb.Library.remove(lib)
|
||||||
|
lib.clear.join()
|
||||||
|
tagdb.Bus.complete()
|
||||||
|
|
||||||
|
def test_tagdb_reset(self):
|
||||||
|
tagdb.Tracks.Added.register(1)
|
||||||
|
tagdb.Tracks.Removed.register(1)
|
||||||
|
tagdb.Tracks.Updated.register(1)
|
||||||
|
tagdb.Library.Added.register(1)
|
||||||
|
tagdb.Library.Removed.register(1)
|
||||||
|
tagdb.Library.store = { "a" : 1, "b" : 2, "c" : 3 }
|
||||||
|
with lib.data.DataFile(tagdb.File, lib.data.WRITE) as f:
|
||||||
|
f.pickle([ 0, [] ])
|
||||||
|
|
||||||
|
tagdb.reset()
|
||||||
|
self.assertEqual(len(tagdb.Library), 0)
|
||||||
|
self.assertIn(tagdb.save, tagdb.Tracks.Added.subscribers)
|
||||||
|
self.assertIn(tagdb.save, tagdb.Tracks.Removed.subscribers)
|
||||||
|
self.assertIn(tagdb.save, tagdb.Tracks.Updated.subscribers)
|
||||||
|
self.assertIn(tagdb.save, tagdb.Library.Added.subscribers)
|
||||||
|
self.assertIn(tagdb.save, tagdb.Library.Removed.subscribers)
|
||||||
|
self.assertFalse(lib.data.DataFile(tagdb.File, lib.data.READ).exists())
|
|
@ -1,171 +0,0 @@
|
||||||
# Copyright 2020 (c) Anna Schumaker.
|
|
||||||
import lib
|
|
||||||
import pathlib
|
|
||||||
import trackdb
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
test_tracks = pathlib.Path("./data/Test Album")
|
|
||||||
|
|
||||||
class TestLibraryTag(unittest.TestCase):
|
|
||||||
def tearDown(self):
|
|
||||||
trackdb.reset()
|
|
||||||
|
|
||||||
def test_library_tag_init(self):
|
|
||||||
library = trackdb.LibraryTag(test_tracks)
|
|
||||||
self.assertIsInstance(library, lib.tag.Tag)
|
|
||||||
self.assertIsInstance(library.clear, lib.thread.Thread)
|
|
||||||
self.assertIsInstance(library.scan, lib.thread.Thread)
|
|
||||||
|
|
||||||
def test_library_tag_state(self):
|
|
||||||
lib = trackdb.LibraryTag(test_tracks)
|
|
||||||
lib.scan().join()
|
|
||||||
|
|
||||||
state = lib.__getstate__()
|
|
||||||
self.assertEqual(set(state.keys()),
|
|
||||||
set([ "name", "sort", "current", "loop", "random", "tracks" ]))
|
|
||||||
self.assertEqual(state["name"], test_tracks)
|
|
||||||
self.assertEqual(state["tracks"], [ i for i in range(12) ])
|
|
||||||
|
|
||||||
lib.__dict__.clear()
|
|
||||||
lib.__setstate__(state)
|
|
||||||
lib.fix_tracks()
|
|
||||||
self.assertEqual(lib.name, test_tracks)
|
|
||||||
self.assertEqual(lib.tracks, [ trackdb.Tracks[i] for i in range(12) ])
|
|
||||||
self.assertEqual(lib.clear.func, lib.__do_clear__)
|
|
||||||
self.assertEqual(lib.scan.func, lib.__do_scan__)
|
|
||||||
|
|
||||||
def test_library_tag_scan(self):
|
|
||||||
lib = trackdb.LibraryTag(test_tracks)
|
|
||||||
lib.scan().join()
|
|
||||||
for i in range(12):
|
|
||||||
self.assertEqual(lib.tracks[i], trackdb.Tracks[i])
|
|
||||||
|
|
||||||
def test_library_tag_scan_new(self):
|
|
||||||
lib = trackdb.LibraryTag(test_tracks)
|
|
||||||
lib.scan().join()
|
|
||||||
for trak in [ trackdb.Tracks[0], trackdb.Tracks[11] ]:
|
|
||||||
lib.remove_track(trak)
|
|
||||||
trackdb.Tracks.remove(trak)
|
|
||||||
lib.scan().join()
|
|
||||||
self.assertEqual(len(lib.tracks), 12)
|
|
||||||
|
|
||||||
def test_library_tag_scan_remove(self):
|
|
||||||
lib = trackdb.LibraryTag(test_tracks)
|
|
||||||
lib.scan().join()
|
|
||||||
|
|
||||||
trak = trackdb.track.Track(trackdb.Tracks.nextid,
|
|
||||||
test_tracks / "01 - Test Track.ogg", lib)
|
|
||||||
trak.path = pathlib.Path("No Such File")
|
|
||||||
lib.tracks.append(trak)
|
|
||||||
trackdb.Tracks.tracks[trak.trackid] = trak
|
|
||||||
lib.scan().join()
|
|
||||||
self.assertNotIn(trak, lib.tracks)
|
|
||||||
|
|
||||||
def test_library_tag_clear(self):
|
|
||||||
lib = trackdb.LibraryTag(test_tracks)
|
|
||||||
lib.scan().join()
|
|
||||||
self.assertEqual(len(lib), 12)
|
|
||||||
|
|
||||||
lib.clear().join()
|
|
||||||
self.assertEqual(len(lib), 0)
|
|
||||||
self.assertEqual(len(trackdb.Tracks), 0)
|
|
||||||
|
|
||||||
|
|
||||||
class TestLibraryStore(unittest.TestCase):
|
|
||||||
def test_library_store(self):
|
|
||||||
store = trackdb.LibraryStore()
|
|
||||||
lib = store.add(test_tracks)
|
|
||||||
self.assertIsInstance(lib, trackdb.LibraryTag)
|
|
||||||
|
|
||||||
lib.scan().join()
|
|
||||||
self.assertEqual(len(lib), 12)
|
|
||||||
|
|
||||||
store.remove(lib)
|
|
||||||
lib.clear.join()
|
|
||||||
self.assertEqual(len(lib), 0)
|
|
||||||
|
|
||||||
|
|
||||||
class TestTrackDB(unittest.TestCase):
|
|
||||||
def tearDown(self):
|
|
||||||
trackdb.reset()
|
|
||||||
|
|
||||||
def test_trackdb_init(self):
|
|
||||||
self.assertIsInstance(trackdb.Bus, lib.bus.Bus)
|
|
||||||
self.assertIsInstance(trackdb.Tracks, trackdb.allocator.TrackAllocator)
|
|
||||||
self.assertIsInstance(trackdb.Stack, trackdb.stack.TagStack)
|
|
||||||
self.assertIsInstance(trackdb.Library, trackdb.LibraryStore)
|
|
||||||
|
|
||||||
self.assertEqual(trackdb.File, "trackdb.pickle")
|
|
||||||
self.assertEqual(trackdb.Bus.timeout, 500)
|
|
||||||
|
|
||||||
self.assertIn(trackdb.save, trackdb.Library.Added.subscribers)
|
|
||||||
self.assertIn(trackdb.save, trackdb.Library.Removed.subscribers)
|
|
||||||
self.assertIn(trackdb.save, trackdb.Tracks.Added.subscribers)
|
|
||||||
self.assertIn(trackdb.save, trackdb.Tracks.Removed.subscribers)
|
|
||||||
self.assertIn(trackdb.save, trackdb.Tracks.Updated.subscribers)
|
|
||||||
self.assertIn(trackdb.save, trackdb.tags.User.Added.subscribers)
|
|
||||||
self.assertIn(trackdb.save, trackdb.tags.User.Removed.subscribers)
|
|
||||||
self.assertIn(trackdb.save, trackdb.Stack.PushPop.subscribers)
|
|
||||||
self.assertIn(trackdb.save, trackdb.Stack.NextTrack.subscribers)
|
|
||||||
|
|
||||||
def test_trackdb_save_load(self):
|
|
||||||
db_file = lib.data.DataFile(trackdb.File, lib.data.READ)
|
|
||||||
library = trackdb.Library.add(test_tracks)
|
|
||||||
library.scan()
|
|
||||||
trackdb.Stack.push(library)
|
|
||||||
|
|
||||||
trackdb.save()
|
|
||||||
self.assertEqual(trackdb.Bus.passengers, [ (trackdb._do_save, ()) ])
|
|
||||||
self.assertFalse(db_file.exists())
|
|
||||||
|
|
||||||
library.scan.join()
|
|
||||||
trackdb.Bus.complete()
|
|
||||||
self.assertTrue(db_file.exists())
|
|
||||||
|
|
||||||
trackdb.tags.reset()
|
|
||||||
trackdb.Library.reset()
|
|
||||||
trackdb.Tracks.reset()
|
|
||||||
trackdb.Stack.reset()
|
|
||||||
trackdb.load()
|
|
||||||
|
|
||||||
self.assertEqual(len(trackdb.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)
|
|
||||||
self.assertEqual(len(trackdb.tags.Decade), 2)
|
|
||||||
self.assertEqual(len(trackdb.tags.Year), 2)
|
|
||||||
self.assertEqual(trackdb.Stack.tags, [ trackdb.Library[test_tracks] ])
|
|
||||||
|
|
||||||
self.assertIn(trackdb.save, trackdb.Library.Added.subscribers)
|
|
||||||
self.assertIn(trackdb.save, trackdb.Tracks.Added.subscribers)
|
|
||||||
self.assertIn(trackdb.save, trackdb.tags.User.Added.subscribers)
|
|
||||||
|
|
||||||
def test_trackdb_stress(self):
|
|
||||||
lib = trackdb.Library.add(pathlib.Path("./trier/Test Library/"))
|
|
||||||
lib.scan().join()
|
|
||||||
trackdb.Bus.complete()
|
|
||||||
|
|
||||||
trackdb.Library.remove(lib)
|
|
||||||
lib.clear.join()
|
|
||||||
trackdb.Bus.complete()
|
|
||||||
|
|
||||||
def test_trackdb_reset(self):
|
|
||||||
trackdb.Tracks.Added.register(1)
|
|
||||||
trackdb.Tracks.Removed.register(1)
|
|
||||||
trackdb.Tracks.Updated.register(1)
|
|
||||||
trackdb.Library.Added.register(1)
|
|
||||||
trackdb.Library.Removed.register(1)
|
|
||||||
trackdb.Library.store = { "a" : 1, "b" : 2, "c" : 3 }
|
|
||||||
with lib.data.DataFile(trackdb.File, lib.data.WRITE) as f:
|
|
||||||
f.pickle([ 0, [] ])
|
|
||||||
|
|
||||||
trackdb.reset()
|
|
||||||
self.assertEqual(len(trackdb.Library), 0)
|
|
||||||
self.assertIn(trackdb.save, trackdb.Tracks.Added.subscribers)
|
|
||||||
self.assertIn(trackdb.save, trackdb.Tracks.Removed.subscribers)
|
|
||||||
self.assertIn(trackdb.save, trackdb.Tracks.Updated.subscribers)
|
|
||||||
self.assertIn(trackdb.save, trackdb.Library.Added.subscribers)
|
|
||||||
self.assertIn(trackdb.save, trackdb.Library.Removed.subscribers)
|
|
||||||
self.assertFalse(lib.data.DataFile(trackdb.File, lib.data.READ).exists())
|
|
Loading…
Reference in New Issue