[gnome-music/wip/jfelder/gstplayer-disable-about-to-finish-http-files: 1/3] grldleynawrapper: fetches songs from dleyna server
- From: Jean Felder <jfelder src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music/wip/jfelder/gstplayer-disable-about-to-finish-http-files: 1/3] grldleynawrapper: fetches songs from dleyna server
- Date: Fri, 29 May 2020 20:08:17 +0000 (UTC)
commit cf352b8da6e1760bf5b535f9be62c362fb4c4ec8
Author: Chinmay Gurjar <chnmgurjar gmail com>
Date: Sat May 23 02:46:32 2020 +0530
grldleynawrapper: fetches songs from dleyna server
Fetches songs from dleyna server and adds them to the songs model.
Register dleyna grilo wrapper in the coregrilo.
gnomemusic/coregrilo.py | 11 ++++
gnomemusic/grilowrappers/grldleynawrapper.py | 89 ++++++++++++++++++++++++++++
org.gnome.Music.json | 3 +-
3 files changed, 102 insertions(+), 1 deletion(-)
---
diff --git a/gnomemusic/coregrilo.py b/gnomemusic/coregrilo.py
index a7a4936e..f7afd17f 100644
--- a/gnomemusic/coregrilo.py
+++ b/gnomemusic/coregrilo.py
@@ -28,6 +28,7 @@ import gi
gi.require_version('Grl', '0.3')
from gi.repository import Grl, GLib, GObject
+from gnomemusic.grilowrappers.grldleynawrapper import GrlDleynaWrapper
from gnomemusic.grilowrappers.grlsearchwrapper import GrlSearchWrapper
from gnomemusic.grilowrappers.grltrackerwrapper import GrlTrackerWrapper
from gnomemusic.trackerwrapper import TrackerState, TrackerWrapper
@@ -143,6 +144,16 @@ class CoreGrilo(GObject.GObject):
grl_tracker_wrapper = self._wrappers[source.props.source_id]
registry.unregister_source(grl_tracker_wrapper.props.source)
grl_tracker_wrapper.props.source = source
+ elif (source.props.source_id.startswith("grl-dleyna")):
+ if source.props.source_id not in self._wrappers.keys():
+ new_wrapper = GrlDleynaWrapper(
+ source, self._application)
+ self._wrappers[source.props.source_id] = new_wrapper
+ self._log.debug("Adding wrapper {}".format(new_wrapper))
+ else:
+ grl_dleyna_wrapper = self._wrappers[source.props.source_id]
+ registry.unregister_source(grl_dleyna_wrapper.props.source)
+ grl_dleyna_wrapper.props.source = source
elif (source.props.source_id not in self._search_wrappers.keys()
and source.props.source_id not in self._wrappers.keys()
and source.props.source_id != "grl-tracker-source"
diff --git a/gnomemusic/grilowrappers/grldleynawrapper.py b/gnomemusic/grilowrappers/grldleynawrapper.py
new file mode 100644
index 00000000..ae20fd12
--- /dev/null
+++ b/gnomemusic/grilowrappers/grldleynawrapper.py
@@ -0,0 +1,89 @@
+import gi
+gi.require_versions({"Grl": "0.3"})
+from gi.repository import Grl, GObject
+
+from gnomemusic.coresong import CoreSong
+
+
+class GrlDleynaWrapper(GObject.GObject):
+ """Wrapper for the Grilo Dleyna source.
+ """
+ _SPLICE_SIZE = 100
+ METADATA_KEYS = [
+ Grl.METADATA_KEY_ALBUM,
+ Grl.METADATA_KEY_ARTIST,
+ Grl.METADATA_KEY_AUTHOR,
+ Grl.METADATA_KEY_ID,
+ Grl.METADATA_KEY_PUBLICATION_DATE,
+ Grl.METADATA_KEY_TITLE,
+ Grl.METADATA_KEY_TRACK_NUMBER,
+ Grl.METADATA_KEY_URL
+ ]
+
+ def __init__(self, source, application):
+ super().__init__()
+
+ self._application = application
+ self._coremodel = application.props.coremodel
+ self._log = application.props.log
+ self._songs_model = self._coremodel.props.songs
+ self._source = source
+ self._hash = {}
+ self._window = application.props.window
+
+ self._fast_options = Grl.OperationOptions()
+ self._fast_options.set_resolution_flags(
+ Grl.ResolutionFlags.FAST_ONLY | Grl.ResolutionFlags.IDLE_RELAY)
+
+ self.props.source = source
+
+ self._initial_songs_fill(self.props.source)
+ # self._initial_albums_fill(self.props.source)
+ # self._initial_artists_fill(self.props.source)
+
+ @GObject.Property(type=Grl.Source, default=None)
+ def source(self):
+ return self._source
+
+ def _initial_songs_fill(self, source):
+ self._window.notifications_popup.push_loading()
+ songs_added = []
+
+ def _add_to_model(source, op_id, media, remaining, error):
+ if error:
+ self._log.warning("Error: {}".format(error))
+ self._window.notifications_popup.pop_loading()
+ return
+ if remaining == 0:
+ self._songs_model.splice(
+ self._songs_model.get_n_items(), 0, songs_added)
+ self._window.notifications_popup.pop_loading()
+
+ return
+
+ if not media:
+ self._songs_model.splice(
+ self._songs_model.get_n_items(), 0, songs_added)
+ self._window.notifications_popup.pop_loading()
+
+ return
+
+ song = CoreSong(self._application, media)
+ song.props.title = (
+ song.props.title + " (" + source.props.source_name + ")")
+ songs_added.append(song)
+ self._hash[media.get_id()] = song
+ if len(songs_added) == self._SPLICE_SIZE:
+ self._songs_model.splice(
+ self._songs_model.get_n_items(), 0, songs_added)
+ songs_added.clear()
+
+ query = """upnp:class derivedfrom 'object.item.audioItem'
+ """.replace('\n', ' ').strip()
+
+ options = self._fast_options.copy()
+ self._source.query(
+ query, self.METADATA_KEYS, options, _add_to_model)
+
+ def search(self, text):
+ pass
diff --git a/org.gnome.Music.json b/org.gnome.Music.json
index 97b6c74f..5dc3233f 100644
--- a/org.gnome.Music.json
+++ b/org.gnome.Music.json
@@ -22,6 +22,7 @@
"--talk-name=org.gnome.SettingsDaemon.MediaKeys",
"--talk-name=org.gtk.vfs",
"--talk-name=org.gtk.vfs.*",
+ "--talk-name=com.intel.dleyna-server",
"--system-talk-name=org.freedesktop.login1"
],
"cleanup": [
@@ -115,7 +116,7 @@
"buildsystem": "meson",
"config-opts": [ "-Denable-tracker=yes",
"-Denable-bookmarks=no",
- "-Denable-dleyna=no",
+ "-Denable-dleyna=yes",
"-Denable-filesystem=no",
"-Denable-freebox=no",
"-Denable-local-metadata=no",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]