about summary refs log tree commit homepage
path: root/lib/PublicInbox/Config.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/PublicInbox/Config.pm')
-rw-r--r--lib/PublicInbox/Config.pm35
1 files changed, 34 insertions, 1 deletions
diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm
index 4fcb20d2..c2fa40f9 100644
--- a/lib/PublicInbox/Config.pm
+++ b/lib/PublicInbox/Config.pm
@@ -25,6 +25,7 @@ sub new {
 
         # caches
         $self->{-by_addr} ||= {};
+        $self->{-by_list_id} ||= {};
         $self->{-by_name} ||= {};
         $self->{-by_newsgroup} ||= {};
         $self->{-no_obfuscate} ||= {};
@@ -84,6 +85,33 @@ sub lookup {
         _fill($self, $pfx);
 }
 
+sub lookup_list_id {
+        my ($self, $list_id) = @_;
+        $list_id = lc($list_id);
+        my $ibx = $self->{-by_list_id}->{$list_id};
+        return $ibx if $ibx;
+
+        my $pfx;
+
+        foreach my $k (keys %$self) {
+                $k =~ /\A(publicinbox\.[\w-]+)\.listid\z/ or next;
+                my $v = $self->{$k};
+                if (ref($v) eq "ARRAY") {
+                        foreach my $alias (@$v) {
+                                (lc($alias) eq $list_id) or next;
+                                $pfx = $1;
+                                last;
+                        }
+                } else {
+                        (lc($v) eq $list_id) or next;
+                        $pfx = $1;
+                        last;
+                }
+        }
+        defined $pfx or return;
+        _fill($self, $pfx);
+}
+
 sub lookup_name ($$) {
         my ($self, $name) = @_;
         $self->{-by_name}->{$name} || _fill($self, "publicinbox.$name");
@@ -398,7 +426,7 @@ sub _fill {
         }
         # TODO: more arrays, we should support multi-value for
         # more things to encourage decentralization
-        foreach my $k (qw(address altid nntpmirror coderepo hide)) {
+        foreach my $k (qw(address altid nntpmirror coderepo hide listid)) {
                 if (defined(my $v = $self->{"$pfx.$k"})) {
                         $ibx->{$k} = _array($v);
                 }
@@ -421,6 +449,11 @@ sub _fill {
                 $self->{-by_addr}->{$lc_addr} = $ibx;
                 $self->{-no_obfuscate}->{$lc_addr} = 1;
         }
+        if (my $listids = $ibx->{listid}) {
+                foreach my $list_id (@$listids) {
+                        $self->{-by_list_id}->{$list_id} = $ibx;
+                }
+        }
         if (my $ng = $ibx->{newsgroup}) {
                 $self->{-by_newsgroup}->{$ng} = $ibx;
         }