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.
|
||||
from lib import settings
|
||||
from gi.repository import Gtk
|
||||
import trackdb
|
||||
import tagdb
|
||||
|
||||
class Button(Gtk.MenuButton):
|
||||
def __init__(self):
|
||||
|
@ -13,7 +13,7 @@ class Button(Gtk.MenuButton):
|
|||
|
||||
self.pause = Gtk.Image.new_from_icon_name("media-playback-start")
|
||||
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.set_format_value_func(self.format_counter)
|
||||
self.counter.set_digits(0)
|
||||
|
|
|
@ -6,7 +6,7 @@ from . import seeker
|
|||
from lib import publisher
|
||||
from lib import settings
|
||||
from gi.repository import Gst, GLib
|
||||
import trackdb
|
||||
import tagdb
|
||||
|
||||
class Player:
|
||||
def __init__(self):
|
||||
|
@ -36,7 +36,7 @@ class Player:
|
|||
GLib.timeout_add(250, self.update_progress)
|
||||
|
||||
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)
|
||||
if self.track:
|
||||
self.track.add_to_playlist("Previous")
|
||||
|
@ -72,7 +72,7 @@ class Player:
|
|||
if duration > 0 and (self.runtime() / duration) > (2 / 3):
|
||||
self.track.played()
|
||||
|
||||
(track, cont) = trackdb.Stack.next()
|
||||
(track, cont) = tagdb.Stack.next()
|
||||
state = Gst.State.PLAYING if cont else Gst.State.PAUSED
|
||||
self.load_set_state(track, state)
|
||||
|
||||
|
@ -111,7 +111,7 @@ class Player:
|
|||
return pos if res == True else 0
|
||||
|
||||
def previous(self, *args):
|
||||
self.play_track(trackdb.Stack.previous())
|
||||
self.play_track(tagdb.Stack.previous())
|
||||
|
||||
def runtime(self):
|
||||
if self.playbin.clock == None:
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
from . import menu
|
||||
from lib import settings
|
||||
from gi.repository import Gtk
|
||||
import trackdb
|
||||
import tagdb
|
||||
import unittest
|
||||
|
||||
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.count.get_text(), " ")
|
||||
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.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, 2), "2 Tracks")
|
||||
|
||||
trackdb.Stack.Counter.increment()
|
||||
tagdb.Stack.Counter.increment()
|
||||
self.assertEqual(button.pause.get_icon_name(), "media-playback-pause")
|
||||
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.count.get_text(), " ")
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ from lib import publisher
|
|||
from lib import settings
|
||||
from gi.repository import Gst
|
||||
import pathlib
|
||||
import trackdb
|
||||
import tagdb
|
||||
import unittest
|
||||
|
||||
test_album = pathlib.Path("./data/Test Album/")
|
||||
|
@ -17,18 +17,18 @@ test_track = test_album / "01 - Test Track.ogg"
|
|||
|
||||
class TestPlayer(unittest.TestCase):
|
||||
def setUpClass():
|
||||
trackdb.reset()
|
||||
lib = trackdb.Library.add(test_album)
|
||||
tagdb.reset()
|
||||
lib = tagdb.Library.add(test_album)
|
||||
lib.scan().join()
|
||||
|
||||
def setUp(self):
|
||||
self.changed = None
|
||||
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]
|
||||
|
||||
def tearDownClass():
|
||||
trackdb.reset()
|
||||
tagdb.reset()
|
||||
|
||||
def on_track_changed(self, prev, new):
|
||||
self.changed = (prev, new)
|
||||
|
@ -63,10 +63,10 @@ class TestPlayer(unittest.TestCase):
|
|||
self.assertEqual(self.changed, (None, self.track) )
|
||||
self.assertFalse(play.play_track(self.track))
|
||||
|
||||
trackdb.tags.User["Previous"].tracks.clear()
|
||||
tagdb.tags.User["Previous"].tracks.clear()
|
||||
play2 = player.Player()
|
||||
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):
|
||||
play = player.Player()
|
||||
|
@ -90,12 +90,12 @@ class TestPlayer(unittest.TestCase):
|
|||
|
||||
play.next()
|
||||
self.assertEqual(play.track.trackid, 0)
|
||||
self.assertEqual(self.changed, (None, trackdb.Tracks[0]) )
|
||||
self.assertEqual(self.changed, (None, tagdb.Tracks[0]) )
|
||||
|
||||
play.next()
|
||||
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()
|
||||
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')
|
||||
|
||||
import lib
|
||||
import trackdb
|
||||
import tagdb
|
||||
lib.settings.load()
|
||||
trackdb.load()
|
||||
tagdb.load()
|
||||
|
||||
import ui
|
||||
ui.Application.run()
|
||||
|
|
|
@ -5,7 +5,7 @@ from . import model
|
|||
from . import runtime
|
||||
from gi.repository import Gtk
|
||||
import audio
|
||||
import trackdb
|
||||
import tagdb
|
||||
|
||||
Model = model.TagModel()
|
||||
|
||||
|
@ -24,7 +24,7 @@ def on_row_activate(view, position):
|
|||
track = FilterModel.get_item(position)
|
||||
if audio.Player.play_track(track) == True:
|
||||
Model.tag.track_selected(track)
|
||||
trackdb.save()
|
||||
tagdb.save()
|
||||
|
||||
View = Gtk.ColumnView()
|
||||
View.connect("activate", on_row_activate)
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
from . import filter
|
||||
from . import popover
|
||||
from gi.repository import Gtk
|
||||
import trackdb
|
||||
import tagdb
|
||||
|
||||
class Controls(Gtk.Box):
|
||||
def __init__(self):
|
||||
|
@ -50,11 +50,11 @@ class Controls(Gtk.Box):
|
|||
|
||||
def random_toggled(self, toggle):
|
||||
self.tag.random = toggle.get_active()
|
||||
trackdb.save()
|
||||
tagdb.save()
|
||||
|
||||
def loop_toggled(self, toggle):
|
||||
self.tag.loop = toggle.get_active()
|
||||
trackdb.save()
|
||||
tagdb.save()
|
||||
|
||||
def search_changed(self, search):
|
||||
try:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
from gi.repository import Gtk, Gio, GObject
|
||||
import trackdb
|
||||
import tagdb
|
||||
|
||||
Exclude = [ "Collection", "New Tracks", "Previous" ]
|
||||
Icons = { "Favorites" : "emblem-favorites",
|
||||
|
@ -32,7 +32,7 @@ class AddPopover(Gtk.Popover):
|
|||
self.listbox.connect("row-activated", self.row_activated)
|
||||
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:
|
||||
self.user_added(tag)
|
||||
|
||||
|
@ -42,8 +42,8 @@ class AddPopover(Gtk.Popover):
|
|||
self.entry.connect("activate", self.entry_activate)
|
||||
self.box.append(self.entry)
|
||||
|
||||
trackdb.tags.User.Added.register(self.user_added)
|
||||
trackdb.tags.User.Removed.register(self.user_removed)
|
||||
tagdb.tags.User.Added.register(self.user_added)
|
||||
tagdb.tags.User.Removed.register(self.user_removed)
|
||||
self.set_child(self.box)
|
||||
|
||||
def do_add_selected(self, tag):
|
||||
|
@ -55,14 +55,14 @@ class AddPopover(Gtk.Popover):
|
|||
track = FilterModel.get_item(i)
|
||||
track.add_to_playlist(tag.name)
|
||||
|
||||
trackdb.save()
|
||||
tagdb.save()
|
||||
self.popdown()
|
||||
|
||||
def row_activated(self, listbox, row):
|
||||
self.do_add_selected(row.tag)
|
||||
|
||||
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)
|
||||
entry.set_text("")
|
||||
|
||||
|
@ -77,7 +77,7 @@ class AddPopover(Gtk.Popover):
|
|||
self.listbox.append(AddPopoverRow(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)
|
||||
if row is not None and row.tag == tag:
|
||||
self.listbox.remove(row)
|
||||
|
|
|
@ -3,7 +3,7 @@ from . import controls
|
|||
from . import filter
|
||||
from . import popover
|
||||
from gi.repository import Gtk
|
||||
import trackdb
|
||||
import tagdb
|
||||
import unittest
|
||||
|
||||
class TestPlaylistControls(unittest.TestCase):
|
||||
|
@ -35,8 +35,8 @@ class TestPlaylistControls(unittest.TestCase):
|
|||
|
||||
def test_playlist_controls_set_tag(self):
|
||||
ctrl = controls.Controls()
|
||||
fav = trackdb.tags.User["Favorites"]
|
||||
prev = trackdb.tags.User["Previous"]
|
||||
fav = tagdb.tags.User["Favorites"]
|
||||
prev = tagdb.tags.User["Previous"]
|
||||
|
||||
self.assertIsNone(ctrl.tag)
|
||||
self.assertFalse(ctrl.random.get_sensitive())
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
from . import popover
|
||||
from gi.repository import Gtk
|
||||
import trackdb
|
||||
import tagdb
|
||||
import unittest
|
||||
|
||||
class TestAddPopover(unittest.TestCase):
|
||||
def setUp(self):
|
||||
trackdb.reset()
|
||||
tagdb.reset()
|
||||
|
||||
def test_add_popover_init(self):
|
||||
pop = popover.AddPopover()
|
||||
|
@ -25,7 +25,7 @@ class TestAddPopover(unittest.TestCase):
|
|||
self.assertIn(pop.entry, pop.box)
|
||||
|
||||
def test_add_popover_row(self):
|
||||
tag = trackdb.tags.User["Favorites"]
|
||||
tag = tagdb.tags.User["Favorites"]
|
||||
row = popover.AddPopoverRow(tag)
|
||||
|
||||
self.assertEqual(popover.Exclude,
|
||||
|
@ -48,7 +48,7 @@ class TestAddPopover(unittest.TestCase):
|
|||
|
||||
def test_add_popover_list(self):
|
||||
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(1).tag, user["Up Next"])
|
||||
|
@ -70,7 +70,7 @@ class TestAddPopover(unittest.TestCase):
|
|||
pop.entry.set_text("Test")
|
||||
|
||||
pop.entry_activate(pop.entry)
|
||||
tag = trackdb.tags.User["Test"]
|
||||
tag = tagdb.tags.User["Test"]
|
||||
|
||||
self.assertIsNotNone(tag)
|
||||
self.assertEqual(pop.entry.get_text(), "")
|
||||
|
|
|
@ -6,7 +6,7 @@ from . import user
|
|||
from lib import settings
|
||||
from gi.repository import Gtk
|
||||
import audio
|
||||
import trackdb
|
||||
import tagdb
|
||||
|
||||
Switcher = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
|
||||
Stack = Gtk.Stack()
|
||||
|
@ -34,7 +34,7 @@ def switch_page(toggle):
|
|||
def on_tag_push_pop(old, new):
|
||||
old.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):
|
||||
toggle = Gtk.ToggleButton()
|
||||
|
@ -51,11 +51,11 @@ def add_stack_page(name, page):
|
|||
toggle.set_active(settings.get("sidebar.page") == name)
|
||||
|
||||
add_stack_page("Playlists", user.TagBox)
|
||||
add_stack_page("Artists", tagbox.ParentTagBox(trackdb.tags.Artist, "avatar-default-symbolic",
|
||||
trackdb.tags.Album, "media-optical", header=True))
|
||||
add_stack_page("Genres", tagbox.TagBox(trackdb.tags.Genre, "emblem-generic", header=True))
|
||||
add_stack_page("Decades", tagbox.ParentTagBox(trackdb.tags.Decade, "x-office-calendar",
|
||||
trackdb.tags.Year, "x-office-calendar-symbolic"))
|
||||
add_stack_page("Artists", tagbox.ParentTagBox(tagdb.tags.Artist, "avatar-default-symbolic",
|
||||
tagdb.tags.Album, "media-optical", header=True))
|
||||
add_stack_page("Genres", tagbox.TagBox(tagdb.tags.Genre, "emblem-generic", header=True))
|
||||
add_stack_page("Decades", tagbox.ParentTagBox(tagdb.tags.Decade, "x-office-calendar",
|
||||
tagdb.tags.Year, "x-office-calendar-symbolic"))
|
||||
add_stack_page("Libraries", library.Box)
|
||||
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ from . import tagbox
|
|||
from . import tagrow
|
||||
from gi.repository import Gtk
|
||||
import pathlib
|
||||
import trackdb
|
||||
import tagdb
|
||||
|
||||
|
||||
class LibraryTagRow(tagrow.TagRow):
|
||||
|
@ -28,13 +28,13 @@ class LibraryTagRow(tagrow.TagRow):
|
|||
self.tag.scan()
|
||||
|
||||
def remove_clicked(self, button):
|
||||
trackdb.Library.remove(self.tag)
|
||||
tagdb.Library.remove(self.tag)
|
||||
|
||||
|
||||
class LibraryTagBox(tagbox.TagBox):
|
||||
def __alloc_tagrow__(self, tag):
|
||||
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):
|
||||
if (path := selected_path()) != None:
|
||||
trackdb.Library.add(path).scan()
|
||||
tagdb.Library.add(path).scan()
|
||||
Popover.popdown()
|
||||
|
||||
DirSelect = Gtk.Button.new_with_label("Select Folder")
|
||||
|
|
|
@ -3,7 +3,7 @@ from . import tagrow
|
|||
from gi.repository import Gtk
|
||||
import lib
|
||||
import playlist
|
||||
import trackdb
|
||||
import tagdb
|
||||
|
||||
class TagBox(Gtk.ScrolledWindow):
|
||||
def __init__(self, tagstore, icon, header=False):
|
||||
|
@ -48,7 +48,7 @@ class TagBox(Gtk.ScrolledWindow):
|
|||
cur.set_header(None)
|
||||
|
||||
def row_activated(self, listbox, row):
|
||||
trackdb.Stack.push(row.tag)
|
||||
tagdb.Stack.push(row.tag)
|
||||
|
||||
def row_selected(self, listbox, row):
|
||||
playlist.Model.switch_tag(row.tag)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
from gi.repository import Gtk, GLib, Pango
|
||||
import trackdb
|
||||
import tagdb
|
||||
|
||||
class TagRow(Gtk.ListBoxRow):
|
||||
def __init__(self, tag, icon):
|
||||
|
@ -24,7 +24,7 @@ class TagRow(Gtk.ListBoxRow):
|
|||
|
||||
def set_label(self):
|
||||
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 ''}"
|
||||
self.label.set_markup(("<b>%s</b>" if bold else "%s") %
|
||||
GLib.markup_escape_text(text))
|
||||
|
|
|
@ -3,7 +3,7 @@ from . import library
|
|||
from . import tagbox
|
||||
from gi.repository import Gtk, Gio, GLib
|
||||
import pathlib
|
||||
import trackdb
|
||||
import tagdb
|
||||
import unittest
|
||||
|
||||
main_context = GLib.main_context_default()
|
||||
|
@ -12,7 +12,7 @@ test_artist1 = test_library / "Test Artist 01"
|
|||
|
||||
class TestLibrarySidebar(unittest.TestCase):
|
||||
def tearDown(self):
|
||||
trackdb.reset()
|
||||
tagdb.reset()
|
||||
library.TagBox.clear()
|
||||
|
||||
def test_library_sidebar_init(self):
|
||||
|
@ -28,8 +28,8 @@ class TestLibrarySidebar(unittest.TestCase):
|
|||
self.assertIn(library.Add, library.Box)
|
||||
|
||||
def test_library_sidebar_row(self):
|
||||
library.TagBox = library.LibraryTagBox(trackdb.Library, "folder-music")
|
||||
lib_tag = trackdb.Library.add(test_artist1)
|
||||
library.TagBox = library.LibraryTagBox(tagdb.Library, "folder-music")
|
||||
lib_tag = tagdb.Library.add(test_artist1)
|
||||
lib_tag.scan().join()
|
||||
library.TagBox.bus.complete()
|
||||
|
||||
|
@ -95,5 +95,5 @@ class TestLibrarySidebar(unittest.TestCase):
|
|||
|
||||
library.on_select(library.DirSelect)
|
||||
self.assertFalse(library.Popover.is_visible())
|
||||
self.assertIn(test_artist1, trackdb.Library.store)
|
||||
trackdb.Library[test_artist1].scan.join()
|
||||
self.assertIn(test_artist1, tagdb.Library.store)
|
||||
tagdb.Library[test_artist1].scan.join()
|
||||
|
|
|
@ -3,7 +3,7 @@ from . import tagbox
|
|||
from . import tagrow
|
||||
from . import user
|
||||
from gi.repository import Gtk
|
||||
import trackdb
|
||||
import tagdb
|
||||
import unittest
|
||||
|
||||
Expected = [ ("Collection", "media-playback-start", tagrow.TagRow),
|
||||
|
@ -25,7 +25,7 @@ class TestUserSidebar(unittest.TestCase):
|
|||
self.assertEqual(user.Icons["Up Next"], "edit-redo")
|
||||
|
||||
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")
|
||||
|
||||
self.assertIsInstance(row.remove, Gtk.Button)
|
||||
|
@ -34,14 +34,14 @@ class TestUserSidebar(unittest.TestCase):
|
|||
self.assertIn(row.remove, row.grid)
|
||||
|
||||
row.remove_tag(row.remove)
|
||||
self.assertIsNone(trackdb.tags.User["Test"])
|
||||
self.assertIsNone(tagdb.tags.User["Test"])
|
||||
|
||||
def test_user_sidebar(self):
|
||||
user.TagBox = user.UserTagBox(trackdb.tags.User, "audio-x-generic")
|
||||
tag = trackdb.tags.User.add("Test")
|
||||
user.TagBox = user.UserTagBox(tagdb.tags.User, "audio-x-generic")
|
||||
tag = tagdb.tags.User.add("Test")
|
||||
user.TagBox.bus.complete()
|
||||
|
||||
for (i, (tag, icon, type)) in enumerate(Expected):
|
||||
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)
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
from . import tagbox
|
||||
from . import tagrow
|
||||
from gi.repository import Gtk, Gdk
|
||||
import trackdb
|
||||
import tagdb
|
||||
|
||||
Icons = { "Collection" : "media-playback-start",
|
||||
"Favorites" : "emblem-favorites",
|
||||
|
@ -24,10 +24,10 @@ class UserTagRow(tagrow.TagRow):
|
|||
|
||||
def on_key_released(self, controller, keyval, keycode, state):
|
||||
if Gdk.keyval_name(keyval) == "Delete":
|
||||
trackdb.tags.User.remove(self.tag)
|
||||
tagdb.tags.User.remove(self.tag)
|
||||
|
||||
def remove_tag(self, button):
|
||||
trackdb.tags.User.remove(self.tag)
|
||||
tagdb.tags.User.remove(self.tag)
|
||||
|
||||
|
||||
class UserTagBox(tagbox.TagBox):
|
||||
|
@ -37,4 +37,4 @@ class UserTagBox(tagbox.TagBox):
|
|||
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 threading
|
||||
|
||||
File = "trackdb.pickle"
|
||||
File = "tagdb.pickle"
|
||||
Bus = lib.bus.Bus(500)
|
||||
Tracks = allocator.TrackAllocator()
|
||||
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