aboutsummaryrefslogtreecommitdiffhomepage
path: root/reader/atom
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <fred@miniflux.net>2017-12-13 20:16:15 -0800
committerGravatar Frédéric Guillot <fred@miniflux.net>2017-12-13 20:16:15 -0800
commit827683ab59131ec38ed7cfa268bcaa6dc77d1412 (patch)
tree8461fa67142378b050fde4ee39d393e18ab71aaf /reader/atom
parent84d912c9794eaaef0f06638d9d23716f4e02b42f (diff)
Make sure that item URL are absolute
Diffstat (limited to 'reader/atom')
-rw-r--r--reader/atom/atom.go15
-rw-r--r--reader/atom/parser_test.go26
2 files changed, 36 insertions, 5 deletions
diff --git a/reader/atom/atom.go b/reader/atom/atom.go
index f72a150..315961e 100644
--- a/reader/atom/atom.go
+++ b/reader/atom/atom.go
@@ -14,6 +14,7 @@ import (
"github.com/miniflux/miniflux/helper"
"github.com/miniflux/miniflux/model"
"github.com/miniflux/miniflux/reader/date"
+ "github.com/miniflux/miniflux/url"
)
type atomFeed struct {
@@ -70,10 +71,19 @@ func (a *atomFeed) Transform() *model.Feed {
for _, entry := range a.Entries {
item := entry.Transform()
+ entryURL, err := url.AbsoluteURL(feed.SiteURL, item.URL)
+ if err == nil {
+ item.URL = entryURL
+ }
+
if item.Author == "" {
item.Author = getAuthor(a.Author)
}
+ if item.Title == "" {
+ item.Title = item.URL
+ }
+
feed.Entries = append(feed.Entries, item)
}
@@ -89,11 +99,6 @@ func (a *atomEntry) Transform() *model.Entry {
entry.Content = getContent(a)
entry.Title = strings.TrimSpace(a.Title)
entry.Enclosures = getEnclosures(a)
-
- if entry.Title == "" {
- entry.Title = entry.URL
- }
-
return entry
}
diff --git a/reader/atom/parser_test.go b/reader/atom/parser_test.go
index 66ca0f0..be07383 100644
--- a/reader/atom/parser_test.go
+++ b/reader/atom/parser_test.go
@@ -152,6 +152,32 @@ func TestParseFeedURL(t *testing.T) {
}
}
+func TestParseEntryWithRelativeURL(t *testing.T) {
+ data := `<?xml version="1.0" encoding="utf-8"?>
+ <feed xmlns="http://www.w3.org/2005/Atom">
+ <title>Example Feed</title>
+ <link href="http://example.org/"/>
+
+ <entry>
+ <title>Test</title>
+ <link href="something.html"/>
+ <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
+ <updated>2003-12-13T18:30:02Z</updated>
+ <summary>Some text.</summary>
+ </entry>
+
+ </feed>`
+
+ feed, err := Parse(bytes.NewBufferString(data))
+ if err != nil {
+ t.Error(err)
+ }
+
+ if feed.Entries[0].URL != "http://example.org/something.html" {
+ t.Errorf("Incorrect entry URL, got: %s", feed.Entries[0].URL)
+ }
+}
+
func TestParseEntryTitleWithWhitespaces(t *testing.T) {
data := `<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">