[gnome-music/wip/jfelder/restore-mpris-playlists: 7/9] mpris: Use active_playlist property to activate a playlist
- From: Jean Felder <jfelder src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music/wip/jfelder/restore-mpris-playlists: 7/9] mpris: Use active_playlist property to activate a playlist
- Date: Fri, 27 Sep 2019 14:32:43 +0000 (UTC)
commit 30697ce0fc225a1deff625c58d3847a5bc5af5b9
Author: Jean Felder <jfelder src gnome org>
Date: Sat Sep 21 21:40:53 2019 +0200
mpris: Use active_playlist property to activate a playlist
When changing activate_playlist property in MPRIS, the
"notify::activate_playlist" in PlaylistsView needs to be blocked to
prevent a circular call.
gnomemusic/coremodel.py | 12 ------------
gnomemusic/mpris.py | 2 +-
gnomemusic/views/playlistsview.py | 18 ++++++++++++------
3 files changed, 13 insertions(+), 19 deletions(-)
---
diff --git a/gnomemusic/coremodel.py b/gnomemusic/coremodel.py
index 3b87bcf7..46b69a0f 100644
--- a/gnomemusic/coremodel.py
+++ b/gnomemusic/coremodel.py
@@ -65,8 +65,6 @@ class CoreModel(GObject.GObject):
"""
__gsignals__ = {
- "activate-playlist": (
- GObject.SignalFlags.RUN_FIRST, None, (Playlist,)),
"artists-loaded": (GObject.SignalFlags.RUN_FIRST, None, ()),
"playlist-loaded": (GObject.SignalFlags.RUN_FIRST, None, (int,)),
"playlists-loaded": (GObject.SignalFlags.RUN_FIRST, None, ()),
@@ -385,16 +383,6 @@ class CoreModel(GObject.GObject):
"""
self.props.grilo.create_playlist(playlist_title, callback)
- def activate_playlist(self, playlist):
- """Activates a playlist.
-
- Selects the playlist and start playing.
-
- :param Playlist playlist: playlist to activate
- """
- # FIXME: just a proxy
- self.emit("activate-playlist", playlist)
-
def search(self, text):
self.props.grilo.search(text)
diff --git a/gnomemusic/mpris.py b/gnomemusic/mpris.py
index ae4d35aa..ce0eac47 100644
--- a/gnomemusic/mpris.py
+++ b/gnomemusic/mpris.py
@@ -765,7 +765,7 @@ class MPRIS(DBusInterface):
break
if selected_playlist is not None:
- self._coremodel.activate_playlist(selected_playlist)
+ self._coremodel.props.active_playlist = selected_playlist
def _get_playlists(self, index, max_count, order, reverse):
"""Gets a set of playlists (MPRIS Method).
diff --git a/gnomemusic/views/playlistsview.py b/gnomemusic/views/playlistsview.py
index 061da267..02d2e66b 100644
--- a/gnomemusic/views/playlistsview.py
+++ b/gnomemusic/views/playlistsview.py
@@ -112,8 +112,8 @@ class PlaylistsView(BaseView):
self._loaded_id = self._coremodel.connect(
"playlists-loaded", self._on_playlists_loaded)
- self._coremodel.connect(
- "activate-playlist", self._on_playlist_activation_request)
+ self._active_playlist_id = self._coremodel.connect(
+ "notify::active-playlist", self._on_active_playlist_changed)
# Selection is only possible from the context menu
self.disconnect(self._selection_mode_id)
@@ -222,16 +222,20 @@ class PlaylistsView(BaseView):
self._playlist_delete_action.set_enabled(not playlist.props.is_smart)
self._remove_song_action.set_enabled(not playlist.props.is_smart)
- def _on_playlist_activation_request(self, klass, playlist):
+ def _on_active_playlist_changed(self, klass, val):
"""Selects and starts playing a playlist.
If the view has not been populated yet, populate it and then
select the requested playlist. Otherwise, directly select the
requested playlist and start playing.
- :param CoreModel klass: Main CorexModel
- :param Playlist playlist: requested playlist
+ :param CoreModel klass: Main CoreModel
+ :param GParamObject val: value
"""
+ playlist = self._coremodel.props.active_playlist
+ if playlist is None:
+ return
+
def _on_playlist_loaded(playlist):
playlist.disconnect(playlist_ready_id)
self._song_activated(None)
@@ -277,14 +281,16 @@ class PlaylistsView(BaseView):
signal_id = None
def _on_playlist_loaded(klass, playlist_type):
- self._coremodel.props.active_playlist = current_playlist
self._player.play(coresong)
+ self._coremodel.handler_unblock(self._active_playlist_id)
self._coremodel.disconnect(signal_id)
selection = self._sidebar.get_selected_row()
current_playlist = selection.props.playlist
signal_id = self._coremodel.connect(
"playlist-loaded", _on_playlist_loaded)
+ self._coremodel.handler_block(self._active_playlist_id)
+ self._coremodel.props.active_playlist = current_playlist
self._coremodel.set_player_model(
PlayerPlaylist.Type.PLAYLIST, current_playlist.props.model)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]