From 82262b1aab236b775757f7f2d1380a468d73424d Mon Sep 17 00:00:00 2001 From: Thomas Perl Date: Mon, 26 Apr 2010 22:17:22 +0200 Subject: [PATCH] Special implementation of load_episode() --- src/gpodder/dbsqlite.py | 25 +++++++++++++++++++------ src/gpodder/model.py | 6 ++---- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/gpodder/dbsqlite.py b/src/gpodder/dbsqlite.py index 2ab2f7ce..5f6d6a65 100644 --- a/src/gpodder/dbsqlite.py +++ b/src/gpodder/dbsqlite.py @@ -400,12 +400,25 @@ class Database(object): else: return self.__read_episodes(factory = factory, where = " WHERE channel_id = ? AND state = ? ORDER BY pubDate DESC LIMIT ?", params = (channel.id, state, limit, )) - def load_episode(self, url, factory=None): - self.log("load_episode(%s)", url) - list = self.__read_episodes(factory=factory, where=' WHERE url=? LIMIT ?', params=(url, 1)) - if list: - return list[0] - else: + def load_episode(self, id): + """Load episode as dictionary by its id + + This will return the data for an episode as + dictionary or None if it does not exist. + """ + assert id is not None + + cur = self.cursor(lock=True) + cur.execute('SELECT * from %s WHERE id = ? LIMIT 1' % (self.TABLE_EPISODES,), (id,)) + try: + d = dict(zip((desc[0] for desc in cur.description), cur.fetchone())) + cur.close() + self.log('Loaded episode %d from DB', id) + self.lock.release() + return d + except: + cur.close() + self.lock.release() return None def save_episode(self, e): diff --git a/src/gpodder/model.py b/src/gpodder/model.py index 4ac8b504..f979f0ba 100644 --- a/src/gpodder/model.py +++ b/src/gpodder/model.py @@ -675,10 +675,8 @@ class PodcastEpisode(PodcastModelObject): been updated (e.g. the filename has been set after a download where it was not set before the download) """ - d = self.db.load_episode(self.url) - if d is not None: - self.update_from_dict(d) - + d = self.db.load_episode(self.id) + self.update_from_dict(d or {}) return self def has_website_link(self): -- 2.11.4.GIT