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/jinzhu/gorm"
|
||||||
"github.com/mmcdole/gofeed"
|
"github.com/mmcdole/gofeed"
|
||||||
|
|
||||||
|
"go.senan.xyz/gonic/multierr"
|
||||||
"go.senan.xyz/gonic/server/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
"go.senan.xyz/gonic/server/scanner/tags"
|
"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 {
|
if err := p.DB.Find(&podcasts).Error; err != nil {
|
||||||
return fmt.Errorf("find podcasts: %w", err)
|
return fmt.Errorf("find podcasts: %w", err)
|
||||||
}
|
}
|
||||||
if errs := p.refreshPodcasts(podcasts); len(errs) > 0 {
|
var errs *multierr.Err
|
||||||
return fmt.Errorf("refresh podcasts: %v", errs)
|
if errors.As(p.refreshPodcasts(podcasts), &errs) && errs.Len() > 0 {
|
||||||
|
return fmt.Errorf("refresh podcasts: %w", errs)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -211,23 +213,24 @@ func (p *Podcasts) RefreshPodcastsForUser(userID int) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("find podcasts: %w", err)
|
return fmt.Errorf("find podcasts: %w", err)
|
||||||
}
|
}
|
||||||
if errs := p.refreshPodcasts(podcasts); len(errs) > 0 {
|
var errs *multierr.Err
|
||||||
return fmt.Errorf("refresh podcasts: %v", errs)
|
if errors.As(p.refreshPodcasts(podcasts), &errs) && errs.Len() > 0 {
|
||||||
|
return fmt.Errorf("refresh podcasts: %w", errs)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Podcasts) refreshPodcasts(podcasts []*db.Podcast) []error {
|
func (p *Podcasts) refreshPodcasts(podcasts []*db.Podcast) error {
|
||||||
var errs []error
|
var errs multierr.Err
|
||||||
for _, podcast := range podcasts {
|
for _, podcast := range podcasts {
|
||||||
fp := gofeed.NewParser()
|
fp := gofeed.NewParser()
|
||||||
feed, err := fp.ParseURL(podcast.URL)
|
feed, err := fp.ParseURL(podcast.URL)
|
||||||
if err != nil {
|
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
|
continue
|
||||||
}
|
}
|
||||||
if err = p.AddNewEpisodes(podcast.ID, feed.Items); err != nil {
|
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
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user