From 6ddb4b5441e938ed2e5cdf10994506faff167251 Mon Sep 17 00:00:00 2001 From: Justin Forest Date: Thu, 2 Oct 2008 22:40:46 +0400 Subject: [PATCH] Performance fix for the main episode list. When the list of episodes for a channel was displayed, all episodes were loaded with a single query, then loaded separately by one inside podcastItem.iter_set_downloading_columns(). This patch fixes this problem, the TreeModel is built with only one SQL query. On the same machine a TreeModel for 50 episodes was displayed in 1.915531 seconds, with this patch: 0.236303 (8 times faster). --- src/gpodder/libpodcasts.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/gpodder/libpodcasts.py b/src/gpodder/libpodcasts.py index b32d5002..3330bf80 100644 --- a/src/gpodder/libpodcasts.py +++ b/src/gpodder/libpodcasts.py @@ -321,12 +321,15 @@ class podcastChannel(object): log('Returning TreeModel for %s', self.url, sender = self) return self.items_liststore() - def iter_set_downloading_columns( self, model, iter): + def iter_set_downloading_columns( self, model, iter, episode=None): global ICON_AUDIO_FILE, ICON_VIDEO_FILE, ICON_BITTORRENT global ICON_DOWNLOADING, ICON_DELETED, ICON_NEW - url = model.get_value( iter, 0) - episode = db.load_episode(url, factory=lambda x: podcastItem.create_from_dict(x, self)) + if episode is None: + url = model.get_value( iter, 0) + episode = db.load_episode(url, factory=lambda x: podcastItem.create_from_dict(x, self)) + else: + url = episode.url if gl.config.episode_list_descriptions: icon_size = 32 @@ -383,7 +386,7 @@ class podcastChannel(object): new_iter = new_model.append((item.url, item.title, filelength, True, None, item.cute_pubdate(), description, item.description, item.local_filename(), item.extension())) - self.iter_set_downloading_columns( new_model, new_iter) + self.iter_set_downloading_columns( new_model, new_iter, episode=item) self.update_save_dir_size() return new_model -- 2.11.4.GIT