diff options
author | Frédéric Guillot <fred@miniflux.net> | 2018-10-14 11:46:41 -0700 |
---|---|---|
committer | Frédéric Guillot <fred@miniflux.net> | 2018-10-14 11:46:41 -0700 |
commit | 5870f0426002c8e26a9ff472b23e15d7bf1235f7 (patch) | |
tree | d303a45c49d0433a5d2f7bed1bcce25d85a8bc0f /reader/subscription | |
parent | d5ff4191b6087b96b88221c6d939f73931001f2a (diff) |
Simplify feed parser and format detection
- Avoid doing multiple buffer copies
- Move parser and format detection logic to its own package
Diffstat (limited to 'reader/subscription')
-rw-r--r-- | reader/subscription/finder.go | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/reader/subscription/finder.go b/reader/subscription/finder.go index 027e810..c59c002 100644 --- a/reader/subscription/finder.go +++ b/reader/subscription/finder.go @@ -5,15 +5,15 @@ package subscription // import "miniflux.app/reader/subscription" import ( - "bytes" "fmt" "io" + "strings" "time" "miniflux.app/errors" "miniflux.app/http/client" "miniflux.app/logger" - "miniflux.app/reader/feed" + "miniflux.app/reader/parser" "miniflux.app/timer" "miniflux.app/url" @@ -56,20 +56,12 @@ func FindSubscriptions(websiteURL, userAgent, username, password string) (Subscr return nil, errors.NewLocalizedError(errEmptyBody) } - body, err := response.NormalizeBodyEncoding() - if err != nil { + if err := response.EnsureUnicodeBody(); err != nil { return nil, err } - var buffer bytes.Buffer - size, _ := io.Copy(&buffer, body) - if size == 0 { - return nil, errors.NewLocalizedError(errEmptyBody) - } - - reader := bytes.NewReader(buffer.Bytes()) - - if format := feed.DetectFeedFormat(reader); format != feed.FormatUnknown { + body := response.String() + if format := parser.DetectFeedFormat(body); format != parser.FormatUnknown { var subscriptions Subscriptions subscriptions = append(subscriptions, &Subscription{ Title: response.EffectiveURL, @@ -80,8 +72,7 @@ func FindSubscriptions(websiteURL, userAgent, username, password string) (Subscr return subscriptions, nil } - reader.Seek(0, io.SeekStart) - return parseDocument(response.EffectiveURL, bytes.NewReader(buffer.Bytes())) + return parseDocument(response.EffectiveURL, strings.NewReader(body)) } func parseDocument(websiteURL string, data io.Reader) (Subscriptions, error) { |