aboutsummaryrefslogtreecommitdiffhomepage
path: root/reader
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <fred@miniflux.net>2018-04-10 18:13:05 -0700
committerGravatar Frédéric Guillot <fred@miniflux.net>2018-04-10 18:13:05 -0700
commitdcbb5047b1cb9189ff270ead27a6e619e58f00c2 (patch)
tree6942644c53553529929c839587d51b4abbce3fa8 /reader
parent15202b8675544e12f935f9f8f906ee7f387facad (diff)
Add support for Dublin Core date in RDF feeds
Diffstat (limited to 'reader')
-rw-r--r--reader/rdf/parser_test.go55
-rw-r--r--reader/rdf/rdf.go19
2 files changed, 73 insertions, 1 deletions
diff --git a/reader/rdf/parser_test.go b/reader/rdf/parser_test.go
index 52c11a5..392b987 100644
--- a/reader/rdf/parser_test.go
+++ b/reader/rdf/parser_test.go
@@ -322,6 +322,61 @@ func TestParseItemWithoutLink(t *testing.T) {
}
}
+func TestParseItemWithDublicCoreDate(t *testing.T) {
+ data := `<?xml version="1.0" encoding="utf-8"?>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
+ <channel>
+ <title>Example</title>
+ <link>http://example.org</link>
+ </channel>
+
+ <item>
+ <title>Title</title>
+ <description>Test</description>
+ <link>http://example.org/test.html</link>
+ <dc:creator>Tester</dc:creator>
+ <dc:date>2018-04-10T05:00:00+00:00</dc:date>
+ </item>
+ </rdf:RDF>`
+
+ feed, err := Parse(bytes.NewBufferString(data))
+ if err != nil {
+ t.Error(err)
+ }
+
+ expectedDate := time.Date(2018, time.April, 10, 5, 0, 0, 0, time.UTC)
+ if !feed.Entries[0].Date.Equal(expectedDate) {
+ t.Errorf("Incorrect entry date, got: %v, want: %v", feed.Entries[0].Date, expectedDate)
+ }
+}
+
+func TestParseItemWithoutDate(t *testing.T) {
+ data := `<?xml version="1.0" encoding="utf-8"?>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
+ <channel>
+ <title>Example</title>
+ <link>http://example.org</link>
+ </channel>
+
+ <item>
+ <title>Title</title>
+ <description>Test</description>
+ <link>http://example.org/test.html</link>
+ </item>
+ </rdf:RDF>`
+
+ feed, err := Parse(bytes.NewBufferString(data))
+ if err != nil {
+ t.Error(err)
+ }
+
+ expectedDate := time.Now().In(time.Local)
+ diff := expectedDate.Sub(feed.Entries[0].Date)
+ if diff > time.Second {
+ t.Errorf("Incorrect entry date, got: %v", diff)
+ }
+}
+
func TestParseInvalidXml(t *testing.T) {
data := `garbage`
_, err := Parse(bytes.NewBufferString(data))
diff --git a/reader/rdf/rdf.go b/reader/rdf/rdf.go
index d9f3403..44ff0af 100644
--- a/reader/rdf/rdf.go
+++ b/reader/rdf/rdf.go
@@ -10,7 +10,9 @@ import (
"time"
"github.com/miniflux/miniflux/crypto"
+ "github.com/miniflux/miniflux/logger"
"github.com/miniflux/miniflux/model"
+ "github.com/miniflux/miniflux/reader/date"
"github.com/miniflux/miniflux/reader/sanitizer"
"github.com/miniflux/miniflux/url"
)
@@ -54,6 +56,7 @@ type rdfItem struct {
Link string `xml:"link"`
Description string `xml:"description"`
Creator string `xml:"creator"`
+ Date string `xml:"date"`
}
func (r *rdfItem) Transform() *model.Entry {
@@ -63,10 +66,24 @@ func (r *rdfItem) Transform() *model.Entry {
entry.URL = r.Link
entry.Content = r.Description
entry.Hash = getHash(r)
- entry.Date = time.Now()
+ entry.Date = getDate(r)
return entry
}
+func getDate(r *rdfItem) time.Time {
+ if r.Date != "" {
+ result, err := date.Parse(r.Date)
+ if err != nil {
+ logger.Error("rdf: %v", err)
+ return time.Now()
+ }
+
+ return result
+ }
+
+ return time.Now()
+}
+
func getHash(r *rdfItem) string {
value := r.Link
if value == "" {