Refactor automatic episode removal config options

Add the possibility to delete both unplayed and
played episodes via the configuration and make the
logic for getting the expired episodes easier to read.
This commit is contained in:
Thomas Perl 2010-03-01 21:29:46 +01:00
parent 3fbf848533
commit 0e6e3d8a93
3 changed files with 29 additions and 13 deletions

View file

@ -71,8 +71,7 @@ gPodderSettings = {
("Set a global speed limit (in KB/s) when downloading files. "
"Requires 'limit_rate'.")),
'episode_old_age': ( int, 7,
("The number of days before an episode is considered old. "
"Must be used in conjunction with 'auto_remove_old_episodes'.")),
("The number of days before an episode is considered old.")),
# Boolean config flags
'update_on_startup': ( bool, False,
@ -86,8 +85,10 @@ gPodderSettings = {
("After syncing an episode, mark it as played in gPodder.")),
'on_sync_delete': ( bool, False,
("After syncing an episode, delete it from gPodder.")),
'auto_remove_old_episodes': ( bool, False,
("Remove episodes older than 'episode_old_age' days on startup.")),
'auto_remove_played_episodes': ( bool, False,
("Auto-remove old episodes that are played.")),
'auto_remove_unplayed_episodes': ( bool, False,
("Auto-remove old episodes that are unplayed.")),
'auto_update_feeds': (bool, False,
("Automatically update feeds when gPodder is minimized. "
"See 'auto_update_frequency' and 'auto_download'.")),

View file

@ -41,7 +41,7 @@ class gPodderPreferences(BuilderWidget):
self._config.connect_gtk_togglebutton( 'on_sync_mark_played', self.on_sync_mark_played)
self._config.connect_gtk_togglebutton( 'on_sync_delete', self.on_sync_delete)
self._config.connect_gtk_spinbutton('episode_old_age', self.episode_old_age)
self._config.connect_gtk_togglebutton('auto_remove_old_episodes', self.auto_remove_old_episodes)
self._config.connect_gtk_togglebutton('auto_remove_played_episodes', self.auto_remove_old_episodes)
self._config.connect_gtk_togglebutton('auto_update_feeds', self.auto_update_feeds)
self._config.connect_gtk_spinbutton('auto_update_frequency', self.auto_update_frequency)
self._config.connect_gtk_togglebutton('display_tray_icon', self.display_tray_icon)

View file

@ -464,8 +464,9 @@ class gPodder(BuilderWidget, dbus.service.Object):
self.btnCleanUpDownloads)
# Delete old episodes if the user wishes to
if self.config.auto_remove_old_episodes:
old_episodes = self.get_old_episodes()
if self.config.auto_remove_played_episodes or \
self.config.auto_remove_unplayed_episodes:
old_episodes = list(self.get_expired_episodes())
if len(old_episodes) > 0:
self.delete_episode_list(old_episodes, confirm=False)
self.update_podcast_list_model(set(e.channel.url for e in old_episodes))
@ -2646,14 +2647,28 @@ class gPodder(BuilderWidget, dbus.service.Object):
self.quit()
sys.exit(0)
def get_old_episodes(self):
episodes = []
def get_expired_episodes(self):
for channel in self.channels:
for episode in channel.get_downloaded_episodes():
if episode.age_in_days() > self.config.episode_old_age and \
not episode.is_locked and episode.is_played:
episodes.append(episode)
return episodes
# Never consider locked episodes as old
if episode.is_locked:
continue
# Never consider fresh episodes as old
if episode.age_in_days() < self.config.episode_old_age:
continue
# Do not delete played episodes (except if configured)
if episode.is_played:
if not self.config.auto_remove_played_episodes:
continue
# Do not delete unplayed episodes (except if configured)
if not episode.is_played:
if not self.config.auto_remove_unplayed_episodes:
continue
yield episode
def delete_episode_list(self, episodes, confirm=True):
if not episodes: