# $File: //depot/libOurNet/BBS/lib/OurNet/BBS/NNTP/ArticleGroup.pm $ $Author: autrijus $
# $Revision: #2 $ $Change: 3792 $ $DateTime: 2003/01/24 19:34:06 $
package OurNet::BBS::NNTP::ArticleGroup;
# FIXME: use first/last update to determine refresh result
use strict;
no warnings 'deprecated';
use fields qw/nntp board first num last _ego _hash _array/;
use OurNet::BBS::Base;
use Date::Parse;
use Date::Format;
sub refresh_meta {
my ($self, $key, $flag) = @_;
@{$self}{qw/num first last/} = $self->{nntp}->group($self->{board})
unless $self->{board} eq $self->{nntp}->group;
return unless $flag;
if ($flag == ARRAY or !defined($key)) {
die "$key out of range" if defined($key)
and $key < $self->{first} - 1 || $key >= $self->{last};
my @keys = (
defined($key) ? $key : ($self->{first} - 1 .. $self->{last} - 1)
);
foreach my $key (@keys) {
next if $self->{_array}[$key]; # XXX: blind cache
my $msgid = $self->{nntp}->nntpstat($key + 1) or next;
$self->{_hash}{$msgid} = $self->{_array}[$key] =
$self->module('Article')->new({
nntp => $self->{nntp},
board => $self->{board},
recno => $key + 1,
});
}
}
elsif ($key) {
return if $self->{_hash}{$key};
my $msgid = $self->{nntp}->nntpstat($key)
or die "no such article $key";
$self->{_hash}{$key} = $self->module('Article')->new({
nntp => $self->{nntp},
board => $self->{groupname},
recno => $key,
});
}
return 1;
}
sub FETCHSIZE {
my $self = $_[0]->ego;
@{$self}{qw/num first last/} = $self->{nntp}->group($self->{board})
unless defined($self->{last});
return $self->{last} + 1;
}
sub STORE {
my ($self, $key, $value) = @_;
$self = $self->ego;
@{$self}{qw/num first last/} = $self->{nntp}->group($self->{board})
unless $self->{board} eq $self->{nntp}->group;
my %header = %{$value->{header}} or die "must specify header to post";
$header{Date} = time2str('%d %b %Y %T %Z', str2time($header{Date}));
$header{Newsgroups} ||= $self->{board};
$header{'Message-ID'} =~ s/^([^<].*[^>])$/<$1>/;
delete $header{Board};
$self->{nntp}->post(
(sort { $a cmp $b } map {"$_: $header{$_}\n"} (keys %header)),
"\n",
$value->{body},
);
return 1;
}
1;
syntax highlighted by Code2HTML, v. 0.9.1