about summary refs log tree commit homepage
path: root/lib/PublicInbox/ExtMsg.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2015-09-03 01:57:12 +0000
committerEric Wong <e@80x24.org>2015-09-03 02:04:40 +0000
commit793da75fbcb5a2c546b3d582f39761fff3d8292d (patch)
tree3da469a09280ada32b0023a21d67a7778e9d78d8 /lib/PublicInbox/ExtMsg.pm
parent81a9c1b476987d845b340ab9013d26cf4487cb9a (diff)
downloadpublic-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.pm30
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 &lt;$html&gt; 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