aboutsummaryrefslogtreecommitdiff
path: root/internal/reader/parser/format.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/format.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/format.go')
-rw-r--r--internal/reader/parser/format.go13
1 files changed, 9 insertions, 4 deletions
diff --git a/internal/reader/parser/format.go b/internal/reader/parser/format.go
index 77a49d2c..1019d164 100644
--- a/internal/reader/parser/format.go
+++ b/internal/reader/parser/format.go
@@ -4,8 +4,9 @@
package parser // import "miniflux.app/v2/internal/reader/parser"
import (
+ "bytes"
"encoding/xml"
- "strings"
+ "io"
rxml "miniflux.app/v2/internal/reader/xml"
)
@@ -20,12 +21,16 @@ const (
)
// DetectFeedFormat tries to guess the feed format from input data.
-func DetectFeedFormat(data string) string {
- if strings.HasPrefix(strings.TrimSpace(data), "{") {
+func DetectFeedFormat(r io.ReadSeeker) string {
+ data := make([]byte, 512)
+ r.Read(data)
+
+ if bytes.HasPrefix(bytes.TrimSpace(data), []byte("{")) {
return FormatJSON
}
- decoder := rxml.NewDecoder(strings.NewReader(data))
+ r.Seek(0, io.SeekStart)
+ decoder := rxml.NewDecoder(r)
for {
token, _ := decoder.Token()