@@ -116,10 +116,33 @@ func (u *Updater) updateFeed(ctx context.Context, feedConfig *config.Feed) error
116
116
117
117
log .Debugf ("received %d episode(s) for %q" , len (result .Episodes ), result .Title )
118
118
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
+
119
129
if err := u .db .AddFeed (ctx , feedConfig .ID , result ); err != nil {
120
130
return err
121
131
}
122
132
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
+
123
146
log .Debug ("successfully saved updates to storage" )
124
147
return nil
125
148
}
@@ -372,6 +395,8 @@ func (u *Updater) cleanup(ctx context.Context, feedConfig *config.Feed) error {
372
395
373
396
if err := u .db .UpdateEpisode (feedID , episode .ID , func (episode * model.Episode ) error {
374
397
episode .Status = model .EpisodeCleaned
398
+ episode .Title = ""
399
+ episode .Description = ""
375
400
return nil
376
401
}); err != nil {
377
402
result = multierror .Append (result , errors .Wrapf (err , "failed to set state for cleaned episode: %s" , episode .ID ))
0 commit comments