use Email::Address;
use URI::Escape qw/uri_escape/;
use Encode qw/find_encoding/;
use Encode::MIME::Header;
use CGI qw(escapeHTML);
use Email::Address;
use URI::Escape qw/uri_escape/;
use Encode qw/find_encoding/;
use Encode::MIME::Header;
use CGI qw(escapeHTML);
use Date::Parse qw(strptime str2time);
eval { require Git }; # this is GPLv2+, so we are OK to use it
use constant {
DATEFMT => '%Y-%m-%dT%H:%M:%SZ',
MAX_PER_PAGE => 25,
};
use Date::Parse qw(strptime str2time);
eval { require Git }; # this is GPLv2+, so we are OK to use it
use constant {
DATEFMT => '%Y-%m-%dT%H:%M:%SZ',
MAX_PER_PAGE => 25,
};
my $enc_utf8 = find_encoding('utf8');
my $enc_ascii = find_encoding('us-ascii');
my $enc_mime = find_encoding('MIME-Header');
my $enc_utf8 = find_encoding('utf8');
my $enc_ascii = find_encoding('us-ascii');
my $enc_mime = find_encoding('MIME-Header');
my $max = $args->{max} || MAX_PER_PAGE;
my $top = $args->{top}; # bool
local $ENV{GIT_DIR} = $args->{git_dir};
my $feed_opts = get_feedopts($args);
my $max = $args->{max} || MAX_PER_PAGE;
my $top = $args->{top}; # bool
local $ENV{GIT_DIR} = $args->{git_dir};
my $feed_opts = get_feedopts($args);
my $feed = XML::Atom::SimpleFeed->new(
title => $feed_opts->{description} || "unnamed feed",
link => $feed_opts->{url} || "http://example.com/",
link => {
rel => 'self',
href => $feed_opts->{atomurl} ||
my $feed = XML::Atom::SimpleFeed->new(
title => $feed_opts->{description} || "unnamed feed",
link => $feed_opts->{url} || "http://example.com/",
link => {
rel => 'self',
href => $feed_opts->{atomurl} ||
- id => $feed_opts->{address} || 'public-inbox@example.com',
- updated => strftime(DATEFMT, gmtime),
+ id => $addr || 'public-inbox@example.com',
+ updated => POSIX::strftime(DATEFMT, gmtime),
my $max = $args->{max} || MAX_PER_PAGE;
my $top = $args->{top}; # bool
local $ENV{GIT_DIR} = $args->{git_dir};
my $max = $args->{max} || MAX_PER_PAGE;
my $top = $args->{top}; # bool
local $ENV{GIT_DIR} = $args->{git_dir};
$rv{atomurl} = $base . $cgi_url;
$url_base = $base . $url_base; # XXX is this needed?
}
} else {
$url_base = "http://example.com";
$rv{atomurl} = $base . $cgi_url;
$url_base = $base . $url_base; # XXX is this needed?
}
} else {
$url_base = "http://example.com";
my $midurl = $feed_opts->{midurl} || 'http://example.com/m/';
my $fullurl = $feed_opts->{fullurl} || 'http://example.com/f/';
my $midurl = $feed_opts->{midurl} || 'http://example.com/m/';
my $fullurl = $feed_opts->{fullurl} || 'http://example.com/f/';
- $mid =~ s/\A<//; $mid =~ s/>\z//;
+ # FIXME: refactor
+ my (undef, $href) = PublicInbox::View::trim_message_id($mid);
+
+ my $content = PublicInbox::View->as_feed_entry($mime,
+ "$fullurl$href.html");
+ defined($content) or return 0;
my $subject = utf8_header($mime, "Subject") || "";
length($subject) or return 0;
my $subject = utf8_header($mime, "Subject") || "";
length($subject) or return 0;
my $date = utf8_header($mime, "Date");
$date or return 0;
$date = feed_date($date) or return 0;
my $date = utf8_header($mime, "Date");
$date or return 0;
$date = feed_date($date) or return 0;
sub dump_html_line {
my ($self, $level, $args) = @_; # args => [ $html, $midurl ]
sub dump_html_line {
my ($self, $level, $args) = @_; # args => [ $html, $midurl ]
my $simple = $self->message;
my $subj = utf8_header($simple, "Subject");
my $mid = utf8_header($simple, "Message-ID");
$mid =~ s/\A<//;
$mid =~ s/>\z//;
my $simple = $self->message;
my $subj = utf8_header($simple, "Subject");
my $mid = utf8_header($simple, "Message-ID");
$mid =~ s/\A<//;
$mid =~ s/>\z//;
my $from = utf8_header($simple, "From");
my @from = Email::Address->parse($from);
$from = $from[0]->name;
my $from = utf8_header($simple, "From");
my @from = Email::Address->parse($from);
$from = $from[0]->name;
}
dump_html_line($self->child, $level+1, $args) if $self->child;
dump_html_line($self->next, $level, $args) if $self->next;
}
dump_html_line($self->child, $level+1, $args) if $self->child;
dump_html_line($self->next, $level, $args) if $self->next;
die "failed to setup string handle: $!\n";
binmode $fh;
my $bytes = $git->cat_blob($sha1, $fh);
die "failed to setup string handle: $!\n";
binmode $fh;
my $bytes = $git->cat_blob($sha1, $fh);