@@ -116,10 +116,33 @@ func (u *Updater) updateFeed(ctx context.Context, feedConfig *config.Feed) error
116116
117117 log .Debugf ("received %d episode(s) for %q" , len (result .Episodes ), result .Title )
118118
119+ episodeSet := make (map [string ]struct {})
120+ if err := u .db .WalkEpisodes (ctx , feedConfig .ID , func (episode * model.Episode ) error {
121+ if episode .Status != model .EpisodeDownloaded && episode .Status != model .EpisodeCleaned {
122+ episodeSet [episode .ID ] = struct {}{}
123+ }
124+ return nil
125+ }); err != nil {
126+ return err
127+ }
128+
119129 if err := u .db .AddFeed (ctx , feedConfig .ID , result ); err != nil {
120130 return err
121131 }
122132
133+ for _ , episode := range result .Episodes {
134+ delete (episodeSet , episode .ID )
135+ }
136+
137+ // removing episodes that are no longer available in the feed and not downloaded or cleaned
138+ for id := range episodeSet {
139+ log .Infof ("removing episode %q" , id )
140+ err := u .db .DeleteEpisode (feedConfig .ID , id )
141+ if err != nil {
142+ return err
143+ }
144+ }
145+
123146 log .Debug ("successfully saved updates to storage" )
124147 return nil
125148}
@@ -372,6 +395,8 @@ func (u *Updater) cleanup(ctx context.Context, feedConfig *config.Feed) error {
372395
373396 if err := u .db .UpdateEpisode (feedID , episode .ID , func (episode * model.Episode ) error {
374397 episode .Status = model .EpisodeCleaned
398+ episode .Title = ""
399+ episode .Description = ""
375400 return nil
376401 }); err != nil {
377402 result = multierror .Append (result , errors .Wrapf (err , "failed to set state for cleaned episode: %s" , episode .ID ))
0 commit comments