diff options
Diffstat (limited to 'public-inbox-nntpd')
-rw-r--r-- | public-inbox-nntpd | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/public-inbox-nntpd b/public-inbox-nntpd index b66de58e..0395e98b 100644 --- a/public-inbox-nntpd +++ b/public-inbox-nntpd @@ -298,7 +298,7 @@ sub event_read { package PublicInbox::NNTPD; use strict; use warnings; -use fields qw(groups err out); +use fields qw(groups grouplist err out); sub new { my ($class) = @_; @@ -306,6 +306,7 @@ sub new { $self->{groups} = {}; $self->{err} = \*STDERR; $self->{out} = \*STDOUT; + $self->{grouplist} = []; $self; } @@ -314,26 +315,37 @@ sub refresh_groups { require PublicInbox::Config; my $pi_config = PublicInbox::Config->new; my $new = {}; + my @list; foreach my $k (keys %$pi_config) { $k =~ /\Apublicinbox\.([^\.]+)\.mainrepo\z/ or next; my $g = $1; my $git_dir = $pi_config->{$k}; - my $address = $pi_config->{"publicinbox.$g.address"}; - my $ng = PublicInbox::NewsGroup->new($g, $git_dir, $address); + my $addr = $pi_config->{"publicinbox.$g.address"}; + my $ngname = $pi_config->{"publicinbox.$g.newsgroup"}; + if (defined $ngname) { + next if ($ngname eq ''); # disabled + $g = $ngname; + } + my $ng = PublicInbox::NewsGroup->new($g, $git_dir, $addr); my $old_ng = $self->{groups}->{$g}; - # Reuse the old one if possible since it can hold references - # to valid mm and gcf objects + # Reuse the old one if possible since it can hold + # references to valid mm and gcf objects if ($old_ng) { $old_ng->update($ng); $ng = $old_ng; } # Only valid if Msgmap works - $new->{$g} = $ng if $ng->mm(1); + if ($ng->mm(1)) { + $new->{$g} = $ng; + push @list, $ng; + } } + @list = sort { $a->{name} cmp $b->{name} } @list; + $self->{grouplist} = \@list; # this will destroy old groups that got deleted %{$self->{groups}} = %$new; -}; +} 1; |