Rename trackdb -> tagdb

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-07-26 11:15:15 -04:00
parent 7a41c3b1a1
commit f78402f258
30 changed files with 245 additions and 245 deletions

View File

@ -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)

View File

@ -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:

View File

@ -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(), " ")

View File

@ -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]) )

View File

@ -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()

View File

@ -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)

View File

@ -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:

View File

@ -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)

View File

@ -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())

View File

@ -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(), "")

View File

@ -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)

View File

@ -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")

View File

@ -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)

View File

@ -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))

View File

@ -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()

View File

@ -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)

View File

@ -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")

View File

@ -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()

171
tagdb/test_tagdb.py Normal file
View File

@ -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())

View File

@ -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())