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:
parent
15059db59a
commit
289420e504
|
@ -1,4 +1,5 @@
|
||||||
# Copyright 2021 (c) Anna Schumaker.
|
# Copyright 2021 (c) Anna Schumaker.
|
||||||
|
import audio
|
||||||
import db
|
import db
|
||||||
import lib
|
import lib
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
|
@ -62,6 +63,29 @@ class SortButton(Gtk.MenuButton):
|
||||||
self.set_sensitive(plist != db.user.Table.find("Previous"))
|
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):
|
class JumpButton(Gtk.Button):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
Gtk.Button.__init__(self)
|
Gtk.Button.__init__(self)
|
||||||
|
@ -88,6 +112,7 @@ class ControlBox(Gtk.Box):
|
||||||
class TrackBox(ControlBox):
|
class TrackBox(ControlBox):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
ControlBox.__init__(self)
|
ControlBox.__init__(self)
|
||||||
|
self.append(FavoriteButton())
|
||||||
self.append(JumpButton())
|
self.append(JumpButton())
|
||||||
|
|
||||||
def get_jump_button(self):
|
def get_jump_button(self):
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
# Copyright 2021 (c) Anna Schumaker.
|
# Copyright 2021 (c) Anna Schumaker.
|
||||||
|
import audio
|
||||||
import db
|
import db
|
||||||
import lib
|
import lib
|
||||||
import unittest
|
import unittest
|
||||||
|
@ -113,6 +114,52 @@ class TestSortButton(unittest.TestCase):
|
||||||
self.assertTrue(sort.get_sensitive())
|
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):
|
class TestJumpButton(unittest.TestCase):
|
||||||
def test_init(self):
|
def test_init(self):
|
||||||
jump = header.JumpButton()
|
jump = header.JumpButton()
|
||||||
|
@ -148,6 +195,9 @@ class TestTrackBox(unittest.TestCase):
|
||||||
box = header.TrackBox()
|
box = header.TrackBox()
|
||||||
|
|
||||||
child = box.get_first_child()
|
child = box.get_first_child()
|
||||||
|
self.assertIsInstance(child, header.FavoriteButton)
|
||||||
|
|
||||||
|
child = child.get_next_sibling()
|
||||||
self.assertIsInstance(child, header.JumpButton)
|
self.assertIsInstance(child, header.JumpButton)
|
||||||
self.assertEqual(box.get_jump_button(), child)
|
self.assertEqual(box.get_jump_button(), child)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue