aboutsummaryrefslogtreecommitdiffhomepage
path: root/reader/rss/rss.go
diff options
context:
space:
mode:
Diffstat (limited to 'reader/rss/rss.go')
-rw-r--r--reader/rss/rss.go96
1 files changed, 30 insertions, 66 deletions
diff --git a/reader/rss/rss.go b/reader/rss/rss.go
index 3803798..fb0c5bf 100644
--- a/reader/rss/rss.go
+++ b/reader/rss/rss.go
@@ -15,6 +15,7 @@ import (
"miniflux.app/logger"
"miniflux.app/model"
"miniflux.app/reader/date"
+ "miniflux.app/reader/media"
"miniflux.app/reader/sanitizer"
"miniflux.app/url"
)
@@ -65,62 +66,20 @@ func (enclosure *rssEnclosure) Size() int64 {
}
type rssItem struct {
- GUID string `xml:"guid"`
- Title string `xml:"title"`
- Links []rssLink `xml:"link"`
- OriginalLink string `xml:"http://rssnamespace.org/feedburner/ext/1.0 origLink"`
- CommentLinks []rssCommentLink `xml:"comments"`
- Description string `xml:"description"`
- EncodedContent string `xml:"http://purl.org/rss/1.0/modules/content/ encoded"`
- PubDate string `xml:"pubDate"`
- Date string `xml:"http://purl.org/dc/elements/1.1/ date"`
- Authors []rssAuthor `xml:"author"`
- Creator string `xml:"http://purl.org/dc/elements/1.1/ creator"`
- EnclosureLinks []rssEnclosure `xml:"enclosure"`
- OrigEnclosureLink string `xml:"http://rssnamespace.org/feedburner/ext/1.0 origEnclosureLink"`
- MediaGroup []rssMediaGroup `xml:"http://search.yahoo.com/mrss/ group"`
- MediaContents []rssMediaContent `xml:"http://search.yahoo.com/mrss/ content"`
- MediaThumbnails []rssMediaThumbnails `xml:"http://search.yahoo.com/mrss/ thumbnail"`
-}
-
-type rssMediaGroup struct {
- MediaList []rssMediaContent `xml:"content"`
-}
-
-type rssMediaContent struct {
- URL string `xml:"url,attr"`
- Type string `xml:"type,attr"`
- FileSize string `xml:"fileSize,attr"`
- Medium string `xml:"medium,attr"`
-}
-
-func (mediaContent *rssMediaContent) MimeType() string {
- switch {
- case mediaContent.Type == "" && mediaContent.Medium == "image":
- return "image/*"
- case mediaContent.Type == "" && mediaContent.Medium == "video":
- return "video/*"
- case mediaContent.Type == "" && mediaContent.Medium == "audio":
- return "audio/*"
- case mediaContent.Type == "" && mediaContent.Medium == "video":
- return "video/*"
- case mediaContent.Type != "":
- return mediaContent.Type
- default:
- return "application/octet-stream"
- }
-}
-
-func (mediaContent *rssMediaContent) Size() int64 {
- if mediaContent.FileSize == "" {
- return 0
- }
- size, _ := strconv.ParseInt(mediaContent.FileSize, 10, 0)
- return size
-}
-
-type rssMediaThumbnails struct {
- URL string `xml:"url,attr"`
+ GUID string `xml:"guid"`
+ Title string `xml:"title"`
+ Links []rssLink `xml:"link"`
+ OriginalLink string `xml:"http://rssnamespace.org/feedburner/ext/1.0 origLink"`
+ CommentLinks []rssCommentLink `xml:"comments"`
+ Description string `xml:"description"`
+ EncodedContent string `xml:"http://purl.org/rss/1.0/modules/content/ encoded"`
+ PubDate string `xml:"pubDate"`
+ Date string `xml:"http://purl.org/dc/elements/1.1/ date"`
+ Authors []rssAuthor `xml:"author"`
+ Creator string `xml:"http://purl.org/dc/elements/1.1/ creator"`
+ EnclosureLinks []rssEnclosure `xml:"enclosure"`
+ OrigEnclosureLink string `xml:"http://rssnamespace.org/feedburner/ext/1.0 origEnclosureLink"`
+ media.Element
}
func (r *rssFeed) SiteURL() string {
@@ -253,13 +212,13 @@ func (r *rssItem) Enclosures() model.EnclosureList {
enclosures := make(model.EnclosureList, 0)
duplicates := make(map[string]bool, 0)
- for _, mediaThumbnail := range r.MediaThumbnails {
+ for _, mediaThumbnail := range r.AllMediaThumbnails() {
if _, found := duplicates[mediaThumbnail.URL]; !found {
duplicates[mediaThumbnail.URL] = true
enclosures = append(enclosures, &model.Enclosure{
URL: mediaThumbnail.URL,
- MimeType: "image/*",
- Size: 0,
+ MimeType: mediaThumbnail.MimeType(),
+ Size: mediaThumbnail.Size(),
})
}
}
@@ -285,13 +244,7 @@ func (r *rssItem) Enclosures() model.EnclosureList {
}
}
- for _, mediaContentItem := range r.MediaGroup {
- for _, mediaContent := range mediaContentItem.MediaList {
- r.MediaContents = append(r.MediaContents, mediaContent)
- }
- }
-
- for _, mediaContent := range r.MediaContents {
+ for _, mediaContent := range r.AllMediaContents() {
if _, found := duplicates[mediaContent.URL]; !found {
duplicates[mediaContent.URL] = true
enclosures = append(enclosures, &model.Enclosure{
@@ -302,6 +255,17 @@ func (r *rssItem) Enclosures() model.EnclosureList {
}
}
+ for _, mediaPeerLink := range r.AllMediaPeerLinks() {
+ if _, found := duplicates[mediaPeerLink.URL]; !found {
+ duplicates[mediaPeerLink.URL] = true
+ enclosures = append(enclosures, &model.Enclosure{
+ URL: mediaPeerLink.URL,
+ MimeType: mediaPeerLink.MimeType(),
+ Size: mediaPeerLink.Size(),
+ })
+ }
+ }
+
return enclosures
}