[gnome-music] view: don't hit tracker every time the user scrolls
- From: Arnel A. Borja <arnelborja src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music] view: don't hit tracker every time the user scrolls
- Date: Sat, 17 Aug 2013 12:07:32 +0000 (UTC)
commit 7bf56d19ad0a54c2b8eb1f1591c216424db92cbc
Author: Arnel A. Borja <arnelborja src gnome org>
Date: Sat Aug 17 20:03:13 2013 +0800
view: don't hit tracker every time the user scrolls
Cache the number of items in the fully loaded view the first time
it's needed, and use that value for all future scrolling.
Note: if we ever support watching the library for changes, we need
to invalidate the cache.
https://bugzilla.gnome.org/show_bug.cgi?id=706025
gnomemusic/view.py | 5 ++++-
gnomemusic/widgets.py | 11 +++++++----
2 files changed, 11 insertions(+), 5 deletions(-)
---
diff --git a/gnomemusic/view.py b/gnomemusic/view.py
index a42609f..fc1c82a 100644
--- a/gnomemusic/view.py
+++ b/gnomemusic/view.py
@@ -72,6 +72,7 @@ class ViewContainer(Stack):
else:
self._grid.add(box)
+ self._cached_count = -1
self._loadMore = Widgets.LoadMoreButton(self._get_remaining_item_count)
box.pack_end(self._loadMore.widget, False, False, 0)
self._loadMore.widget.connect('clicked', self._populate)
@@ -102,7 +103,9 @@ class ViewContainer(Stack):
self._on_view_selection_changed)
def _get_remaining_item_count(self):
- return Widgets.get_remaining_item_count(self.countQuery, self._offset)
+ if self._cached_count < 0:
+ self._cached_count = Widgets.get_count(self.countQuery)
+ return self._cached_count - self._offset
def _on_header_bar_toggled(self, button):
if button.get_active():
diff --git a/gnomemusic/widgets.py b/gnomemusic/widgets.py
index 71fa00a..34646ac 100644
--- a/gnomemusic/widgets.py
+++ b/gnomemusic/widgets.py
@@ -17,13 +17,13 @@ else:
ERROR_ICON_NAME = 'dialog-error-symbolic'
-def get_remaining_item_count(countQuery, _offset):
+def get_count(countQuery):
count = -1
if countQuery:
cursor = tracker.query(countQuery, None)
if cursor and cursor.next(None):
count = cursor.get_integer(0)
- return count - _offset
+ return count
class LoadMoreButton:
@@ -399,6 +399,7 @@ class AllArtistsAlbums(ArtistAlbums):
ArtistAlbums.__init__(self, _("All Artists"), [], player)
self._offset = 0
self.countQuery = Query.ALBUMS_COUNT
+ self._cached_count = -1
self._load_more = LoadMoreButton(self._get_remaining_item_count)
self.pack_end(self._load_more.widget, False, False, 0)
self._load_more.widget.connect('clicked', self._populate)
@@ -406,7 +407,9 @@ class AllArtistsAlbums(ArtistAlbums):
self._populate()
def _get_remaining_item_count(self):
- return get_remaining_item_count(self.countQuery, self._offset)
+ if self._cached_count < 0:
+ self._cached_count = get_count(self.countQuery)
+ return self._cached_count - self._offset
def _connect_view(self):
self._adjustmentValueId =\
@@ -441,7 +444,7 @@ class AllArtistsAlbums(ArtistAlbums):
# special case this values which happen at construction
if (((value != 0) or (upper != 1) or (page_size != 1))
- and get_remaining_item_count(self.countQuery, self._offset) > 0):
+ and self._get_remaining_item_count() > 0):
end = not (value < (upper - page_size - revealAreaHeight))
self._load_more.set_block(not end)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]