diff options
author | Luo Jinghua <sunmoon1997@gmail.com> | 2010-11-15 11:00:32 +0800 |
---|---|---|
committer | Luo Jinghua <sunmoon1997@gmail.com> | 2010-11-15 11:00:32 +0800 |
commit | ea2c559010ca3f46f0ff4e13aec4f2d87cf1b98c (patch) | |
tree | 71d259c92f4431dbd98915ed89f4e18ca9348172 | |
parent | 3ee3491246f62f12449972b83743cd527040b4ce (diff) |
ppstream: only fetch meta data for movies in visible viewport
-rw-r--r-- | totem/plugin/ppstream.py | 54 |
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: |