aboutsummaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin
diff options
context:
space:
mode:
authorJoey Hess <joey@kitenet.net>2013-07-21 13:51:35 -0400
committerJoey Hess <joey@kitenet.net>2013-07-21 13:51:35 -0400
commit4c88a4d9d8fb62e8e4bea068a2546059bd1fa306 (patch)
tree8e2512a7df7fe530083dca2203b08eb4c6d2e111 /IkiWiki/Plugin
parent7d938559cb9994211d2917491c503f729d220abb (diff)
parent5c0a18e75a5bf9d6ce9da3a1a525117fe9ee8e47 (diff)
downloadikiwiki-4c88a4d9d8fb62e8e4bea068a2546059bd1fa306.tar
ikiwiki-4c88a4d9d8fb62e8e4bea068a2546059bd1fa306.tar.gz
Merge remote-tracking branch 'schmonz/fancypodcast'
Diffstat (limited to 'IkiWiki/Plugin')
-rw-r--r--IkiWiki/Plugin/aggregate.pm4
-rw-r--r--IkiWiki/Plugin/inline.pm55
-rw-r--r--IkiWiki/Plugin/meta.pm16
3 files changed, 54 insertions, 21 deletions
diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm
index 89da5c453..be6e8d476 100644
--- a/IkiWiki/Plugin/aggregate.pm
+++ b/IkiWiki/Plugin/aggregate.pm
@@ -593,6 +593,7 @@ sub aggregate (@) {
feed => $feed,
copyright => $f->copyright,
title => defined $entry->title ? decode_entities($entry->title) : "untitled",
+ author => defined $entry->author ? decode_entities($entry->author) : "",
link => $entry->link,
content => (defined $c && defined $c->body) ? $c->body : "",
guid => defined $entry->id ? $entry->id : time."_".$feed->{name},
@@ -690,6 +691,9 @@ sub write_page ($$$$$) {
}
$template->param(title => $params{title})
if defined $params{title} && length($params{title});
+ $template->param(author => $params{author})
+ if defined $params{author} && length($params{author}
+ && $params{author} ne $feed->{name});
$template->param(content => wikiescape(htmlabs($params{content},
defined $params{base} ? $params{base} : $feed->{feedurl})));
$template->param(name => $feed->{name});
diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm
index 8eb033951..455ac3ad5 100644
--- a/IkiWiki/Plugin/inline.pm
+++ b/IkiWiki/Plugin/inline.pm
@@ -611,6 +611,26 @@ sub absolute_urls ($$) {
return $ret;
}
+sub genenclosure {
+ my $itemtemplate=shift;
+ my $url=shift;
+ my $file=shift;
+
+ return unless $itemtemplate->query(name => "enclosure");
+
+ my $size=(srcfile_stat($file))[8];
+ my $mime="unknown";
+ eval q{use File::MimeInfo};
+ if (! $@) {
+ $mime = mimetype($file);
+ }
+ $itemtemplate->param(
+ enclosure => $url,
+ type => $mime,
+ length => $size,
+ );
+}
+
sub genfeed ($$$$$@) {
my $feedtype=shift;
my $feedurl=shift;
@@ -627,6 +647,7 @@ sub genfeed ($$$$$@) {
foreach my $p (@pages) {
my $u=URI->new(encode_utf8(urlto($p, "", 1)));
my $pcontent = absolute_urls(get_inline_content($p, $page), $url);
+ my $fancy_enclosure_seen = 0;
$itemtemplate->param(
title => pagetitle(basename($p)),
@@ -648,32 +669,23 @@ sub genfeed ($$$$$@) {
$itemtemplate->param(mdate_822 => date_822($pagestate{$p}{meta}{updated}));
$itemtemplate->param(mdate_3339 => date_3339($pagestate{$p}{meta}{updated}));
}
- }
- if ($itemtemplate->query(name => "enclosure")) {
- my $file=$pagesources{$p};
- my $type=pagetype($file);
- if (defined $type) {
- $itemtemplate->param(content => $pcontent);
- }
- else {
- my $size=(srcfile_stat($file))[8];
- my $mime="unknown";
- eval q{use File::MimeInfo};
- if (! $@) {
- $mime = mimetype($file);
- }
- $itemtemplate->param(
- enclosure => $u,
- type => $mime,
- length => $size,
- );
+ if (exists $pagestate{$p}{meta}{enclosure}) {
+ my $absurl = $pagestate{$p}{meta}{enclosure};
+ my $file = $pagestate{$p}{meta}{enclosurefile};
+ genenclosure($itemtemplate, $absurl, $file);
+ $fancy_enclosure_seen = 1;
}
}
- else {
- $itemtemplate->param(content => $pcontent);
+
+ my $file=$pagesources{$p};
+ unless ($fancy_enclosure_seen || defined(pagetype($file))) {
+ genenclosure($itemtemplate, $u, $file);
+ $itemtemplate->param(simplepodcast => 1);
}
+ $itemtemplate->param(content => $pcontent);
+
run_hooks(pagetemplate => sub {
shift->(page => $p, destpage => $page,
template => $itemtemplate);
@@ -694,6 +706,7 @@ sub genfeed ($$$$$@) {
feeddesc => $feeddesc,
guid => $guid,
feeddate => date_3339($lasttime),
+ feeddate_822 => date_822($lasttime),
feedurl => $feedurl,
);
run_hooks(pagetemplate => sub {
diff --git a/IkiWiki/Plugin/meta.pm b/IkiWiki/Plugin/meta.pm
index 7ea70b5d1..e7b96bdf1 100644
--- a/IkiWiki/Plugin/meta.pm
+++ b/IkiWiki/Plugin/meta.pm
@@ -121,6 +121,18 @@ sub preprocess (@) {
add_link($page, $value);
return "";
}
+ elsif ($key eq 'enclosure') {
+ my $link=bestlink($page, $value);
+ if (! length $link) {
+ error gettext("enclosure not found")
+ }
+ add_depends($page, $link, deptype("presence"));
+
+ $value=urlto($link, $page, 1);
+ $pagestate{$page}{meta}{enclosure}=$value;
+ $pagestate{$page}{meta}{enclosurefile}=$link;
+ # fallthrough
+ }
elsif ($key eq 'author') {
$pagestate{$page}{meta}{author}=$value;
if (exists $params{sortas}) {
@@ -318,6 +330,10 @@ sub pagetemplate (@) {
$template->param(title_overridden => 1);
}
+ if (exists $pagestate{$page}{meta}{enclosure}) {
+ $template->param(enclosure => HTML::Entities::encode_entities(IkiWiki::urlabs($pagestate{$page}{meta}{enclosure}, $config{url})));
+ }
+
foreach my $field (qw{authorurl}) {
eval q{use HTML::Entities};
$template->param($field => HTML::Entities::encode_entities($pagestate{$page}{meta}{$field}))