aboutsummaryrefslogtreecommitdiff
path: root/internal/reader/parser/parser.go
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <f@miniflux.net> 2023-10-22 16:07:06 -0700
committerGravatar Frédéric Guillot <f@miniflux.net> 2023-10-22 18:05:37 -0700
commiteeaab72a9f76363eed3374bb784581b8e08c65d8 (patch)
tree43d4b2b7aa45881391429bf0fed4aef8908fbcfc /internal/reader/parser/parser.go
parent14e25ab9fe09b9951b38e56af2bdff7a0737b280 (diff)
downloadv2-eeaab72a9f76363eed3374bb784581b8e08c65d8.tar.gz
v2-eeaab72a9f76363eed3374bb784581b8e08c65d8.tar.zst
v2-eeaab72a9f76363eed3374bb784581b8e08c65d8.zip
Refactor feed discovery and avoid an extra HTTP request if the url provided is the feed
Diffstat (limited to 'internal/reader/parser/parser.go')
-rw-r--r--internal/reader/parser/parser.go19
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
}