From eeaab72a9f76363eed3374bb784581b8e08c65d8 Mon Sep 17 00:00:00 2001 From: Frédéric Guillot Date: Sun, 22 Oct 2023 16:07:06 -0700 Subject: Refactor feed discovery and avoid an extra HTTP request if the url provided is the feed --- internal/reader/parser/parser.go | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'internal/reader/parser/parser.go') 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 } -- cgit v1.2.3