[gnome-music: 1/3] Start making the loading of artwork faster



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]