# $File: //depot/libOurNet/BBS/lib/OurNet/BBS/CVIC/GroupGroup.pm $ $Author: autrijus $
# $Revision: #4 $ $Change: 4012 $ $DateTime: 2003/01/29 11:06:24 $

package OurNet::BBS::CVIC::GroupGroup;

use if $OurNet::BBS::Encoding, 'open' => ":encoding($OurNet::BBS::Encoding)";

use strict;
no warnings 'deprecated';
use fields qw/bbsroot bbsego mtime _ego _hash/;
use OurNet::BBS::Base;

sub writeok { 0 };
sub readok { 1 };

sub _brdobj {
    my $brd = $_[0]{bbsego}{boards}{$_[1]};
    return $brd || {};
}

# Fetch key: id savemode author date title filemode body
sub refresh_meta {
    my ($self, $key) = @_;
    my $file = "$self->{bbsroot}/group";

    return $self->{_hash}{$key} ||= $self->module('Group')->new(
	@{$self}{qw/bbsroot bbsego/}, $self->_brdobj($key), $key,
    ) if defined $key;

    return if $self->filestamp($file);

    opendir(my $DIR, $file) or die "can't read group file $file: $!";
    %{$self->{_hash}} = map {
        ($_, $self->module('Group')->new(
	    @{$self}{qw/bbsroot bbsego/}, $self->_brdobj($_), $_)
	);
    } grep {
        /^[^\.]/;
    } readdir($DIR);
    closedir $DIR;
}

sub STORE {
    my ($self, $key) = @_;
    $self = $self->ego;

    my $file = "$self->{bbsroot}/group/$key";
    unless (-e $file) {
	open(my $TOUCH, ">$file") or die "cannot touch $file: $!";
	close $TOUCH;
    }

    $self->refresh_meta($key);
    $self->{_hash}{$key}->refresh;
}

sub EXISTS {
    my ($self, $key) = @_;

    return ((-e $self->ego->{bbsroot}."/group/$key") ? 1 : 0);
}

1;