From 415bd0ef02002e9dfe8221db0989d7a2b9992a74 Mon Sep 17 00:00:00 2001 From: Maksym Pavlenko Date: Sun, 1 Dec 2019 16:01:36 -0800 Subject: [PATCH] Fix feed ID --- cmd/podsync/updater.go | 20 ++++++++++++++++++-- pkg/storage/badger.go | 12 ++++++------ pkg/storage/badger_test.go | 13 +++++++------ pkg/storage/storage.go | 2 +- 4 files changed, 32 insertions(+), 15 deletions(-) diff --git a/cmd/podsync/updater.go b/cmd/podsync/updater.go index fbcae62f..ca7552bc 100644 --- a/cmd/podsync/updater.go +++ b/cmd/podsync/updater.go @@ -89,7 +89,7 @@ func (u *Updater) updateFeed(ctx context.Context, feedConfig *config.Feed) error log.Debugf("received %d episode(s) for %q", len(result.Episodes), result.Title) - if err := u.db.AddFeed(ctx, result); err != nil { + if err := u.db.AddFeed(ctx, feedConfig.ID, result); err != nil { return err } @@ -121,7 +121,17 @@ func (u *Updater) downloadEpisodes(ctx context.Context, feedConfig *config.Feed, return errors.Wrapf(err, "failed to build update list") } - log.Debugf("update list: %+v", updateList) + var ( + updateListLen = len(updateList) + downloaded = 0 + ) + + if updateListLen > 0 { + log.Infof("update list size: %d", updateListLen) + } else { + log.Info("no episodes to download") + return nil + } // Download pending episodes for idx, episode := range updateList { @@ -181,12 +191,15 @@ func (u *Updater) downloadEpisodes(ctx context.Context, feedConfig *config.Feed, // Update file status in database + logger.Infof("successfully downloaded file %q", episode.ID) + if err := u.db.UpdateFile(feedID, episode.ID, func(file *model.File) error { // Record file size of newly downloaded file size, err := u.fileSize(episodePath) if err != nil { logger.WithError(err).Error("failed to get episode file size") } else { + logger.Debugf("file size: %d bytes", file.Size) file.Size = size } @@ -195,8 +208,11 @@ func (u *Updater) downloadEpisodes(ctx context.Context, feedConfig *config.Feed, }); err != nil { return err } + + downloaded++ } + log.Infof("downloaded %d episode(s)", downloaded) return nil } diff --git a/pkg/storage/badger.go b/pkg/storage/badger.go index d856e97a..bbc9d31d 100644 --- a/pkg/storage/badger.go +++ b/pkg/storage/badger.go @@ -81,31 +81,31 @@ func (b *Badger) Version() (int, error) { return version, err } -func (b *Badger) AddFeed(_ context.Context, feed *model.Feed) error { +func (b *Badger) AddFeed(_ context.Context, feedID string, feed *model.Feed) error { return b.db.Update(func(txn *badger.Txn) error { // Insert or update feed info - feedKey := b.getKey(feedPath, feed.ID) + feedKey := b.getKey(feedPath, feedID) if err := b.setObj(txn, feedKey, feed, true); err != nil { return err } // Append new episodes for _, episode := range feed.Episodes { - episodeKey := b.getKey(episodePath, feed.ID, episode.ID) + episodeKey := b.getKey(episodePath, feedID, episode.ID) err := b.setObj(txn, episodeKey, episode, false) if err == nil || err == ErrAlreadyExists { // Do nothing } else { - return errors.Wrapf(err, "failed to save episode %q", feed.ID) + return errors.Wrapf(err, "failed to save episode %q", feedID) } } // Update download file statuses for _, episode := range feed.Episodes { - fileKey := b.getKey(filePath, feed.ID, episode.ID) + fileKey := b.getKey(filePath, feedID, episode.ID) file := &model.File{ EpisodeID: episode.ID, - FeedID: feed.ID, + FeedID: feedID, Size: episode.Size, // Use estimated file size Status: model.EpisodeNew, } diff --git a/pkg/storage/badger_test.go b/pkg/storage/badger_test.go index 24e41125..58f4a62f 100644 --- a/pkg/storage/badger_test.go +++ b/pkg/storage/badger_test.go @@ -54,7 +54,8 @@ func TestBadger_AddFeed(t *testing.T) { require.NoError(t, err) defer db.Close() - err = db.AddFeed(testCtx, getFeed()) + feed := getFeed() + err = db.AddFeed(testCtx, feed.ID, feed) assert.NoError(t, err) } @@ -70,7 +71,7 @@ func TestBadger_GetFeed(t *testing.T) { feed := getFeed() feed.Episodes = nil - err = db.AddFeed(testCtx, feed) + err = db.AddFeed(testCtx, feed.ID, feed) require.NoError(t, err) actual, err := db.GetFeed(testCtx, feed.ID) @@ -90,7 +91,7 @@ func TestBadger_WalkFeeds(t *testing.T) { feed := getFeed() feed.Episodes = nil // These are not serialized to database - err = db.AddFeed(testCtx, feed) + err = db.AddFeed(testCtx, feed.ID, feed) assert.NoError(t, err) called := 0 @@ -114,7 +115,7 @@ func TestBadger_DeleteFeed(t *testing.T) { defer db.Close() feed := getFeed() - err = db.AddFeed(testCtx, feed) + err = db.AddFeed(testCtx, feed.ID, feed) require.NoError(t, err) err = db.DeleteFeed(testCtx, feed.ID) @@ -147,7 +148,7 @@ func TestBadger_WalkFiles(t *testing.T) { defer db.Close() feed := getFeed() - err = db.AddFeed(testCtx, feed) + err = db.AddFeed(testCtx, feed.ID, feed) assert.NoError(t, err) called := 0 @@ -176,7 +177,7 @@ func TestBadger_UpdateFile(t *testing.T) { defer db.Close() feed := getFeed() - err = db.AddFeed(testCtx, feed) + err = db.AddFeed(testCtx, feed.ID, feed) assert.NoError(t, err) err = db.UpdateFile(feed.ID, feed.Episodes[0].ID, func(file *model.File) error { diff --git a/pkg/storage/storage.go b/pkg/storage/storage.go index 561f8624..fbb40f60 100644 --- a/pkg/storage/storage.go +++ b/pkg/storage/storage.go @@ -25,7 +25,7 @@ type Storage interface { // - Insert or update feed info // - Append new episodes to the existing list of episodes // - Insert File model for each new episode - AddFeed(ctx context.Context, feed *model.Feed) error + AddFeed(ctx context.Context, feedID string, feed *model.Feed) error // GetFeed gets a feed by ID GetFeed(ctx context.Context, feedID string) (*model.Feed, error)