aboutsummaryrefslogtreecommitdiffhomepage
path: root/reader/feed/handler.go
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <fred@miniflux.net>2018-02-27 21:08:32 -0800
committerGravatar Frédéric Guillot <fred@miniflux.net>2018-02-27 21:08:32 -0800
commit953d0a2dc05714c22f7c9c389a860fd38c07b66e (patch)
treedbbbb0659ed8e69e02c9b977b63550d1192d6be2 /reader/feed/handler.go
parent9694861cb6ad08ded824b9bf04ef19a3a168d7b9 (diff)
Support localized feed errors generated by background workers
Diffstat (limited to 'reader/feed/handler.go')
-rw-r--r--reader/feed/handler.go41
1 files changed, 25 insertions, 16 deletions
diff --git a/reader/feed/handler.go b/reader/feed/handler.go
index d6ac84e..516593c 100644
--- a/reader/feed/handler.go
+++ b/reader/feed/handler.go
@@ -10,6 +10,7 @@ import (
"github.com/miniflux/miniflux/errors"
"github.com/miniflux/miniflux/http"
+ "github.com/miniflux/miniflux/locale"
"github.com/miniflux/miniflux/logger"
"github.com/miniflux/miniflux/model"
"github.com/miniflux/miniflux/reader/icon"
@@ -30,7 +31,8 @@ var (
// Handler contains all the logic to create and refresh feeds.
type Handler struct {
- store *storage.Storage
+ store *storage.Storage
+ translator *locale.Translator
}
// CreateFeed fetch, parse and store a new feed.
@@ -44,7 +46,7 @@ func (h *Handler) CreateFeed(userID, categoryID int64, url string, crawler bool)
client := http.NewClient(url)
response, err := client.Get()
if err != nil {
- if _, ok := err.(errors.LocalizedError); ok {
+ if _, ok := err.(*errors.LocalizedError); ok {
return nil, err
}
return nil, errors.NewLocalizedError(errRequestFailed, err)
@@ -68,9 +70,9 @@ func (h *Handler) CreateFeed(userID, categoryID int64, url string, crawler bool)
return nil, errors.NewLocalizedError(errEncoding, err)
}
- subscription, err := parseFeed(body)
- if err != nil {
- return nil, err
+ subscription, feedErr := parseFeed(body)
+ if feedErr != nil {
+ return nil, feedErr
}
feedProcessor := processor.NewFeedProcessor(userID, h.store, subscription)
@@ -110,6 +112,13 @@ func (h *Handler) CreateFeed(userID, categoryID int64, url string, crawler bool)
// RefreshFeed fetch and update a feed if necessary.
func (h *Handler) RefreshFeed(userID, feedID int64) error {
defer timer.ExecutionTime(time.Now(), fmt.Sprintf("[Handler:RefreshFeed] feedID=%d", feedID))
+ userLanguage, err := h.store.UserLanguage(userID)
+ if err != nil {
+ logger.Error("[Handler:RefreshFeed] %v", err)
+ userLanguage = "en_US"
+ }
+
+ currentLanguage := h.translator.GetLanguage(userLanguage)
originalFeed, err := h.store.FeedByID(userID, feedID)
if err != nil {
@@ -124,14 +133,14 @@ func (h *Handler) RefreshFeed(userID, feedID int64) error {
response, err := client.Get()
if err != nil {
var customErr errors.LocalizedError
- if lerr, ok := err.(errors.LocalizedError); ok {
- customErr = lerr
+ if lerr, ok := err.(*errors.LocalizedError); ok {
+ customErr = *lerr
} else {
- customErr = errors.NewLocalizedError(errRequestFailed, err)
+ customErr = *errors.NewLocalizedError(errRequestFailed, err)
}
originalFeed.ParsingErrorCount++
- originalFeed.ParsingErrorMsg = customErr.Error()
+ originalFeed.ParsingErrorMsg = customErr.Localize(currentLanguage)
h.store.UpdateFeed(originalFeed)
return customErr
}
@@ -141,7 +150,7 @@ func (h *Handler) RefreshFeed(userID, feedID int64) error {
if response.HasServerFailure() {
err := errors.NewLocalizedError(errServerFailure, response.StatusCode)
originalFeed.ParsingErrorCount++
- originalFeed.ParsingErrorMsg = err.Error()
+ originalFeed.ParsingErrorMsg = err.Localize(currentLanguage)
h.store.UpdateFeed(originalFeed)
return err
}
@@ -153,7 +162,7 @@ func (h *Handler) RefreshFeed(userID, feedID int64) error {
if response.ContentLength == 0 {
err := errors.NewLocalizedError(errEmptyFeed)
originalFeed.ParsingErrorCount++
- originalFeed.ParsingErrorMsg = err.Error()
+ originalFeed.ParsingErrorMsg = err.Localize(currentLanguage)
h.store.UpdateFeed(originalFeed)
return err
}
@@ -163,10 +172,10 @@ func (h *Handler) RefreshFeed(userID, feedID int64) error {
return errors.NewLocalizedError(errEncoding, err)
}
- subscription, err := parseFeed(body)
- if err != nil {
+ subscription, parseErr := parseFeed(body)
+ if parseErr != nil {
originalFeed.ParsingErrorCount++
- originalFeed.ParsingErrorMsg = err.Error()
+ originalFeed.ParsingErrorMsg = parseErr.Localize(currentLanguage)
h.store.UpdateFeed(originalFeed)
return err
}
@@ -209,6 +218,6 @@ func (h *Handler) RefreshFeed(userID, feedID int64) error {
}
// NewFeedHandler returns a feed handler.
-func NewFeedHandler(store *storage.Storage) *Handler {
- return &Handler{store: store}
+func NewFeedHandler(store *storage.Storage, translator *locale.Translator) *Handler {
+ return &Handler{store, translator}
}