- # for pagination
- ($first_commit, $last_commit);
-}
-
-# private functions below
-sub get_feedopts {
- my ($ctx) = @_;
- my $pi_config = $ctx->{pi_config};
- my $inbox = $ctx->{inbox};
- my $obj = $ctx->{-inbox};
- my %rv = ( description => $obj->description );
-
- $rv{address} = $obj->{address};
- $rv{id_addr} = $obj->{-primary_address};
- my $url_base = $obj->base_url($ctx->{env});
- if (my $mid = $ctx->{mid}) { # per-thread feed:
- $rv{atomurl} = "$url_base$mid/t.atom";
- } else {
- $rv{atomurl} = $url_base."new.atom";
- }
- $rv{url} ||= $url_base;
- $rv{midurl} = $url_base;
-
- \%rv;
-}
-
-sub feed_updated {
- my ($date, $ts) = @_;
- my @t = eval { strptime($date) } if defined $date;
- @t = gmtime($ts || time) unless scalar @t;
-
- '<updated>' . strftime(DATEFMT, @t) . '</updated>';
-}
-
-# returns undef or string
-sub feed_entry {
- my ($feed_opts, $add, $ibx) = @_;
-
- my $mime = do_cat_mail($ibx, $add) or return;
- my $url = $feed_opts->{url};
- my $midurl = $feed_opts->{midurl};
-
- my $header_obj = $mime->header_obj;
- my $mid = $header_obj->header_raw('Message-ID');
- defined $mid or return;
- $mid = PublicInbox::Hval->new_msgid($mid);
- my $href = $midurl.$mid->as_href;
-
- my $date = $header_obj->header('Date');
- my $updated = feed_updated($date);
-
- my $title = $header_obj->header('Subject');
- defined $title or return;
- $title = title_tag($title);
-
- my $from = $header_obj->header('From') or return;
- my ($email) = PublicInbox::Address::emails($from);
- my $name = join(', ',PublicInbox::Address::names($from));
- $name = ascii_html($name);
- $email = ascii_html($email);
-
- my $s = '';
- if (delete $feed_opts->{emit_header}) {
- $s .= atom_header($feed_opts, $title) . $updated;
- }
- $s .= "<entry><author><name>$name</name><email>$email</email>" .
- "</author>$title$updated" .
- qq{<content\ntype="xhtml">} .
- qq{<div\nxmlns="http://www.w3.org/1999/xhtml">} .
- qq(<pre\nstyle="white-space:pre-wrap">) .
- PublicInbox::View::multipart_text_as_html($mime, $href) .
- '</pre>';
-
- $add =~ tr!/!!d;
- my $h = '[a-f0-9]';
- my (@uuid5) = ($add =~ m!\A($h{8})($h{4})($h{4})($h{4})($h{12})!o);
- my $id = 'urn:uuid:' . join('-', @uuid5);
- $s .= qq!</div></content><link\nhref="$href/"/>!.
- "<id>$id</id></entry>";
-}
-
-sub do_cat_mail {
- my ($ibx, $path) = @_;
- my $mime = eval { $ibx->msg_by_path($path) } or return;
- Email::MIME->new($mime);