groups => {},
err => \*STDERR,
out => \*STDOUT,
- grouplist => [],
pi_config => $pi_config,
servername => $name,
greet => \"201 $name ready - post via email\r\n",
my $groups = $pi_config->{-by_newsgroup}; # filled during each_inbox
$pi_config->each_inbox(sub {
my ($ibx) = @_;
- my $ngname = $ibx->{newsgroup} or return;
- if (ref $ngname) {
- warn 'multiple newsgroups not supported: '.
- join(', ', @$ngname). "\n";
- # Newsgroup name needs to be compatible with RFC 3977
- # wildmat-exact and RFC 3501 (IMAP) ATOM-CHAR.
- # Leave out a few chars likely to cause problems or conflicts:
- # '|', '<', '>', ';', '#', '$', '&',
- } elsif ($ngname =~ m![^A-Za-z0-9/_\.\-\~\@\+\=:]!) {
- warn "newsgroup name invalid: `$ngname'\n";
- delete $groups->{$ngname};
- } elsif ($ibx->nntp_usable) {
- # Only valid if msgmap and search works
-
+ my $ngname = $ibx->{newsgroup};
+ if (defined($ngname) && $ibx->nntp_usable) {
+ # only valid if msgmap and over works
# preload to avoid fragmentation:
$ibx->description;
$ibx->base_url;
} else {
delete $groups->{$ngname};
+ delete $ibx->{newsgroup};
+ # Note: don't be tempted to delete more for memory
+ # savings just yet: NNTP, IMAP, and WWW may all
+ # run in the same process someday.
}
});
- my @names = sort(keys %$groups);
- $self->{grouplist} = [ map { $groups->{$_} } @names ];
- $self->{groupnames} = \@names;
- $self->{pi_config} = $pi_config;
+ $self->{groupnames} = [ sort(keys %$groups) ];
# this will destroy old groups that got deleted
- $self->{groups} = $groups;
+ $self->{pi_config} = $pi_config;
}
sub idler_start {