MCPcopy
hub / github.com/mxpv/podsync / updateFeed

Method updateFeed

services/update/updater.go:93–148  ·  view source on GitHub ↗

updateFeed pulls API for new episodes and saves them to database

(ctx context.Context, feedConfig *feed.Config)

Source from the content-addressed store, hash-verified

91
92// updateFeed pulls API for new episodes and saves them to database
93func (u *Manager) updateFeed(ctx context.Context, feedConfig *feed.Config) error {
94 info, err := builder.ParseURL(feedConfig.URL)
95 if err != nil {
96 return errors.Wrapf(err, "failed to parse URL: %s", feedConfig.URL)
97 }
98
99 keyProvider, ok := u.keys[info.Provider]
100 if !ok {
101 return errors.Errorf("key provider %q not loaded", info.Provider)
102 }
103
104 // Create an updater for this feed type
105 provider, err := builder.New(ctx, info.Provider, keyProvider.Get(), u.downloader)
106 if err != nil {
107 return err
108 }
109
110 // Query API to get episodes
111 log.Debug("building feed")
112 result, err := provider.Build(ctx, feedConfig)
113 if err != nil {
114 return err
115 }
116
117 log.Debugf("received %d episode(s) for %q", len(result.Episodes), result.Title)
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
129 if err := u.db.AddFeed(ctx, feedConfig.ID, result); err != nil {
130 return err
131 }
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
146 log.Debug("successfully saved updates to storage")
147 return nil
148}
149
150func (u *Manager) downloadEpisodes(ctx context.Context, feedConfig *feed.Config) error {

Callers 1

UpdateMethod · 0.95

Calls 7

ParseURLFunction · 0.92
NewFunction · 0.92
GetMethod · 0.65
BuildMethod · 0.65
WalkEpisodesMethod · 0.65
AddFeedMethod · 0.65
DeleteEpisodeMethod · 0.65

Tested by

no test coverage detected