Use multierr
This commit is contained in:
24
multierr/multierr.go
Normal file
24
multierr/multierr.go
Normal file
@@ -0,0 +1,24 @@
|
||||
package multierr
|
||||
|
||||
import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Err []error
|
||||
|
||||
func (me Err) Error() string {
|
||||
var s strings.Builder
|
||||
for _, err := range me {
|
||||
s.WriteString("\n")
|
||||
s.WriteString(err.Error())
|
||||
}
|
||||
return s.String()
|
||||
}
|
||||
|
||||
func (me Err) Len() int {
|
||||
return len(me)
|
||||
}
|
||||
|
||||
func (me *Err) Add(err error) {
|
||||
*me = append(*me, err)
|
||||
}
|
||||
@@ -18,6 +18,7 @@ import (
|
||||
"github.com/jinzhu/gorm"
|
||||
"github.com/mmcdole/gofeed"
|
||||
|
||||
"go.senan.xyz/gonic/multierr"
|
||||
"go.senan.xyz/gonic/server/db"
|
||||
"go.senan.xyz/gonic/server/scanner/tags"
|
||||
)
|
||||
@@ -196,8 +197,9 @@ func (p *Podcasts) RefreshPodcasts() error {
|
||||
if err := p.DB.Find(&podcasts).Error; err != nil {
|
||||
return fmt.Errorf("find podcasts: %w", err)
|
||||
}
|
||||
if errs := p.refreshPodcasts(podcasts); len(errs) > 0 {
|
||||
return fmt.Errorf("refresh podcasts: %v", errs)
|
||||
var errs *multierr.Err
|
||||
if errors.As(p.refreshPodcasts(podcasts), &errs) && errs.Len() > 0 {
|
||||
return fmt.Errorf("refresh podcasts: %w", errs)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -211,23 +213,24 @@ func (p *Podcasts) RefreshPodcastsForUser(userID int) error {
|
||||
if err != nil {
|
||||
return fmt.Errorf("find podcasts: %w", err)
|
||||
}
|
||||
if errs := p.refreshPodcasts(podcasts); len(errs) > 0 {
|
||||
return fmt.Errorf("refresh podcasts: %v", errs)
|
||||
var errs *multierr.Err
|
||||
if errors.As(p.refreshPodcasts(podcasts), &errs) && errs.Len() > 0 {
|
||||
return fmt.Errorf("refresh podcasts: %w", errs)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *Podcasts) refreshPodcasts(podcasts []*db.Podcast) []error {
|
||||
var errs []error
|
||||
func (p *Podcasts) refreshPodcasts(podcasts []*db.Podcast) error {
|
||||
var errs multierr.Err
|
||||
for _, podcast := range podcasts {
|
||||
fp := gofeed.NewParser()
|
||||
feed, err := fp.ParseURL(podcast.URL)
|
||||
if err != nil {
|
||||
errs = append(errs, fmt.Errorf("refreshing podcast with url %q: %w", podcast.URL, err))
|
||||
errs.Add(fmt.Errorf("refreshing podcast with url %q: %w", podcast.URL, err))
|
||||
continue
|
||||
}
|
||||
if err = p.AddNewEpisodes(podcast.ID, feed.Items); err != nil {
|
||||
errs = append(errs, fmt.Errorf("adding episodes: %w", err))
|
||||
errs.Add(fmt.Errorf("adding episodes: %w", err))
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user