From 793da75fbcb5a2c546b3d582f39761fff3d8292d Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 3 Sep 2015 01:57:12 +0000 Subject: ExtMsg: 300 to external mailing list archives Since cross-posting is inevitable, we shall link to external message archives for interopability. --- lib/PublicInbox/ExtMsg.pm | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'lib/PublicInbox/ExtMsg.pm') 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 = "$title" . + "
$title";
+
+	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{$t\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
-- 
cgit v1.2.3-24-ge0c7