[gnome-music: 1/3] Start making the loading of artwork faster
- From: Vadim Rutkovsky <vrutkovsky src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music: 1/3] Start making the loading of artwork faster
- Date: Thu, 8 Aug 2013 11:37:47 +0000 (UTC)
commit 55b25de66724e2f80662b4e3ddc911dda1034e21
Author: Seif Lotfy <seif lotfy com>
Date: Thu Aug 8 13:23:13 2013 +0200
Start making the loading of artwork faster
gnomemusic/grilo.py | 12 +++++++++++-
gnomemusic/query.py | 25 +++++++++++++++++++++++++
gnomemusic/view.py | 22 +++++++++++++++-------
3 files changed, 51 insertions(+), 8 deletions(-)
---
diff --git a/gnomemusic/grilo.py b/gnomemusic/grilo.py
index 1d0da6a..1b53d08 100644
--- a/gnomemusic/grilo.py
+++ b/gnomemusic/grilo.py
@@ -12,9 +12,14 @@ class Grilo(GObject.GObject):
METADATA_KEYS = [
Grl.METADATA_KEY_ID, Grl.METADATA_KEY_TITLE,
Grl.METADATA_KEY_ARTIST, Grl.METADATA_KEY_ALBUM,
- Grl.METADATA_KEY_DURATION, Grl.METADATA_KEY_THUMBNAIL,
+ Grl.METADATA_KEY_DURATION,
Grl.METADATA_KEY_CREATION_DATE]
+ METADATA_THUMBNAIL_KEYS = [
+ Grl.METADATA_KEY_ID,
+ Grl.METADATA_KEY_THUMBNAIL,
+ ]
+
def __init__(self):
GObject.GObject.__init__(self)
@@ -82,6 +87,11 @@ class Grilo(GObject.GObject):
source.search(q, [Grl.METADATA_KEY_ID], 0, 10,
options, self._search_callback, source)
+ def get_album_art_for_album_id(self, album_id, _callback):
+ options = self.options.copy()
+ query = Query.get_album_for_id(album_id)
+ self.tracker.query(query, self.METADATA_THUMBNAIL_KEYS,
+ options, _callback, None)
Grl.init(None)
diff --git a/gnomemusic/query.py b/gnomemusic/query.py
index 6883ae4..c7c14a7 100644
--- a/gnomemusic/query.py
+++ b/gnomemusic/query.py
@@ -216,3 +216,28 @@ class Query():
""".replace("\n", " ").strip() % {'album_id': album_id}
return query
+
+ @staticmethod
+ def get_album_for_id(album_id):
+ query = """
+ SELECT DISTINCT
+ rdf:type(?album)
+ tracker:id(?album) AS id
+ (
+ SELECT
+ nmm:artistName(?artist)
+ WHERE {
+ ?album nmm:albumArtist ?artist
+ }
+ LIMIT 1
+ ) AS artist
+ nie:title(?album) AS title
+ nie:title(?album) AS album
+ WHERE {
+ ?album a nmm:MusicAlbum .
+ FILTER (
+ tracker:id(?album) = %(album_id)s
+ )
+ }
+ """.replace("\n", " ").strip() % {'album_id': album_id}
+ return query
diff --git a/gnomemusic/view.py b/gnomemusic/view.py
index 3794c35..d70d2b0 100644
--- a/gnomemusic/view.py
+++ b/gnomemusic/view.py
@@ -203,13 +203,21 @@ class ViewContainer(Stack):
count = cursor.get_integer(0)
return count - self._offset
- def _update_album_art(self, item, _iter):
- albumArtCache.get_default().lookup(
- item,
- self._iconWidth,
- self._iconHeight,
- self._on_lookup_ready, _iter)
- return False
+ def _insert_album_art(self, item, cb_item, itr, x=False):
+ if item and cb_item and not item.get_thumbnail():
+ if cb_item.get_thumbnail():
+ item.set_thumbnail(cb_item.get_thumbnail())
+ albumArtCache.get_default().lookup(
+ item,
+ self._iconWidth,
+ self._iconHeight,
+ self._on_lookup_ready, itr)
+
+ def _update_album_art(self, item, itr):
+ self._insert_album_art(item, item, itr)
+ grilo.get_album_art_for_album_id(item.get_id(),
+ lambda source, count, cb_item, x, y, z:
+ self._insert_album_art(item, cb_item, itr, True))
def _on_lookup_ready(self, icon, path, _iter):
if icon:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]