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)
|
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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user