[gnome-music] Use libsoup for remote art retrieval
- From: Jean Felder <jfelder src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music] Use libsoup for remote art retrieval
- Date: Fri, 1 May 2020 22:59:14 +0000 (UTC)
commit 179991068e3adc28c89a0e674d24cfad9b689567
Author: enehring <evan d nehring gmail com>
Date: Sun Apr 26 11:28:05 2020 -0400
Use libsoup for remote art retrieval
Fixes #378
gnomemusic/albumartcache.py | 18 +++++++++++++-----
gnomemusic/artistart.py | 19 ++++++++++++++-----
2 files changed, 27 insertions(+), 10 deletions(-)
---
diff --git a/gnomemusic/albumartcache.py b/gnomemusic/albumartcache.py
index 8f454275..6c388711 100644
--- a/gnomemusic/albumartcache.py
+++ b/gnomemusic/albumartcache.py
@@ -30,8 +30,9 @@ import cairo
import gi
gi.require_version('GstTag', '1.0')
gi.require_version('MediaArt', '2.0')
+gi.require_version("Soup", "2.4")
from gi.repository import (Gdk, GdkPixbuf, Gio, GLib, GObject, Gtk, MediaArt,
- Gst, GstTag, GstPbutils)
+ Gst, GstTag, GstPbutils, Soup)
from gnomemusic.musiclogger import MusicLogger
@@ -547,6 +548,7 @@ class RemoteArt(GObject.GObject):
self._album = None
self._coresong = None
self._coregrilo = None
+ self._soup_session = Soup.Session.new()
def query(self, coresong):
"""Start the remote query
@@ -633,8 +635,15 @@ class RemoteArt(GObject.GObject):
"Error: {}, {}".format(error.domain, error.message))
def _read_callback(self, src, result, data):
+ if result.props.status_code != 200:
+ self._log.debug(
+ "Failed to get remote art for the album {} by {} : {}".format(
+ self._album, self._artist, result.props.reason_phrase))
+ return
+
try:
- istream = src.read_finish(result)
+ istream = Gio.MemoryInputStream.new_from_bytes(
+ result.props.response_body_data)
except GLib.Error as error:
self._log.warning(
"Error: {}, {}".format(error.domain, error.message))
@@ -670,6 +679,5 @@ class RemoteArt(GObject.GObject):
self.emit('unavailable')
return
- src = Gio.File.new_for_uri(thumb_uri)
- src.read_async(
- GLib.PRIORITY_LOW, None, self._read_callback, None)
+ msg = Soup.Message.new("GET", thumb_uri)
+ self._soup_session.queue_message(msg, self._read_callback, None)
diff --git a/gnomemusic/artistart.py b/gnomemusic/artistart.py
index 41716d0a..973c5369 100644
--- a/gnomemusic/artistart.py
+++ b/gnomemusic/artistart.py
@@ -28,7 +28,9 @@ from math import pi
import cairo
import gi
gi.require_version("MediaArt", "2.0")
-from gi.repository import Gdk, GdkPixbuf, Gio, GLib, GObject, Gtk, MediaArt
+gi.require_version("Soup", "2.4")
+from gi.repository import (Gdk, GdkPixbuf, Gio, GLib, GObject, Gtk, MediaArt,
+ Soup)
from gnomemusic.musiclogger import MusicLogger
@@ -134,6 +136,7 @@ class ArtistArt(GObject.GObject):
self._coreartist = coreartist
self._artist = self._coreartist.props.artist
+ self._soup_session = Soup.Session.new()
if self._in_cache():
return
@@ -162,13 +165,19 @@ class ArtistArt(GObject.GObject):
self._coreartist.props.cached_thumbnail_uri = ""
return
- src = Gio.File.new_for_uri(uri)
- src.read_async(
- GLib.PRIORITY_LOW, None, self._read_callback, None)
+ msg = Soup.Message.new("GET", uri)
+ self._soup_session.queue_message(msg, self._read_callback, None)
def _read_callback(self, src, result, data):
+ if result.props.status_code != 200:
+ self._log.debug(
+ "Failed to get remote art for the artist {} : {}".format(
+ self._artist, result.props.reason_phrase))
+ return
+
try:
- istream = src.read_finish(result)
+ istream = Gio.MemoryInputStream.new_from_bytes(
+ result.props.response_body_data)
except GLib.Error as error:
self._log.warning(
"Error: {}, {}".format(error.domain, error.message))
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]