[gnome-music/wip/jfelder/coremodel-reset-item-changed-signal] coremodel: Correctly disconnect items-changed for player model
- From: Marinus Schraal <mschraal src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music/wip/jfelder/coremodel-reset-item-changed-signal] coremodel: Correctly disconnect items-changed for player model
- Date: Thu, 12 Sep 2019 10:01:06 +0000 (UTC)
commit c1f0d7039fbf671236b9c8b37f7590478e514c75
Author: Jean Felder <jfelder src gnome org>
Date: Mon Sep 9 21:23:35 2019 +0200
coremodel: Correctly disconnect items-changed for player model
When a new player playlist is set, an existing "items-changed" signal
is disconnected if the new playlist type matches the current playlist
type. This is wrong because the new model will replace the existing
one whatever its type is.
Fix the issue by disconnecting an "items-changed" signal as soon as
the playlist changes.
gnomemusic/coremodel.py | 38 +++++++++++++++-----------------------
1 file changed, 15 insertions(+), 23 deletions(-)
---
diff --git a/gnomemusic/coremodel.py b/gnomemusic/coremodel.py
index 0df16163..43fae86d 100644
--- a/gnomemusic/coremodel.py
+++ b/gnomemusic/coremodel.py
@@ -79,10 +79,9 @@ class CoreModel(GObject.GObject):
super().__init__()
self._flatten_model = None
- self._playlist_signal_id = None
+ self._player_signal_id = None
+ self._current_playlist_model = None
self._previous_playlist_model = None
- self._search_signal_id = None
- self._song_signal_id = None
self._model = Gio.ListStore.new(CoreSong)
self._songliststore = SongListStore(self._model)
@@ -246,6 +245,11 @@ class CoreModel(GObject.GObject):
| GObject.BindingFlags.SYNC_CREATE)
with model.freeze_notify():
+ if self._player_signal_id is not None:
+ self._current_playlist_model.disconnect(self._player_signal_id)
+ self._player_signal_id = None
+ self._current_playlist_model = None
+
self._playlist_model.remove_all()
if playlist_type == PlayerPlaylist.Type.ALBUM:
@@ -256,7 +260,7 @@ class CoreModel(GObject.GObject):
self._flatten_model = Gfm.FlattenListModel.new(
CoreSong, proxy_model)
- self._flatten_model.connect("items-changed", _on_items_changed)
+ self._current_playlist_model = self._flatten_model
for model_song in self._flatten_model:
song = CoreSong(
@@ -282,7 +286,7 @@ class CoreModel(GObject.GObject):
self._flatten_model = Gfm.FlattenListModel.new(
CoreSong, proxy_model)
- self._flatten_model.connect("items-changed", _on_items_changed)
+ self._current_playlist_model = self._flatten_model
for model_song in self._flatten_model:
song = CoreSong(
@@ -300,9 +304,7 @@ class CoreModel(GObject.GObject):
self.emit("playlist-loaded")
elif playlist_type == PlayerPlaylist.Type.SONGS:
- if self._song_signal_id:
- self._songliststore.props.model.disconnect(
- self._song_signal_id)
+ self._current_playlist_model = self._songliststore.props.model
for song in self._songliststore.props.model:
self._playlist_model.append(song)
@@ -310,26 +312,16 @@ class CoreModel(GObject.GObject):
if song.props.state == SongWidget.State.PLAYING:
song.props.state = SongWidget.State.PLAYED
- self._song_signal_id = self._songliststore.props.model.connect(
- "items-changed", _on_items_changed)
-
self.emit("playlist-loaded")
elif playlist_type == PlayerPlaylist.Type.SEARCH_RESULT:
- if self._search_signal_id:
- self._song_search_flatten.disconnect(
- self._search_signal_id)
+ self._current_playlist_model = self._song_search_flatten
for song in self._song_search_flatten:
self._playlist_model.append(song)
- self._search_signal_id = self._song_search_flatten.connect(
- "items-changed", _on_items_changed)
-
self.emit("playlist-loaded")
elif playlist_type == PlayerPlaylist.Type.PLAYLIST:
- if self._playlist_signal_id:
- self._previous_playlist_model.disconnect(
- self._playlist_signal_id)
+ self._current_playlist_model = model
for model_song in model:
song = CoreSong(
@@ -346,11 +338,11 @@ class CoreModel(GObject.GObject):
GObject.BindingFlags.BIDIRECTIONAL
| GObject.BindingFlags.SYNC_CREATE)
- self._playlist_signal_id = model.connect(
- "items-changed", _on_items_changed)
-
self.emit("playlist-loaded")
+ if self._current_playlist_model is not None:
+ self._player_signal_id = self._current_playlist_model.connect(
+ "items-changed", _on_items_changed)
self._previous_playlist_model = model
def stage_playlist_deletion(self, playlist):
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]