diff options
author | 2018-02-27 21:08:32 -0800 | |
---|---|---|
committer | 2018-02-27 21:08:32 -0800 | |
commit | 953d0a2dc05714c22f7c9c389a860fd38c07b66e (patch) | |
tree | dbbbb0659ed8e69e02c9b977b63550d1192d6be2 /reader/feed/handler.go | |
parent | 9694861cb6ad08ded824b9bf04ef19a3a168d7b9 (diff) |
Support localized feed errors generated by background workers
Diffstat (limited to 'reader/feed/handler.go')
-rw-r--r-- | reader/feed/handler.go | 41 |
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} } |