diff options
Diffstat (limited to 'reader')
-rw-r--r-- | reader/atom/parser.go | 2 | ||||
-rw-r--r-- | reader/atom/parser_test.go | 6 | ||||
-rw-r--r-- | reader/feed/handler.go | 41 | ||||
-rw-r--r-- | reader/feed/parser.go | 8 | ||||
-rw-r--r-- | reader/json/parser.go | 2 | ||||
-rw-r--r-- | reader/json/parser_test.go | 6 | ||||
-rw-r--r-- | reader/opml/parser.go | 2 | ||||
-rw-r--r-- | reader/opml/parser_test.go | 6 | ||||
-rw-r--r-- | reader/rdf/parser.go | 2 | ||||
-rw-r--r-- | reader/rdf/parser_test.go | 6 | ||||
-rw-r--r-- | reader/rss/parser.go | 2 | ||||
-rw-r--r-- | reader/rss/parser_test.go | 6 |
12 files changed, 34 insertions, 55 deletions
diff --git a/reader/atom/parser.go b/reader/atom/parser.go index 94b50c7..9a41dac 100644 --- a/reader/atom/parser.go +++ b/reader/atom/parser.go @@ -14,7 +14,7 @@ import ( ) // Parse returns a normalized feed struct from a Atom feed. -func Parse(data io.Reader) (*model.Feed, error) { +func Parse(data io.Reader) (*model.Feed, *errors.LocalizedError) { atomFeed := new(atomFeed) decoder := xml.NewDecoder(data) decoder.CharsetReader = encoding.CharsetReader diff --git a/reader/atom/parser_test.go b/reader/atom/parser_test.go index ec9186c..bfd3d3a 100644 --- a/reader/atom/parser_test.go +++ b/reader/atom/parser_test.go @@ -8,8 +8,6 @@ import ( "bytes" "testing" "time" - - "github.com/miniflux/miniflux/errors" ) func TestParseAtomSample(t *testing.T) { @@ -430,8 +428,4 @@ func TestParseInvalidXml(t *testing.T) { if err == nil { t.Error("Parse should returns an error") } - - if _, ok := err.(errors.LocalizedError); !ok { - t.Error("The error returned must be a LocalizedError") - } } 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} } diff --git a/reader/feed/parser.go b/reader/feed/parser.go index 70c81e3..f76a071 100644 --- a/reader/feed/parser.go +++ b/reader/feed/parser.go @@ -7,11 +7,11 @@ package feed import ( "bytes" "encoding/xml" - "errors" "io" "strings" "time" + "github.com/miniflux/miniflux/errors" "github.com/miniflux/miniflux/logger" "github.com/miniflux/miniflux/model" "github.com/miniflux/miniflux/reader/atom" @@ -66,13 +66,13 @@ func DetectFeedFormat(r io.Reader) string { return FormatUnknown } -func parseFeed(r io.Reader) (*model.Feed, error) { +func parseFeed(r io.Reader) (*model.Feed, *errors.LocalizedError) { defer timer.ExecutionTime(time.Now(), "[Feed:ParseFeed]") var buffer bytes.Buffer size, _ := io.Copy(&buffer, r) if size == 0 { - return nil, errors.New("This feed is empty") + return nil, errors.NewLocalizedError("This feed is empty") } str := stripInvalidXMLCharacters(buffer.String()) @@ -90,7 +90,7 @@ func parseFeed(r io.Reader) (*model.Feed, error) { case FormatRDF: return rdf.Parse(reader) default: - return nil, errors.New("Unsupported feed format") + return nil, errors.NewLocalizedError("Unsupported feed format") } } diff --git a/reader/json/parser.go b/reader/json/parser.go index 52b4809..ddd3e4f 100644 --- a/reader/json/parser.go +++ b/reader/json/parser.go @@ -13,7 +13,7 @@ import ( ) // Parse returns a normalized feed struct from a JON feed. -func Parse(data io.Reader) (*model.Feed, error) { +func Parse(data io.Reader) (*model.Feed, *errors.LocalizedError) { feed := new(jsonFeed) decoder := json.NewDecoder(data) if err := decoder.Decode(&feed); err != nil { diff --git a/reader/json/parser_test.go b/reader/json/parser_test.go index a3d5b5b..19c12c9 100644 --- a/reader/json/parser_test.go +++ b/reader/json/parser_test.go @@ -9,8 +9,6 @@ import ( "strings" "testing" "time" - - "github.com/miniflux/miniflux/errors" ) func TestParseJsonFeed(t *testing.T) { @@ -377,8 +375,4 @@ func TestParseInvalidJSON(t *testing.T) { if err == nil { t.Error("Parse should returns an error") } - - if _, ok := err.(errors.LocalizedError); !ok { - t.Error("The error returned must be a LocalizedError") - } } diff --git a/reader/opml/parser.go b/reader/opml/parser.go index 140acc5..b167d47 100644 --- a/reader/opml/parser.go +++ b/reader/opml/parser.go @@ -13,7 +13,7 @@ import ( ) // Parse reads an OPML file and returns a SubcriptionList. -func Parse(data io.Reader) (SubcriptionList, error) { +func Parse(data io.Reader) (SubcriptionList, *errors.LocalizedError) { feeds := new(opml) decoder := xml.NewDecoder(data) decoder.CharsetReader = encoding.CharsetReader diff --git a/reader/opml/parser_test.go b/reader/opml/parser_test.go index 12c8048..e00d578 100644 --- a/reader/opml/parser_test.go +++ b/reader/opml/parser_test.go @@ -7,8 +7,6 @@ package opml import ( "bytes" "testing" - - "github.com/miniflux/miniflux/errors" ) func TestParseOpmlWithoutCategories(t *testing.T) { @@ -130,8 +128,4 @@ func TestParseInvalidXML(t *testing.T) { if err == nil { t.Error("Parse should generate an error") } - - if _, ok := err.(errors.LocalizedError); !ok { - t.Error("The error returned must be a LocalizedError") - } } diff --git a/reader/rdf/parser.go b/reader/rdf/parser.go index da82639..06cacec 100644 --- a/reader/rdf/parser.go +++ b/reader/rdf/parser.go @@ -14,7 +14,7 @@ import ( ) // Parse returns a normalized feed struct from a RDF feed. -func Parse(data io.Reader) (*model.Feed, error) { +func Parse(data io.Reader) (*model.Feed, *errors.LocalizedError) { feed := new(rdfFeed) decoder := xml.NewDecoder(data) decoder.CharsetReader = encoding.CharsetReader diff --git a/reader/rdf/parser_test.go b/reader/rdf/parser_test.go index e025e53..52c11a5 100644 --- a/reader/rdf/parser_test.go +++ b/reader/rdf/parser_test.go @@ -9,8 +9,6 @@ import ( "strings" "testing" "time" - - "github.com/miniflux/miniflux/errors" ) func TestParseRDFSample(t *testing.T) { @@ -330,8 +328,4 @@ func TestParseInvalidXml(t *testing.T) { if err == nil { t.Error("Parse should returns an error") } - - if _, ok := err.(errors.LocalizedError); !ok { - t.Error("The error returned must be a LocalizedError") - } } diff --git a/reader/rss/parser.go b/reader/rss/parser.go index f5de561..328cde2 100644 --- a/reader/rss/parser.go +++ b/reader/rss/parser.go @@ -14,7 +14,7 @@ import ( ) // Parse returns a normalized feed struct from a RSS feed. -func Parse(data io.Reader) (*model.Feed, error) { +func Parse(data io.Reader) (*model.Feed, *errors.LocalizedError) { feed := new(rssFeed) decoder := xml.NewDecoder(data) decoder.CharsetReader = encoding.CharsetReader diff --git a/reader/rss/parser_test.go b/reader/rss/parser_test.go index 7d72417..7bf9f75 100644 --- a/reader/rss/parser_test.go +++ b/reader/rss/parser_test.go @@ -8,8 +8,6 @@ import ( "bytes" "testing" "time" - - "github.com/miniflux/miniflux/errors" ) func TestParseRss2Sample(t *testing.T) { @@ -564,8 +562,4 @@ func TestParseInvalidXml(t *testing.T) { if err == nil { t.Error("Parse should returns an error") } - - if _, ok := err.(errors.LocalizedError); !ok { - t.Error("The error returned must be a LocalizedError") - } } |