From eada937b7a1aef920e086b9d43862b44f3d3de2a Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Sun, 18 Feb 2024 22:19:03 -0500 Subject: [PATCH] db: Give the tracks table a track-played signal I'm going to need this in ListenBrainz so we can submit the played Track. Signed-off-by: Anna Schumaker --- emmental/db/tracks.py | 5 +++++ tests/db/test_tracks.py | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/emmental/db/tracks.py b/emmental/db/tracks.py index 8311d53..bd072ee 100644 --- a/emmental/db/tracks.py +++ b/emmental/db/tracks.py @@ -270,9 +270,14 @@ class Table(table.Table): self.sql.playlists.most_played.reload_tracks(idle=True) self.sql.playlists.queued.remove_track(track) self.sql.playlists.unplayed.remove_track(track) + self.emit("track-played", track) self.sql.commit() + @GObject.Signal(arg_types=(Track,)) + def track_played(self, track: Track) -> None: + """Signal that a Track was played.""" + class TrackidSet(GObject.GObject): """Manage a set of Track IDs.""" diff --git a/tests/db/test_tracks.py b/tests/db/test_tracks.py index 8828c25..b11fe49 100644 --- a/tests/db/test_tracks.py +++ b/tests/db/test_tracks.py @@ -534,6 +534,8 @@ class TestTrackTable(tests.util.TestCase): """Test marking that a Track has stopped playback.""" track = self.tracks.create(self.library, pathlib.Path("/a/b/1.ogg"), self.medium, self.year, length=10) + track_played = unittest.mock.Mock() + self.tracks.connect("track-played", track_played) track.start() with unittest.mock.patch.object(self.sql, "commit", @@ -552,6 +554,7 @@ class TestTrackTable(tests.util.TestCase): self.playlists.most_played.reload_tracks.assert_not_called() self.playlists.queued.remove_track.assert_not_called() self.playlists.unplayed.remove_track.assert_not_called() + track_played.assert_not_called() track.start() with unittest.mock.patch.object(self.sql, "commit", @@ -569,11 +572,14 @@ class TestTrackTable(tests.util.TestCase): self.playlists.most_played.reload_tracks.assert_called() self.playlists.queued.remove_track.assert_called_with(track) self.playlists.unplayed.remove_track.assert_called_with(track) + track_played.assert_called_with(self.tracks, track) def test_stop_restarted_track(self): """Test marking that a restarted Track has stopped playback.""" track = self.tracks.create(self.library, pathlib.Path("/a/b/1.ogg"), self.medium, self.year, length=10) + track_played = unittest.mock.Mock() + self.tracks.connect("track-played", track_played) track.restart() track.stop(3) @@ -591,6 +597,7 @@ class TestTrackTable(tests.util.TestCase): self.playlists.most_played.reload_tracks.assert_not_called() self.playlists.queued.remove_track.assert_not_called() self.playlists.unplayed.remove_track.assert_not_called() + track_played.assert_not_called() track.restart() restarted = track.restarted @@ -607,6 +614,7 @@ class TestTrackTable(tests.util.TestCase): self.playlists.most_played.reload_tracks.assert_called_with(idle=True) self.playlists.queued.remove_track.assert_called_with(track) self.playlists.unplayed.remove_track.assert_called_with(track) + track_played.assert_called_with(self.tracks, track) def test_current_track(self): """Test the current-track and have-current-track properties."""