From 7591cf777606064f0bea86779be334e35b5737d2 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 25 Dec 2021 12:58:24 -0400 Subject: [PATCH] aggregate enclosures aggregate: When a feed has an enclosure that is an image, audio, or video, include the enclosure in the generated page. The enclosure is hotlinked from the original feed, not copied. My use case is to include a mastodon rss feed in amoung other rss feeds for users who don't use mastodon. It could also be used to aggregate together podcasts, etc. Other enclosure types than image, audio, video, could be added, perhaps a generic one? But these are the main ones. The template uses 50% width for image and video, because often attachments are in a high resolution, which will default to being perhaps too wide for the page, or taking up a lot of vertical space. By making it take up at most half the page width, that is avoided, while also leaving room for any sidebar. Sponsored-by: Shae Erisson on Patreon --- CHANGELOG | 7 +++++++ IkiWiki/Plugin/aggregate.pm | 12 ++++++++++++ templates/aggregatepost.tmpl | 11 +++++++++++ 3 files changed, 30 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 9360a8f26..f33c3bd14 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,10 @@ +ikiwiki (3.20200202.4) UNRELEASED; urgency=medium + + * aggregate: When a feed has an enclosure that is an image, audio, or + video, include the enclosure in the generated page. + + -- Joey Hess Sat, 25 Dec 2021 12:41:34 -0400 + ikiwiki (3.20200202.3) upstream; urgency=medium [ Amitai Schleier ] diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm index 8f0870e2e..01e026c88 100644 --- a/IkiWiki/Plugin/aggregate.pm +++ b/IkiWiki/Plugin/aggregate.pm @@ -590,6 +590,10 @@ sub aggregate (@) { title => defined $entry->title ? decode_entities($entry->title) : "untitled", author => defined $entry->author ? decode_entities($entry->author) : "", link => $entry->link, + enclosureurl => defined $entry->enclosure ? $entry->enclosure->url : "", + enclosureimage => (defined $entry->enclosure && $entry->enclosure->type =~ m/image\//) ? "1" : "", + enclosureaudio => (defined $entry->enclosure && $entry->enclosure->type =~ m/audio\//) ? "1" : "", + enclosurevideo => (defined $entry->enclosure && $entry->enclosure->type =~ m/video\//) ? "1" : "", content => (defined $c && defined $c->body) ? $c->body : "", guid => defined $entry->id ? $entry->id : time."_".$feed->{name}, ctime => $entry->issued ? ($entry->issued->epoch || time) : time, @@ -700,6 +704,14 @@ sub write_page ($$$$$) { if defined $params{copyright} && length $params{copyright}; $template->param(permalink => IkiWiki::urlabs($params{link}, $feed->{feedurl})) if defined $params{link}; + $template->param(enclosureurl => $params{enclosureurl}) + if defined $params{enclosureurl} && length $params{enclosureurl}; + $template->param(enclosureimage => $params{enclosureimage}) + if defined $params{enclosureimage} && length $params{enclosureimage}; + $template->param(enclosureaudio => $params{enclosureaudio}) + if defined $params{enclosureaudio} && length $params{enclosureaudio}; + $template->param(enclosurevideo => $params{enclosurevideo}) + if defined $params{enclosurevideo} && length $params{enclosurevideo}; if (ref $feed->{tags}) { $template->param(tags => [map { tag => $_ }, @{$feed->{tags}}]); } diff --git a/templates/aggregatepost.tmpl b/templates/aggregatepost.tmpl index 5a0f6e780..0d2c2d94e 100644 --- a/templates/aggregatepost.tmpl +++ b/templates/aggregatepost.tmpl @@ -1,4 +1,15 @@ + + + + + + + + + [[!tag ]] -- 2.39.5