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:
committed by
Maksym Pavlenko
parent
8957f70b19
commit
4daecf4990
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user