[gnome-music/wip/mschraal/core: 154/164] searchview: Make playback work



commit fd43d551e3b4db56b478dd690853a6d866976676
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]