[gnome-music/wip/mschraal/core: 152/177] searchview: Make playback work
- From: Marinus Schraal <mschraal src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music/wip/mschraal/core: 152/177] searchview: Make playback work
- Date: Wed, 3 Jul 2019 18:33:07 +0000 (UTC)
commit 6295bb7e0157b3cd654b45cb267fc2ccf3bc7559
Author: Marinus Schraal <mschraal gnome org>
Date: Mon Jul 1 09:27:48 2019 +0200
searchview: Make playback work
gnomemusic/coremodel.py | 12 ++++++++++++
gnomemusic/views/searchview.py | 30 +++++++++++++++++++++++++++---
gnomemusic/widgets/songwidget.py | 2 ++
3 files changed, 41 insertions(+), 3 deletions(-)
---
diff --git a/gnomemusic/coremodel.py b/gnomemusic/coremodel.py
index 95b15a38..f87225a3 100644
--- a/gnomemusic/coremodel.py
+++ b/gnomemusic/coremodel.py
@@ -171,6 +171,18 @@ class CoreModel(GObject.GObject):
song.props.state = SongWidget.State.PLAYING
self.emit("playlist-loaded")
+ elif playlist_type == PlayerPlaylist.Type.SEARCH_RESULT:
+ self._playlist_model.remove_all()
+
+ for song in self._song_search_model:
+ self._playlist_model.append(song)
+
+ if song.props.state == SongWidget.State.PLAYING:
+ song.props.state = SongWidget.State.PLAYED
+ if song is coresong:
+ song.props.state = SongWidget.State.PLAYING
+
+ self.emit("playlist-loaded")
@log
def get_albums_model(self):
diff --git a/gnomemusic/views/searchview.py b/gnomemusic/views/searchview.py
index 340e9fbd..f61b8d83 100644
--- a/gnomemusic/views/searchview.py
+++ b/gnomemusic/views/searchview.py
@@ -51,6 +51,7 @@ class SearchView(BaseView):
@log
def __init__(self, window, player):
self._coremodel = window._app._coremodel
+ self._model = self._coremodel.get_songs_search_model()
super().__init__('search', None, window)
# self._add_list_renderers()
@@ -95,8 +96,7 @@ class SearchView(BaseView):
self._view = Gtk.ListBox()
- self._view.bind_model(
- self._coremodel.get_songs_search_model(), self._create_song_widget)
+ self._view.bind_model(self._model, self._create_song_widget)
# self._view = Gtk.TreeView(
# activate_on_single_click=True, can_focus=False,
@@ -115,6 +115,7 @@ class SearchView(BaseView):
def _create_song_widget(self, coresong):
song_widget = SongWidget(coresong.props.media)
+ song_widget.props.coresong = coresong
coresong.bind_property(
"favorite", song_widget, "favorite",
@@ -134,12 +135,35 @@ class SearchView(BaseView):
GObject.BindingFlags.BIDIRECTIONAL
| GObject.BindingFlags.SYNC_CREATE)
- # song_widget.connect('button-release-event', self._song_activated)
+ song_widget.connect('button-release-event', self._song_activated)
song_widget.show_all()
return song_widget
+ def _song_activated(self, widget, event):
+ mod_mask = Gtk.accelerator_get_default_mod_mask()
+ if ((event.get_state() & mod_mask) == Gdk.ModifierType.CONTROL_MASK
+ and not self.props.selection_mode):
+ self.props.selection_mode = True
+ return
+
+ (_, button) = event.get_button()
+ if (button == Gdk.BUTTON_PRIMARY
+ and not self.props.selection_mode):
+ # self.emit('song-activated', widget)
+
+ self._coremodel.set_playlist_model(
+ PlayerPlaylist.Type.SEARCH_RESULT, None, widget.props.coresong,
+ self._model)
+ self.player.play()
+
+ # FIXME: Need to ignore the event from the checkbox.
+ # if self.props.selection_mode:
+ # widget.props.selected = not widget.props.selected
+
+ return True
+
@log
def _back_button_clicked(self, widget, data=None):
if self.get_visible_child() == self._artist_albums_widget:
diff --git a/gnomemusic/widgets/songwidget.py b/gnomemusic/widgets/songwidget.py
index 7ef59f81..0c7bc767 100644
--- a/gnomemusic/widgets/songwidget.py
+++ b/gnomemusic/widgets/songwidget.py
@@ -31,6 +31,7 @@ from gi.repository.Dazzle import BoldingLabel # noqa: F401
from gnomemusic import log
from gnomemusic import utils
+from gnomemusic.coresong import CoreSong
from gnomemusic.grilo import grilo
from gnomemusic.playlists import Playlists, SmartPlaylists
from gnomemusic.widgets.starimage import StarImage # noqa: F401
@@ -55,6 +56,7 @@ class SongWidget(Gtk.EventBox):
'selection-changed': (GObject.SignalFlags.RUN_FIRST, None, ()),
}
+ coresong = GObject.Property(type=CoreSong, default=None)
favorite = GObject.Property(type=bool, default=False)
selected = GObject.Property(type=bool, default=False)
show_duration = GObject.Property(type=bool, default=True)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]