1
0
mirror of https://github.com/mxpv/podsync.git synced 2024-05-11 05:55:04 +00:00

Fix feed ID

This commit is contained in:
Maksym Pavlenko
2019-12-01 16:01:36 -08:00
committed by Maksym Pavlenko
parent 8957f70b19
commit 4daecf4990
4 changed files with 32 additions and 15 deletions

View File

@@ -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) 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 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") 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 // Download pending episodes
for idx, episode := range updateList { for idx, episode := range updateList {
@@ -181,12 +191,15 @@ func (u *Updater) downloadEpisodes(ctx context.Context, feedConfig *config.Feed,
// Update file status in database // 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 { if err := u.db.UpdateFile(feedID, episode.ID, func(file *model.File) error {
// Record file size of newly downloaded file // Record file size of newly downloaded file
size, err := u.fileSize(episodePath) size, err := u.fileSize(episodePath)
if err != nil { if err != nil {
logger.WithError(err).Error("failed to get episode file size") logger.WithError(err).Error("failed to get episode file size")
} else { } else {
logger.Debugf("file size: %d bytes", file.Size)
file.Size = size file.Size = size
} }
@@ -195,8 +208,11 @@ func (u *Updater) downloadEpisodes(ctx context.Context, feedConfig *config.Feed,
}); err != nil { }); err != nil {
return err return err
} }
downloaded++
} }
log.Infof("downloaded %d episode(s)", downloaded)
return nil return nil
} }

View File

@@ -81,31 +81,31 @@ func (b *Badger) Version() (int, error) {
return version, err 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 { return b.db.Update(func(txn *badger.Txn) error {
// Insert or update feed info // 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 { if err := b.setObj(txn, feedKey, feed, true); err != nil {
return err return err
} }
// Append new episodes // Append new episodes
for _, episode := range feed.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) err := b.setObj(txn, episodeKey, episode, false)
if err == nil || err == ErrAlreadyExists { if err == nil || err == ErrAlreadyExists {
// Do nothing // Do nothing
} else { } 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 // Update download file statuses
for _, episode := range feed.Episodes { for _, episode := range feed.Episodes {
fileKey := b.getKey(filePath, feed.ID, episode.ID) fileKey := b.getKey(filePath, feedID, episode.ID)
file := &model.File{ file := &model.File{
EpisodeID: episode.ID, EpisodeID: episode.ID,
FeedID: feed.ID, FeedID: feedID,
Size: episode.Size, // Use estimated file size Size: episode.Size, // Use estimated file size
Status: model.EpisodeNew, Status: model.EpisodeNew,
} }

View File

@@ -54,7 +54,8 @@ func TestBadger_AddFeed(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
defer db.Close() defer db.Close()
err = db.AddFeed(testCtx, getFeed()) feed := getFeed()
err = db.AddFeed(testCtx, feed.ID, feed)
assert.NoError(t, err) assert.NoError(t, err)
} }
@@ -70,7 +71,7 @@ func TestBadger_GetFeed(t *testing.T) {
feed := getFeed() feed := getFeed()
feed.Episodes = nil feed.Episodes = nil
err = db.AddFeed(testCtx, feed) err = db.AddFeed(testCtx, feed.ID, feed)
require.NoError(t, err) require.NoError(t, err)
actual, err := db.GetFeed(testCtx, feed.ID) actual, err := db.GetFeed(testCtx, feed.ID)
@@ -90,7 +91,7 @@ func TestBadger_WalkFeeds(t *testing.T) {
feed := getFeed() feed := getFeed()
feed.Episodes = nil // These are not serialized to database 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) assert.NoError(t, err)
called := 0 called := 0
@@ -114,7 +115,7 @@ func TestBadger_DeleteFeed(t *testing.T) {
defer db.Close() defer db.Close()
feed := getFeed() feed := getFeed()
err = db.AddFeed(testCtx, feed) err = db.AddFeed(testCtx, feed.ID, feed)
require.NoError(t, err) require.NoError(t, err)
err = db.DeleteFeed(testCtx, feed.ID) err = db.DeleteFeed(testCtx, feed.ID)
@@ -147,7 +148,7 @@ func TestBadger_WalkFiles(t *testing.T) {
defer db.Close() defer db.Close()
feed := getFeed() feed := getFeed()
err = db.AddFeed(testCtx, feed) err = db.AddFeed(testCtx, feed.ID, feed)
assert.NoError(t, err) assert.NoError(t, err)
called := 0 called := 0
@@ -176,7 +177,7 @@ func TestBadger_UpdateFile(t *testing.T) {
defer db.Close() defer db.Close()
feed := getFeed() feed := getFeed()
err = db.AddFeed(testCtx, feed) err = db.AddFeed(testCtx, feed.ID, feed)
assert.NoError(t, err) assert.NoError(t, err)
err = db.UpdateFile(feed.ID, feed.Episodes[0].ID, func(file *model.File) error { err = db.UpdateFile(feed.ID, feed.Episodes[0].ID, func(file *model.File) error {

View File

@@ -25,7 +25,7 @@ type Storage interface {
// - Insert or update feed info // - Insert or update feed info
// - Append new episodes to the existing list of episodes // - Append new episodes to the existing list of episodes
// - Insert File model for each new episode // - 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 gets a feed by ID
GetFeed(ctx context.Context, feedID string) (*model.Feed, error) GetFeed(ctx context.Context, feedID string) (*model.Feed, error)