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 <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2022-09-01 16:29:57 -04:00
parent 0dcdcd4a68
commit 1c0712e673
2 changed files with 23 additions and 3 deletions

View File

@ -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)

View File

@ -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)