@@ -562,33 +562,74 @@ def reload_selected_feed(self, feed: Feed) -> None:
562562 def save_episodes (self , feed = None , episode = None ) -> None :
563563 """Save a feed or episode.
564564
565- If the user is saving an episode and the episode is already saved, this
566- method will instead ask the user if they would like to delete the
567- downloaded episode. However, if the user is saving a feed, there is no
568- prompt to delete episodes, even if some are downloaded. In this case,
569- downloaded episodes are simply skipped.
570-
571565 Exactly one of either feed or episode must be given.
572566
573567 Args:
574568 feed: (optional) a feed to download all episodes of
575- episode: (optional) an episode to download or delete
569+ episode: (optional) an episode to download
576570 """
577571 assert (feed is None or episode is None ) and (feed is not episode )
578572
579573 if feed is not None :
574+ num_saved = 0
575+ num_to_save = 0
580576 for episode in self .database .episodes (feed ):
581577 if not episode .downloaded :
582- self ._download_queue .add (episode )
578+ num_to_save += 1
579+
580+ if num_to_save == 0 :
581+ return
582+
583+ should_delete = self ._get_y_n (
584+ "Are you sure you want to download %d"
585+ " episodes from this feed? (y/n): " % num_to_save )
586+ if should_delete :
587+ for episode in self .database .episodes (feed ):
588+ if not episode .downloaded :
589+ self ._download_queue .add (episode )
590+ else :
591+ if not episode .downloaded :
592+ self ._download_queue .add (episode )
593+
594+ def delete_episodes (self , feed = None , episode = None ) -> None :
595+ """Delete a downloaded episode, or all of those from a feed.
596+
597+ Exactly one of either feed or episode must be given.
598+
599+ Args:
600+ feed: (optional) a feed to delete all episodes of
601+ episode: (optional) an episode or delete
602+ """
603+ assert (feed is None or episode is None ) and (feed is not episode )
604+
605+ if feed is not None :
606+ num_deleted = 0
607+ num_to_delete = 0
608+ for episode in self .database .episodes (feed ):
609+ if episode .downloaded :
610+ num_to_delete += 1
611+
612+ if num_to_delete == 0 :
613+ return
614+
615+ should_delete = self ._get_y_n (
616+ "Are you sure you want to delete %d downloaded"
617+ " episodes from this feed? (y/n): " % num_to_delete )
618+ if should_delete :
619+ for episode in self .database .episodes (feed ):
620+ if episode .downloaded :
621+ episode .delete (self )
622+ num_deleted += 1
623+ self .menus_valid = False
624+ self .change_status (
625+ "Successfully deleted %d episodes" % num_deleted )
583626 else :
584627 if episode .downloaded :
585628 should_delete = self ._get_y_n (
586629 "Are you sure you want to delete the downloaded"
587630 " episode? (y/n): " )
588631 if should_delete :
589632 episode .delete (self )
590- else :
591- self ._download_queue .add (episode )
592633
593634 def filter_menu (self , menu : Menu ) -> None :
594635 menu .filter_text = self ._get_input_str ("Filter: " )
0 commit comments