sidebar: Add the Artist section to the sidebar
I make sure to save the "show-all" property to the settings so it can be preserved across sessions. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
2f239bd94d
commit
c396839316
|
@ -97,7 +97,10 @@ class Application(Adw.Application):
|
|||
|
||||
def build_sidebar(self) -> sidebar.Card:
|
||||
"""Build a new sidebar card."""
|
||||
return sidebar.Card(sql=self.db)
|
||||
side_bar = sidebar.Card(sql=self.db)
|
||||
self.db.settings.bind_setting("sidebar.artists.show-all", side_bar,
|
||||
"show-all-artists")
|
||||
return side_bar
|
||||
|
||||
def build_window(self) -> window.Window:
|
||||
"""Build a new window instance."""
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
"""A card for displaying the list of playlists."""
|
||||
from gi.repository import GObject
|
||||
from gi.repository import Gtk
|
||||
from . import artist
|
||||
from . import playlist
|
||||
from . import section
|
||||
from .. import db
|
||||
|
@ -12,6 +13,7 @@ class Card(Gtk.Box):
|
|||
"""Our playlist Sidebar."""
|
||||
|
||||
sql = GObject.Property(type=db.Connection)
|
||||
show_all_artists = GObject.Property(type=bool, default=False)
|
||||
selected_playlist = GObject.Property(type=db.playlist.Playlist)
|
||||
|
||||
def __init__(self, sql: db.Connection, **kwargs):
|
||||
|
@ -20,16 +22,19 @@ class Card(Gtk.Box):
|
|||
sensitive=False, **kwargs)
|
||||
self._filter = entry.Filter("playlists")
|
||||
self._playlists = playlist.Section(self.sql.playlists)
|
||||
self._artists = artist.Section(self.sql.artists, self.sql.albums)
|
||||
self._group = section.Group(sql)
|
||||
|
||||
self.append(self._filter)
|
||||
|
||||
for sect in [self._playlists]:
|
||||
for sect in [self._playlists, self._artists]:
|
||||
self.append(sect)
|
||||
self._group.add(sect)
|
||||
|
||||
self._group.bind_property("selected-playlist",
|
||||
self, "selected-playlist")
|
||||
self.bind_property("show-all-artists", self._artists, "show-all",
|
||||
GObject.BindingFlags.BIDIRECTIONAL)
|
||||
|
||||
self._filter.connect("search-changed", self.__search_changed)
|
||||
self.sql.connect("table-loaded", self.__table_loaded)
|
||||
|
@ -53,6 +58,8 @@ class Card(Gtk.Box):
|
|||
match playlist.table:
|
||||
case self.sql.playlists:
|
||||
section = self._playlists
|
||||
case self.sql.artists | self.sql.albums | self.sql.media:
|
||||
section = self._artists
|
||||
|
||||
section.active = True
|
||||
section.select_playlist(playlist)
|
||||
|
|
|
@ -21,6 +21,7 @@ class TestSidebar(tests.util.TestCase):
|
|||
self.assertEqual(self.sidebar.sql, self.sql)
|
||||
self.assertEqual(self.sidebar.get_orientation(),
|
||||
Gtk.Orientation.VERTICAL)
|
||||
self.assertFalse(self.sidebar.get_sensitive())
|
||||
|
||||
self.assertTrue(self.sidebar.has_css_class("background"))
|
||||
self.assertTrue(self.sidebar.has_css_class("linked"))
|
||||
|
@ -56,6 +57,14 @@ class TestSidebar(tests.util.TestCase):
|
|||
self.sql.emit("table-loaded", tables[0])
|
||||
self.sidebar.select_playlist.assert_not_called()
|
||||
|
||||
def test_show_all_artists(self):
|
||||
"""Test the show-all-artists property."""
|
||||
self.assertFalse(self.sidebar.show_all_artists)
|
||||
self.sidebar.show_all_artists = True
|
||||
self.assertTrue(self.sidebar._artists.show_all)
|
||||
self.sidebar._artists.show_all = False
|
||||
self.assertFalse(self.sidebar.show_all_artists)
|
||||
|
||||
def test_selected_playlist(self):
|
||||
"""Test the selected-playlist property."""
|
||||
self.assertIsNone(self.sidebar.selected_playlist)
|
||||
|
@ -70,17 +79,24 @@ class TestSidebar(tests.util.TestCase):
|
|||
emmental.sidebar.section.Group)
|
||||
|
||||
self.assertListEqual(self.sidebar._group._sections,
|
||||
[self.sidebar._playlists])
|
||||
[self.sidebar._playlists,
|
||||
self.sidebar._artists])
|
||||
|
||||
def test_sections(self):
|
||||
"""Tests sidebar section models."""
|
||||
self.assertIsInstance(self.sidebar._playlists,
|
||||
emmental.sidebar.playlist.Section)
|
||||
self.assertIsInstance(self.sidebar._artists,
|
||||
emmental.sidebar.artist.Section)
|
||||
|
||||
self.assertEqual(self.sidebar._filter.get_next_sibling(),
|
||||
self.sidebar._playlists)
|
||||
self.assertEqual(self.sidebar._playlists.get_next_sibling(),
|
||||
self.sidebar._artists)
|
||||
|
||||
self.assertEqual(self.sidebar._playlists.table, self.sql.playlists)
|
||||
self.assertEqual(self.sidebar._artists.table, self.sql.artists)
|
||||
self.assertEqual(self.sidebar._artists.album_table, self.sql.albums)
|
||||
|
||||
def test_select_playlist(self):
|
||||
"""Test setting the active playlist."""
|
||||
|
@ -88,3 +104,16 @@ class TestSidebar(tests.util.TestCase):
|
|||
self.sidebar.select_playlist(playlist)
|
||||
self.assertTrue(self.sidebar._playlists.active)
|
||||
self.assertEqual(self.sidebar.selected_playlist, playlist)
|
||||
|
||||
artist = self.sql.artists.create("Test Artist")
|
||||
album = self.sql.albums.create("Test Album", "Test Artist", "2023")
|
||||
medium = self.sql.media.create(album, "Test Medium", number=1)
|
||||
|
||||
self.sidebar._artists.select_playlist = unittest.mock.Mock()
|
||||
for plist in [artist, album, medium]:
|
||||
self.sidebar._artists.select_playlist.reset_mock()
|
||||
self.sidebar._artists.active = False
|
||||
|
||||
self.sidebar.select_playlist(plist)
|
||||
self.assertTrue(self.sidebar._artists.active)
|
||||
self.sidebar._artists.select_playlist.assert_called_with(plist)
|
||||
|
|
|
@ -108,3 +108,13 @@ class TestSettings(unittest.TestCase):
|
|||
self.assertEqual(self.settings["sidebar.size"], 400)
|
||||
|
||||
self.assertEqual(self.app.build_window().sidebar_size, 400)
|
||||
|
||||
def test_save_sidebar_show_all_artists(self, mock_stdout: io.StringIO):
|
||||
"""Check saving and loading the show-all artists setting."""
|
||||
self.assertFalse(self.win.sidebar.show_all_artists)
|
||||
self.assertFalse(self.settings["sidebar.artists.show-all"])
|
||||
|
||||
self.win.sidebar.show_all_artists = True
|
||||
self.assertTrue(self.settings["sidebar.artists.show-all"])
|
||||
|
||||
self.assertTrue(self.app.build_window().sidebar.show_all_artists)
|
||||
|
|
Loading…
Reference in New Issue