diff --git a/audio/artwork.py b/audio/artwork.py index 564bad2..3114630 100644 --- a/audio/artwork.py +++ b/audio/artwork.py @@ -22,7 +22,7 @@ class Artwork(Gtk.AspectFrame): self.on_track_changed(player, None, player.track) def __set_from_cover_jpg__(self, track): - cover = track.filepath().parent / "cover.jpg" + cover = track.path.parent / "cover.jpg" if cover.exists(): self.picture.set_filename(str(cover)) return True diff --git a/audio/nowplaying.py b/audio/nowplaying.py index 8f7e667..4f20c90 100644 --- a/audio/nowplaying.py +++ b/audio/nowplaying.py @@ -22,7 +22,7 @@ class TrackArtist(Gtk.Label): self.add_css_class("subtitle") def on_track_changed(self, player, old, new): - text = f"by {new.artist}" if new else "The Cheesy Music Player" + text = f"by {new.artist.name}" if new else "The Cheesy Music Player" self.set_markup(f"{GLib.markup_escape_text(text)}") diff --git a/audio/player.py b/audio/player.py index 57e3c14..d7d9bc7 100644 --- a/audio/player.py +++ b/audio/player.py @@ -1,53 +1,52 @@ # Copyright 2021 (c) Anna Schumaker. import db import lib -import tagdb from gi.repository import GObject from . import bass from . import scale -from . import selector class Player(bass.BassPlayer): def __init__(self): bass.BassPlayer.__init__(self) self.Autopause = scale.AutoPauseScale() - self.Selector = selector.TagdbSelector() self.playlist = None self.track = None self.set_playlist(db.find_playlist(lib.settings.get_int("audio.plstateid"))) - self.change_track(tagdb.Tracks[lib.settings.get_int("audio.trackid")]) - if self.track: - self.track.add_to_playlist("Previous") + self.change_track(db.track.Table.get(lib.settings.get_int("audio.trackid"))) - def change_track(self, track, reset=False): + def change_track(self, track, reset=False, add_prev=True): if self.track and self.play_percent > (2 / 3): self.track.played() if reset: self.uri = None self.emit("track-changed", self.track, track) + if track and add_prev: + db.user.Table.find("Previous").add_track(track) def do_about_to_finish(self): if self.Autopause.get_value() != 0: self.Autopause.decrement() - self.change_track(self.Selector.next()) + self.change_track(self.playlist.next_track()) def do_eos(self): self.Autopause.decrement() - self.change_track(self.Selector.next()) + self.change_track(self.playlist.next_track()) self.playing = self.Autopause.keep_playing def play(self): self.playing = True def pause(self): self.playing = False def playpause(self): self.playing = not self.playing - def play_track(self, track): - self.change_track(track, reset=True) + def play_track(self, track, add_prev=True): + self.change_track(track, reset=True, add_prev=add_prev) self.play() - def next(self): self.play_track(self.Selector.next()) - def previous(self): self.play_track(self.Selector.previous()) + def next(self): self.play_track(self.playlist.next_track()) + def previous(self): + previous = db.user.Table.find("Previous") + self.play_track(previous.previous_track(), add_prev=False) def set_playlist(self, plist): if plist is None: @@ -55,12 +54,12 @@ class Player(bass.BassPlayer): if plist != self.playlist: self.emit("playlist-changed", self.playlist, plist) - @GObject.Signal(arg_types=(tagdb.track.Track, tagdb.track.Track)) + @GObject.Signal(arg_types=(db.track.Track, db.track.Track)) def track_changed(self, prev, new): self.track = new if self.track: - lib.settings.set("audio.trackid", new.trackid) - self.uri = new.filepath().absolute().as_uri() + lib.settings.set("audio.trackid", new.rowid) + self.uri = new.path.absolute().as_uri() @GObject.Signal(arg_types=(db.playlist.Playlist, db.playlist.Playlist)) def playlist_changed(self, prev, new): diff --git a/audio/test_audio.py b/audio/test_audio.py index cc82069..5221d1c 100644 --- a/audio/test_audio.py +++ b/audio/test_audio.py @@ -1,20 +1,20 @@ # Copyright 2021 (c) Anna Schumaker. import audio +import db import pathlib -import tagdb import unittest from gi.repository import Gtk test_album = pathlib.Path("./data/Test Album/") +test_track = test_album / "01 - Test Track.ogg" class TestAudio(unittest.TestCase): def test_init(self): self.assertIsInstance(audio.Player, audio.player.Player) def test_play_track(self): - lib = tagdb.Library.add(test_album) - lib.scan().join() - track = [ t for t in lib.tracks if t.tracknumber == 1 ][0] + db.reset() + track = db.make_fake_track(1, 10, "Test Track", test_track, test_album) self.assertTrue(audio.play_track(track)) self.assertTrue(audio.Player.playing) diff --git a/audio/test_nowplaying.py b/audio/test_nowplaying.py index d130e40..a827f4e 100644 --- a/audio/test_nowplaying.py +++ b/audio/test_nowplaying.py @@ -1,14 +1,19 @@ # Copyright 2021 (c) Anna Schumaker. +import db import unittest from gi.repository import GObject from gi.repository import Gtk from . import nowplaying +class FakeArtist(GObject.GObject): + def __init__(self): + self.name = "Test Artist" + class FakeTrack(GObject.GObject): def __init__(self): GObject.GObject.__init__(self) self.title = "Test Title" - self.artist = "Test Artist" + self.artist = FakeArtist() class FakePlayer(GObject.GObject): def __init__(self): diff --git a/audio/test_player.py b/audio/test_player.py index 4bb1d01..47c8580 100644 --- a/audio/test_player.py +++ b/audio/test_player.py @@ -2,14 +2,13 @@ import db import lib import pathlib -import tagdb +import scanner import unittest from gi.repository import GLib from gi.repository import Gst from . import bass from . import player from . import scale -from . import selector main_context = GLib.main_context_default() test_album = pathlib.Path("./data/Test Album/") @@ -17,38 +16,18 @@ test_track = test_album / "01 - Test Track.ogg" test_uri = test_track.absolute().as_uri() -class FakeSelector(selector.Selector): - def __init__(self, library): - selector.Selector.__init__(self) - t1 = [ t for t in library.tracks if t.tracknumber == 1 ][0] - t2 = [ t for t in library.tracks if t.tracknumber == 11 ][0] - self.tracks = [ t1, t2 ] - self.cur = -1 - - def next(self): - self.cur += 1 - return self.tracks[self.cur] - - def previous(self): - self.cur -= 1 - return self.tracks[self.cur] - - - class TestPlayer(unittest.TestCase): def setUpClass(): - tagdb.reset() - lib = tagdb.Library.add(test_album) - lib.scan().join() + db.reset() + lib = db.library.Table.find(test_album) + scanner.Queue.push(scanner.task.DirectoryTask(lib, test_album)) + while scanner.Queue.run() == GLib.SOURCE_CONTINUE: pass def setUp(self): self.changed = None lib.settings.reset() - self.library = tagdb.Library.store[test_album] - self.track = [ t for t in self.library.tracks if t.tracknumber == 1 ][0] - - def tearDownClass(): - tagdb.reset() + self.library = db.library.Table.lookup(test_album) + self.track = db.track.Table.lookup(test_track) def on_track_changed(self, player, prev, new): self.changed = (prev, new) @@ -56,12 +35,11 @@ class TestPlayer(unittest.TestCase): def on_playlist_changed(self, player, prev, new): self.changed = (prev, new) - def test_player_init(self): + def test_init(self): play = player.Player() self.assertIsInstance(play, bass.BassPlayer) self.assertIsInstance(play.bus, Gst.Bus) self.assertIsInstance(play.Autopause, scale.AutoPauseScale) - self.assertIsInstance(play.Selector, selector.Selector) self.assertIsNone(play.track) self.assertEqual(play.playlist, db.user.Table.find("Collection")) @@ -106,13 +84,13 @@ class TestPlayer(unittest.TestCase): play.change_track(self.track, reset=True) self.assertEqual(play.track, self.track) - self.assertEqual(lib.settings.get_int("audio.trackid"), self.track.trackid) + self.assertEqual(lib.settings.get_int("audio.trackid"), self.track.rowid) self.assertEqual(self.changed, (None, self.track) ) - tagdb.tags.User["Previous"].tracks.clear() + db.sql.execute("DELETE FROM temp_playlist_map") play2 = player.Player() self.assertEqual(play2.track, self.track) - self.assertIn(self.track, tagdb.tags.User["Previous"].tracks) + self.assertEqual(db.user.Table.find("Previous").get_track(0), self.track) def test_play_track(self): play = player.Player() @@ -121,7 +99,7 @@ class TestPlayer(unittest.TestCase): self.assertTrue(play.playing) play.pause() - def test_player_play_pause(self): + def test_play_pause(self): play = player.Player() play.play_track(self.track) @@ -142,20 +120,23 @@ class TestPlayer(unittest.TestCase): play.pause() self.assertFalse(play.playing) - def test_player_next_previous(self): - select = FakeSelector(self.library) + def test_next_previous(self): + collection = db.user.Table.find("Collection") play = player.Player() + play.set_playlist(collection) play.connect("track-changed", self.on_track_changed) - play.Selector = select + + track0 = collection.get_track(0) + track1 = collection.get_track(1) play.next() - self.assertEqual(play.track.trackid, 1) - self.assertEqual(self.changed, (None, tagdb.Tracks[1]) ) + self.assertEqual(play.track, track0) + self.assertEqual(self.changed, (None, track0)) play.next() - self.assertEqual(play.track.trackid, 11) - self.assertEqual(self.changed, (tagdb.Tracks[1], tagdb.Tracks[11]) ) + self.assertEqual(play.track, track1) + self.assertEqual(self.changed, (track0, track1)) play.previous() - self.assertEqual(play.track.trackid, 1) - self.assertEqual(self.changed, (tagdb.Tracks[11], tagdb.Tracks[1]) ) + self.assertEqual(play.track, track0) + self.assertEqual(self.changed, (track1, track0))