diff options
author | Eric Wong <e@80x24.org> | 2015-09-03 01:57:12 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2015-09-03 02:04:40 +0000 |
commit | 793da75fbcb5a2c546b3d582f39761fff3d8292d (patch) | |
tree | 3da469a09280ada32b0023a21d67a7778e9d78d8 /lib/PublicInbox/ExtMsg.pm | |
parent | 81a9c1b476987d845b340ab9013d26cf4487cb9a (diff) | |
download | public-inbox-793da75fbcb5a2c546b3d582f39761fff3d8292d.tar.gz |
Since cross-posting is inevitable, we shall link to external message archives for interopability.
Diffstat (limited to 'lib/PublicInbox/ExtMsg.pm')
-rw-r--r-- | lib/PublicInbox/ExtMsg.pm | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/lib/PublicInbox/ExtMsg.pm b/lib/PublicInbox/ExtMsg.pm index bdbff78f..3e0e6e4e 100644 --- a/lib/PublicInbox/ExtMsg.pm +++ b/lib/PublicInbox/ExtMsg.pm @@ -7,6 +7,14 @@ use URI::Escape qw(uri_escape_utf8); use PublicInbox::Hval; use PublicInbox::MID qw/mid_compress mid2path/; +# TODO: user-configurable +our @EXT_URL = ( + 'http://mid.gmane.org/%s', + 'https://lists.debian.org/msgid-search/%s', + 'http://mid.mail-archive.com/%s', + 'http://marc.info/?i=%s', +); + sub ext_msg { my ($ctx) = @_; my $pi_config = $ctx->{pi_config}; @@ -74,9 +82,27 @@ sub ext_msg { } } - # Fall back to external repos + my $code = 404; + my $h = PublicInbox::Hval->new_msgid($mid, 1); + my $href = $h->as_href; + my $html = $h->as_html; + my $title = "Message-ID <$html> not found"; + + # Fall back to external repos if configured + my $s = "<html><head><title>$title</title>" . + "</head><body><pre><b>$title</b>"; + + if (@EXT_URL) { + $code = 300; + $s .= "\n\nPerhaps try an external site:\n\n"; + foreach my $u (@EXT_URL) { + my $r = sprintf($u, $href); + my $t = sprintf($u, $html); + $s .= qq{<a\nhref="$r">$t</a>\n}; + } + } - [404, ['Content-Type'=>'text/plain'], ['Not found']]; + [300, ['Content-Type'=>'text/html; charset=UTF-8'], [$s]]; } # Redirect to another public-inbox which is mapped by $pi_config |