diff options
author | 2023-10-22 16:07:06 -0700 | |
---|---|---|
committer | 2023-10-22 18:05:37 -0700 | |
commit | eeaab72a9f76363eed3374bb784581b8e08c65d8 (patch) | |
tree | 43d4b2b7aa45881391429bf0fed4aef8908fbcfc /internal/reader/parser/format.go | |
parent | 14e25ab9fe09b9951b38e56af2bdff7a0737b280 (diff) | |
download | v2-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.go | 13 |
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() |