diff options
Diffstat (limited to 'internal/reader/parser/parser.go')
-rw-r--r-- | internal/reader/parser/parser.go | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/internal/reader/parser/parser.go b/internal/reader/parser/parser.go index 60b194d4..2843888b 100644 --- a/internal/reader/parser/parser.go +++ b/internal/reader/parser/parser.go @@ -5,7 +5,7 @@ package parser // import "miniflux.app/v2/internal/reader/parser" import ( "errors" - "strings" + "io" "miniflux.app/v2/internal/model" "miniflux.app/v2/internal/reader/atom" @@ -17,16 +17,21 @@ import ( var ErrFeedFormatNotDetected = errors.New("parser: unable to detect feed format") // ParseFeed analyzes the input data and returns a normalized feed object. -func ParseFeed(baseURL, data string) (*model.Feed, error) { - switch DetectFeedFormat(data) { +func ParseFeed(baseURL string, r io.ReadSeeker) (*model.Feed, error) { + r.Seek(0, io.SeekStart) + switch DetectFeedFormat(r) { case FormatAtom: - return atom.Parse(baseURL, strings.NewReader(data)) + r.Seek(0, io.SeekStart) + return atom.Parse(baseURL, r) case FormatRSS: - return rss.Parse(baseURL, strings.NewReader(data)) + r.Seek(0, io.SeekStart) + return rss.Parse(baseURL, r) case FormatJSON: - return json.Parse(baseURL, strings.NewReader(data)) + r.Seek(0, io.SeekStart) + return json.Parse(baseURL, r) case FormatRDF: - return rdf.Parse(baseURL, strings.NewReader(data)) + r.Seek(0, io.SeekStart) + return rdf.Parse(baseURL, r) default: return nil, ErrFeedFormatNotDetected } |