From 1c0712e673d866eb7a7cbd1336982598ef87aa3c Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Thu, 1 Sep 2022 16:29:57 -0400 Subject: [PATCH] sidebar: Add the Library section to the sidebar And show the directory chooser if the application is started without any library paths. Signed-off-by: Anna Schumaker --- emmental/sidebar/__init__.py | 8 +++++++- tests/sidebar/test_sidebar.py | 18 ++++++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/emmental/sidebar/__init__.py b/emmental/sidebar/__init__.py index d1017cb..d921333 100644 --- a/emmental/sidebar/__init__.py +++ b/emmental/sidebar/__init__.py @@ -5,6 +5,7 @@ from gi.repository import Gtk from . import artist from . import decade from . import genre +from . import library from . import playlist from . import section from .. import db @@ -27,12 +28,13 @@ class Card(Gtk.Box): self._artists = artist.Section(self.sql.artists, self.sql.albums) self._genres = genre.Section(self.sql.genres) self._decades = decade.Section(self.sql.decades, self.sql.years) + self._libraries = library.Section(self.sql.libraries) self._group = section.Group(sql) self.append(self._filter) for sect in [self._playlists, self._artists, self._genres, - self._decades]: + self._decades, self._libraries]: self.append(sect) self._group.add(sect) @@ -56,6 +58,8 @@ class Card(Gtk.Box): if False not in {tbl.loaded for tbl in sql.playlist_tables()}: self.set_sensitive(True) self.select_playlist(sql.active_playlist) + if len(sql.libraries) == 0: + self._libraries.extra_widget.emit("clicked") def select_playlist(self, playlist: db.playlist.Playlist) -> None: """Set the current active playlist.""" @@ -69,6 +73,8 @@ class Card(Gtk.Box): section = self._genres case self.sql.decades | self.sql.years: section = self._decades + case self.sql.libraries: + section = self._libraries section.active = True section.select_playlist(playlist) diff --git a/tests/sidebar/test_sidebar.py b/tests/sidebar/test_sidebar.py index b1ddcc6..dc437d5 100644 --- a/tests/sidebar/test_sidebar.py +++ b/tests/sidebar/test_sidebar.py @@ -40,18 +40,21 @@ class TestSidebar(tests.util.TestCase): self.sidebar._filter.emit("search-changed") mock_filter.assert_called_with("*test text*") - def test_sensitivity(self): + def test_sensitivity_and_startup(self): """Test setting the sidebar sensitivity when all tables have loaded.""" tables = [t for t in self.sql.playlist_tables()] self.sidebar.select_playlist = unittest.mock.Mock() + self.sidebar._libraries.extra_widget.emit = unittest.mock.Mock() for table in tables: self.assertFalse(self.sidebar.get_sensitive()) self.sidebar.select_playlist.assert_not_called() + self.sidebar._libraries.extra_widget.emit.assert_not_called() self.sql.emit("table-loaded", table) self.assertTrue(self.sidebar.get_sensitive()) self.sidebar.select_playlist.assert_called() + self.sidebar._libraries.extra_widget.emit.assert_called_with("clicked") self.sidebar.select_playlist.reset_mock() self.sql.emit("table-loaded", tables[0]) @@ -82,7 +85,8 @@ class TestSidebar(tests.util.TestCase): [self.sidebar._playlists, self.sidebar._artists, self.sidebar._genres, - self.sidebar._decades]) + self.sidebar._decades, + self.sidebar._libraries]) def test_sections(self): """Tests sidebar section models.""" @@ -94,6 +98,8 @@ class TestSidebar(tests.util.TestCase): emmental.sidebar.genre.Section) self.assertIsInstance(self.sidebar._decades, emmental.sidebar.decade.Section) + self.assertIsInstance(self.sidebar._libraries, + emmental.sidebar.library.Section) self.assertEqual(self.sidebar._filter.get_next_sibling(), self.sidebar._playlists) @@ -103,6 +109,8 @@ class TestSidebar(tests.util.TestCase): self.sidebar._genres) self.assertEqual(self.sidebar._genres.get_next_sibling(), self.sidebar._decades) + self.assertEqual(self.sidebar._decades.get_next_sibling(), + self.sidebar._libraries) self.assertEqual(self.sidebar._playlists.table, self.sql.playlists) self.assertEqual(self.sidebar._artists.table, self.sql.artists) @@ -110,6 +118,7 @@ class TestSidebar(tests.util.TestCase): self.assertEqual(self.sidebar._genres.table, self.sql.genres) self.assertEqual(self.sidebar._decades.table, self.sql.decades) self.assertEqual(self.sidebar._decades.year_table, self.sql.years) + self.assertEqual(self.sidebar._libraries.table, self.sql.libraries) def test_select_playlist(self): """Test setting the active playlist.""" @@ -147,3 +156,8 @@ class TestSidebar(tests.util.TestCase): self.sidebar.select_playlist(plist) self.assertTrue(self.sidebar._decades.active) self.sidebar._decades.select_playlist.assert_called_with(plist) + + library = self.sql.libraries.create("/a/b/c") + self.sidebar.select_playlist(library) + self.assertTrue(self.sidebar._libraries.active) + self.assertEqual(self.sidebar.selected_playlist, library)