diff --git a/doc/changelog.md b/doc/changelog.md index 416db97..d1ddc20 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -3,6 +3,7 @@ - (fix) articles not resetting immediately after feed/filter selection (thank to @scratchmex for the report) - (fix) crash on empty article list with article is selected (thanks to @rksvc) - (fix) invalid article title in RSS feeds with media containing titles (thanks to @bwwu-git for the report) +- (fix) missing image enclosures in certain RSS feeds (thanks to @palinek for the report) # v2.6 (2025-11-24) diff --git a/src/parser/rss.go b/src/parser/rss.go index a47ea0e..f941cac 100644 --- a/src/parser/rss.go +++ b/src/parser/rss.go @@ -85,6 +85,11 @@ func ParseRSS(r io.Reader) (*Feed, error) { break } } + for _, e := range srcitem.Enclosures { + if strings.HasPrefix(e.Type, "image/") { + mediaLinks = append(mediaLinks, MediaLink{URL: e.URL, Type: "image"}) + } + } permalink := "" if srcitem.GUID.IsPermaLink == "true" { diff --git a/src/parser/rss_test.go b/src/parser/rss_test.go index 91a9519..8ce413a 100644 --- a/src/parser/rss_test.go +++ b/src/parser/rss_test.go @@ -248,6 +248,35 @@ func TestRSSIsPermalink(t *testing.T) { } } +// https://github.com/nkanaev/yarr/issues/284 +func TestRSSEnclosureImage(t *testing.T) { + feed, _ := Parse(strings.NewReader(` + + + + + Post with image + http://example.com/post/1 + + + + + `)) + if len(feed.Items[0].MediaLinks) != 1 { + t.Fatalf("Expected 1 media link, got %d: %#v", len(feed.Items[0].MediaLinks), feed.Items[0].MediaLinks) + } + have := feed.Items[0].MediaLinks[0] + want := MediaLink{ + URL: "http://example.com/photo.jpg", + Type: "image", + } + if !reflect.DeepEqual(want, have) { + t.Logf("want: %#v", want) + t.Logf("have: %#v", have) + t.FailNow() + } +} + func TestRSSMultipleMedia(t *testing.T) { feed, _ := Parse(strings.NewReader(`