summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuo Jinghua <sunmoon1997@gmail.com>2010-11-15 11:00:32 +0800
committerLuo Jinghua <sunmoon1997@gmail.com>2010-11-15 11:00:32 +0800
commitea2c559010ca3f46f0ff4e13aec4f2d87cf1b98c (patch)
tree71d259c92f4431dbd98915ed89f4e18ca9348172
parent3ee3491246f62f12449972b83743cd527040b4ce (diff)
ppstream: only fetch meta data for movies in visible viewport
-rw-r--r--totem/plugin/ppstream.py54
1 files changed, 53 insertions, 1 deletions
diff --git a/totem/plugin/ppstream.py b/totem/plugin/ppstream.py
index 46bf093..f8fb5c5 100644
--- a/totem/plugin/ppstream.py
+++ b/totem/plugin/ppstream.py
@@ -396,6 +396,10 @@ class PPStream (totem.Plugin):
self.imagedownloader.join ()
self.stop_idle_task ()
+ self.stop_check_movies_visible_range()
+
+ self.threadpool.cancel()
+ self.threadpool.wait_completion()
self.ppslist.reset()
@@ -1173,7 +1177,7 @@ class PPStream (totem.Plugin):
4, repr(class_path),
5, origurl)
movie.model_path = model.get_path(it)
- self.fetch_movie_meta_data(class_path, movie)
+ #self.fetch_movie_meta_data(class_path, movie)
def fill_all_movies (self, class_path):
cls = self.get_movie_class (class_path)
@@ -1297,6 +1301,54 @@ class PPStream (totem.Plugin):
selection = treeview.get_selection ()
selection.connect ("changed", self.on_movies_selection_changed)
+ self.start_check_movies_visible_range()
+
+ def start_check_movies_visible_range(self):
+ self.cmvr_id = gobject.timeout_add(2000,
+ self.check_movies_visible_range)
+ self.last_visible_movies = []
+ self.last_visible_movies_updated = False
+
+ def stop_check_movies_visible_range(self):
+ if self.cmvr_id:
+ gobject.source_remove(self.cmvr_id)
+ self.last_visible_movies = []
+
+ def check_movies_visible_range(self):
+ treeview = self.treeview['movies']
+ liststore = self.liststore['movies']
+ model = treeview.get_model()
+ visible_range = treeview.get_visible_range()
+ #print 'visible range: ', visible_range
+ if visible_range is None:
+ self.last_visible_movies = []
+ self.last_visible_movies_updated = False
+ return True
+
+ cls = self.get_movie_class(self.movie_class_path)
+ movies = cls.getMovies()
+ visible_movies = []
+ start = visible_range[0][0]
+ end = visible_range[1][0]
+ for item in range(start, end + 1):
+ path = (item,)
+ it = model.get_iter(path)
+ child_it = model.convert_iter_to_child_iter (it)
+ child_model = model.get_model ()
+ child_path = child_model.get_path(child_it)
+ index = child_path[0]
+ visible_movies.append(index)
+ #print child_model.get(child_it, 1)[0]
+ if visible_movies == self.last_visible_movies:
+ if not self.last_visible_movies_updated:
+ for index in visible_movies:
+ movie = movies[index]
+ self.fetch_movie_meta_data(self.movie_class_path, movie)
+ else:
+ self.last_visible_movies_updated = False
+ self.last_visible_movies = visible_movies
+ return True
+
def on_movies_selection_changed (self, selection):
model, rows = selection.get_selected_rows ()
if not rows: