playlist: Add a Favorite toggle button

For adding / removing the currently playing track from the Favorites
playlist

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-12-28 15:48:06 -05:00
parent 15059db59a
commit 289420e504
2 changed files with 75 additions and 0 deletions

View File

@ -1,4 +1,5 @@
# Copyright 2021 (c) Anna Schumaker.
import audio
import db
import lib
from gi.repository import Gtk
@ -62,6 +63,29 @@ class SortButton(Gtk.MenuButton):
self.set_sensitive(plist != db.user.Table.find("Previous"))
class FavoriteButton(Gtk.ToggleButton):
def __init__(self):
Gtk.ToggleButton.__init__(self)
self.set_icon_name("emmental-favorites")
self.track_changed(audio.Player, None, audio.Player.track)
audio.Player.connect("track-changed", self.track_changed)
def set_playlist(self, plist):
pass
def track_changed(self, player, old, new):
self.set_sensitive(new != None)
self.set_active(new in db.user.Table.find("Favorites").get_tracks())
def do_toggled(self):
if audio.Player.track:
fav = db.user.Table.find("Favorites")
if self.get_active():
fav.add_track(audio.Player.track)
else:
fav.remove_track(audio.Player.track)
class JumpButton(Gtk.Button):
def __init__(self):
Gtk.Button.__init__(self)
@ -88,6 +112,7 @@ class ControlBox(Gtk.Box):
class TrackBox(ControlBox):
def __init__(self):
ControlBox.__init__(self)
self.append(FavoriteButton())
self.append(JumpButton())
def get_jump_button(self):

View File

@ -1,4 +1,5 @@
# Copyright 2021 (c) Anna Schumaker.
import audio
import db
import lib
import unittest
@ -113,6 +114,52 @@ class TestSortButton(unittest.TestCase):
self.assertTrue(sort.get_sensitive())
class TestFavoriteButton(unittest.TestCase):
def setUp(self):
db.reset()
audio.Player.track = None
def test_init(self):
fav = header.FavoriteButton()
self.assertIsInstance(fav, Gtk.ToggleButton)
self.assertEqual(fav.get_icon_name(), "emmental-favorites")
self.assertFalse(fav.get_sensitive())
def test_sensitive(self):
track = db.make_fake_track(1, 1, "Test Track", "/a/b/c/1.ogg")
fav = header.FavoriteButton()
fav.track_changed(audio.Player, None, track)
self.assertTrue(fav.get_sensitive())
fav.track_changed(audio.Player, None, None)
self.assertFalse(fav.get_sensitive())
def test_active(self):
fav = header.FavoriteButton()
t1 = db.make_fake_track(1, 1, "Test Track 1", "/a/b/c/1.ogg")
t2 = db.make_fake_track(2, 2, "Test Track 2", "/a/b/c/2.ogg")
db.user.Table.find("Favorites").add_track(t1)
fav.track_changed(audio.Player, None, t1)
self.assertTrue(fav.get_active())
fav.track_changed(audio.Player, t1, t2)
self.assertFalse(fav.get_active())
def test_toggle(self):
track = db.make_fake_track(1, 1, "Test Track", "/a/b/c/1.ogg")
fav = header.FavoriteButton()
fav.set_active(True)
self.assertEqual(db.user.Table.find("Favorites").get_n_tracks(), 0)
fav.set_active(False)
audio.Player.track = track
self.assertNotIn(track, db.user.Table.find("Favorites").get_tracks())
fav.set_active(True)
self.assertIn(track, db.user.Table.find("Favorites").get_tracks())
fav.set_active(False)
self.assertNotIn(track, db.user.Table.find("Favorites").get_tracks())
class TestJumpButton(unittest.TestCase):
def test_init(self):
jump = header.JumpButton()
@ -148,6 +195,9 @@ class TestTrackBox(unittest.TestCase):
box = header.TrackBox()
child = box.get_first_child()
self.assertIsInstance(child, header.FavoriteButton)
child = child.get_next_sibling()
self.assertIsInstance(child, header.JumpButton)
self.assertEqual(box.get_jump_button(), child)