1
0
Fork 0
mirror of https://github.com/miniflux/v2.git synced 2025-06-27 16:36:00 +00:00

Refactor feed discovery and avoid an extra HTTP request if the url provided is the feed

This commit is contained in:
Frédéric Guillot 2023-10-22 16:07:06 -07:00
parent 14e25ab9fe
commit eeaab72a9f
31 changed files with 455 additions and 200 deletions

View file

@ -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
}