tracklist: Request a Track when it is activated

And wire up a handler for the factory track-requested signal in the main
application code.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2023-04-28 13:13:10 -04:00
parent 61dfc2a586
commit 481c4856c7
3 changed files with 26 additions and 0 deletions

View File

@ -105,6 +105,10 @@ class Application(Adw.Application):
self.__load_track(self.factory.previous_track(),
rg_auto="track", restart=True)
def __track_requested(self, factory: playlist.Factory, track,
rg_auto: str, restarted: bool) -> None:
self.__load_track(track, rg_auto=rg_auto, restart=restarted)
def __tracks_table_loaded(self, track_table, param) -> None:
if track_table.current_track is not None:
self.player.file = track_table.current_track.path
@ -225,6 +229,7 @@ class Application(Adw.Application):
self.factory, "db-previous")
self.win.sidebar.bind_property("selected-playlist",
self.factory, "db-visible")
self.factory.connect("track-requested", self.__track_requested)
def connect_player(self) -> None:
"""Connect the audio.Player."""

View File

@ -55,6 +55,7 @@ class TrackView(Gtk.Frame):
self._selection.bind_property("n-items", self, "n-tracks")
self._selection.connect("items-changed", self.__runtime_changed)
self._columnview.connect("activate", self.__track_activated)
self._columnview.add_css_class("emmental-track-list")
self.set_child(self._scrollwin)
@ -71,6 +72,11 @@ class TrackView(Gtk.Frame):
position: int, removed: int, added: int) -> None:
self.runtime = sum(t.length for t in self._selection)
def __track_activated(self, columnview: Gtk.ColumnView,
position: int) -> None:
self.playlist.request_track(self._selection[position])
self._selection.unselect_all()
@GObject.Property(type=Gio.ListModel)
def columns(self) -> Gio.ListModel:
"""Get the ListModel for the columns."""

View File

@ -1,6 +1,7 @@
# Copyright 2022 (c) Anna Schumaker.
"""Tests our Track ColumnView."""
import pathlib
import unittest.mock
import emmental.tracklist.trackview
import tests.util
from gi.repository import Gtk
@ -61,6 +62,20 @@ class TestTrackView(tests.util.TestCase):
self.assertTrue(self.trackview._columnview.has_css_class(
"emmental-track-list"))
def test_track_activated(self):
"""Test activating a row in the columnview."""
requested = unittest.mock.Mock()
self.playlist.connect("track-requested", requested)
self.trackview.playlist = self.playlist
self.trackview._selection.set_model(self.playlist)
self.db_plist.add_track(self.track)
with unittest.mock.patch.object(self.trackview._selection,
"unselect_all") as mock_unselect:
self.trackview._columnview.emit("activate", 0)
requested.assert_called_with(self.playlist, self.track)
mock_unselect.assert_called()
def test_playlist(self):
"""Test the playlist property."""
self.assertIsNone(self.trackview.playlist)