X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FAltId.pm;fp=lib%2FPublicInbox%2FAltId.pm;h=6fdc3a2d4df6c141a8b76181ad30829bf43abeb3;hb=58a5bb3e18901237b1ca34ef8f03f696be27d305;hp=0000000000000000000000000000000000000000;hpb=c357e8699d99e20e1033e13bd1e2faa9856fb456;p=public-inbox.git
diff --git a/lib/PublicInbox/AltId.pm b/lib/PublicInbox/AltId.pm
new file mode 100644
index 00000000..6fdc3a2d
--- /dev/null
+++ b/lib/PublicInbox/AltId.pm
@@ -0,0 +1,38 @@
+# Copyright (C) 2016 all contributors
+# License: AGPL-3.0+
+
+package PublicInbox::AltId;
+use strict;
+use warnings;
+use URI::Escape qw(uri_unescape);
+
+# spec: TYPE:PREFIX:param1=value1¶m2=value2&...
+# Example: serial:gmane:file=/path/to/altmsgmap.sqlite3
+sub new {
+ my ($class, $inbox, $spec) = @_;
+ my ($type, $prefix, $query) = split(/:/, $spec, 3);
+ $type eq 'serial' or die "non-serial not supported, yet\n";
+
+ require PublicInbox::Msgmap;
+
+ my %params = map {
+ my ($k, $v) = split(/=/, uri_unescape($_), 2);
+ $v = '' unless defined $v;
+ ($k, $v);
+ } split(/[&;]/, $query);
+ my $f = $params{file} or die "file: required for $type spec $spec\n";
+ unless (index($f, '/') == 0) {
+ $f = "$inbox->{mainrepo}/public-inbox/$f";
+ }
+ bless {
+ mm_alt => PublicInbox::Msgmap->new_file($f),
+ xprefix => 'X'.uc($prefix),
+ }, $class;
+}
+
+sub mid2alt {
+ my ($self, $mid) = @_;
+ $self->{mm_alt}->num_for($mid);
+}
+
+1;