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:
parent
3fbf848533
commit
0e6e3d8a93
3 changed files with 29 additions and 13 deletions
|
@ -71,8 +71,7 @@ gPodderSettings = {
|
||||||
("Set a global speed limit (in KB/s) when downloading files. "
|
("Set a global speed limit (in KB/s) when downloading files. "
|
||||||
"Requires 'limit_rate'.")),
|
"Requires 'limit_rate'.")),
|
||||||
'episode_old_age': ( int, 7,
|
'episode_old_age': ( int, 7,
|
||||||
("The number of days before an episode is considered old. "
|
("The number of days before an episode is considered old.")),
|
||||||
"Must be used in conjunction with 'auto_remove_old_episodes'.")),
|
|
||||||
|
|
||||||
# Boolean config flags
|
# Boolean config flags
|
||||||
'update_on_startup': ( bool, False,
|
'update_on_startup': ( bool, False,
|
||||||
|
@ -86,8 +85,10 @@ gPodderSettings = {
|
||||||
("After syncing an episode, mark it as played in gPodder.")),
|
("After syncing an episode, mark it as played in gPodder.")),
|
||||||
'on_sync_delete': ( bool, False,
|
'on_sync_delete': ( bool, False,
|
||||||
("After syncing an episode, delete it from gPodder.")),
|
("After syncing an episode, delete it from gPodder.")),
|
||||||
'auto_remove_old_episodes': ( bool, False,
|
'auto_remove_played_episodes': ( bool, False,
|
||||||
("Remove episodes older than 'episode_old_age' days on startup.")),
|
("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,
|
'auto_update_feeds': (bool, False,
|
||||||
("Automatically update feeds when gPodder is minimized. "
|
("Automatically update feeds when gPodder is minimized. "
|
||||||
"See 'auto_update_frequency' and 'auto_download'.")),
|
"See 'auto_update_frequency' and 'auto_download'.")),
|
||||||
|
|
|
@ -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_mark_played', self.on_sync_mark_played)
|
||||||
self._config.connect_gtk_togglebutton( 'on_sync_delete', self.on_sync_delete)
|
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_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_togglebutton('auto_update_feeds', self.auto_update_feeds)
|
||||||
self._config.connect_gtk_spinbutton('auto_update_frequency', self.auto_update_frequency)
|
self._config.connect_gtk_spinbutton('auto_update_frequency', self.auto_update_frequency)
|
||||||
self._config.connect_gtk_togglebutton('display_tray_icon', self.display_tray_icon)
|
self._config.connect_gtk_togglebutton('display_tray_icon', self.display_tray_icon)
|
||||||
|
|
|
@ -464,8 +464,9 @@ class gPodder(BuilderWidget, dbus.service.Object):
|
||||||
self.btnCleanUpDownloads)
|
self.btnCleanUpDownloads)
|
||||||
|
|
||||||
# Delete old episodes if the user wishes to
|
# Delete old episodes if the user wishes to
|
||||||
if self.config.auto_remove_old_episodes:
|
if self.config.auto_remove_played_episodes or \
|
||||||
old_episodes = self.get_old_episodes()
|
self.config.auto_remove_unplayed_episodes:
|
||||||
|
old_episodes = list(self.get_expired_episodes())
|
||||||
if len(old_episodes) > 0:
|
if len(old_episodes) > 0:
|
||||||
self.delete_episode_list(old_episodes, confirm=False)
|
self.delete_episode_list(old_episodes, confirm=False)
|
||||||
self.update_podcast_list_model(set(e.channel.url for e in old_episodes))
|
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()
|
self.quit()
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
def get_old_episodes(self):
|
def get_expired_episodes(self):
|
||||||
episodes = []
|
|
||||||
for channel in self.channels:
|
for channel in self.channels:
|
||||||
for episode in channel.get_downloaded_episodes():
|
for episode in channel.get_downloaded_episodes():
|
||||||
if episode.age_in_days() > self.config.episode_old_age and \
|
# Never consider locked episodes as old
|
||||||
not episode.is_locked and episode.is_played:
|
if episode.is_locked:
|
||||||
episodes.append(episode)
|
continue
|
||||||
return episodes
|
|
||||||
|
# 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):
|
def delete_episode_list(self, episodes, confirm=True):
|
||||||
if not episodes:
|
if not episodes:
|
||||||
|
|
Loading…
Reference in a new issue