[gnome-music/wip/mschraal/core] coregrilo: Add simple search through wrapper.
- From: Marinus Schraal <mschraal src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music/wip/mschraal/core] coregrilo: Add simple search through wrapper.
- Date: Sat, 13 Jul 2019 22:19:25 +0000 (UTC)
commit 51f8c96fa240ac22422a4315a1d4fba27ee76b64
Author: Marinus Schraal <mschraal gnome org>
Date: Fri Jul 12 10:27:19 2019 +0200
coregrilo: Add simple search through wrapper.
gnomemusic/coregrilo.py | 6 ++-
gnomemusic/grilowrappers/grlsearchwrapper.py | 70 ++++++++++++++++++++++++++++
2 files changed, 75 insertions(+), 1 deletion(-)
---
diff --git a/gnomemusic/coregrilo.py b/gnomemusic/coregrilo.py
index 56d0e0ce..94bb9cdc 100644
--- a/gnomemusic/coregrilo.py
+++ b/gnomemusic/coregrilo.py
@@ -3,6 +3,7 @@ gi.require_version('Grl', '0.3')
from gi.repository import Grl, GLib, GObject
# from gnomemusic.grilowrappers.grldleynasource import GrlDLeynaSource
+from gnomemusic.grilowrappers.grlsearchwrapper import GrlSearchWrapper
from gnomemusic.grilowrappers.grltrackersource import GrlTrackerSource
@@ -43,7 +44,8 @@ class CoreGrilo(GObject.GObject):
elif (source.supported_operations() & Grl.SupportedOps.SEARCH
and source.get_supported_media() & Grl.MediaType.AUDIO
and source.props.source_id not in self._search_sources.keys()):
- self._search_sources[source.props.source_id] = source
+ self._search_sources[source.props.source_id] = GrlSearchWrapper(
+ source, self._coremodel, self._coreselection, self)
print("search source", source)
def _on_source_removed(self, registry, source):
@@ -97,3 +99,5 @@ class CoreGrilo(GObject.GObject):
def search(self, text):
for wrapper in self._wrappers.values():
wrapper.search(text)
+ for wrapper in self._search_sources.values():
+ wrapper.search(text)
diff --git a/gnomemusic/grilowrappers/grlsearchwrapper.py b/gnomemusic/grilowrappers/grlsearchwrapper.py
new file mode 100644
index 00000000..4ddf5326
--- /dev/null
+++ b/gnomemusic/grilowrappers/grlsearchwrapper.py
@@ -0,0 +1,70 @@
+import gi
+gi.require_versions({"Grl": "0.3"})
+from gi.repository import Gfm, Gio, Grl, GObject
+
+from gnomemusic.coresong import CoreSong
+
+
+class GrlSearchWrapper(GObject.GObject):
+
+ METADATA_KEYS = [
+ Grl.METADATA_KEY_ALBUM,
+ Grl.METADATA_KEY_ALBUM_ARTIST,
+ Grl.METADATA_KEY_ALBUM_DISC_NUMBER,
+ Grl.METADATA_KEY_ARTIST,
+ Grl.METADATA_KEY_CREATION_DATE,
+ Grl.METADATA_KEY_COMPOSER,
+ Grl.METADATA_KEY_DURATION,
+ Grl.METADATA_KEY_FAVOURITE,
+ Grl.METADATA_KEY_ID,
+ Grl.METADATA_KEY_PLAY_COUNT,
+ Grl.METADATA_KEY_THUMBNAIL,
+ Grl.METADATA_KEY_TITLE,
+ Grl.METADATA_KEY_TRACK_NUMBER,
+ Grl.METADATA_KEY_URL
+ ]
+
+ def __repr__(self):
+ return "<GrlSearchWrapper>"
+
+ def __init__(self, source, coremodel, coreselection, grilo):
+ super().__init__()
+
+ self._coremodel = coremodel
+ self._coreselection = coreselection
+ self._grilo = grilo
+ self._source = source
+
+ self._song_search_proxy = self._coremodel.props.songs_search_proxy
+
+ self._song_search_store = Gio.ListStore.new(CoreSong)
+ # FIXME: Workaround for adding the right list type to the proxy
+ # list model.
+ self._song_search_model = Gfm.FilterListModel.new(
+ self._song_search_store)
+ self._song_search_model.set_filter_func(lambda a: True)
+ self._song_search_proxy.append(self._song_search_model)
+
+ self._fast_options = Grl.OperationOptions()
+ self._fast_options.set_resolution_flags(
+ Grl.ResolutionFlags.FAST_ONLY | Grl.ResolutionFlags.IDLE_RELAY)
+
+ def search(self, text):
+ with self._song_search_store.freeze_notify():
+ self._song_search_store.remove_all()
+
+ def _search_result_cb(source, op_id, media, remaining, error):
+ if error:
+ print("error")
+ return
+ if media is None:
+ return
+
+ coresong = CoreSong(media, self._coreselection, self._grilo)
+ coresong.props.title = (
+ coresong.props.title + " (" + source.props.source_id + ")")
+
+ self._song_search_store.append(coresong)
+
+ self._source.search(
+ text, self.METADATA_KEYS, self._fast_options, _search_result_cb)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]