
| Current Path : /var/www/web-klick.de/dsh/90_akt/DivBasicF/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/web-klick.de/dsh/90_akt/DivBasicF/Mailbox.pm |
package DivBasicF::Mailbox;
use strict;
use Mail::Box::File;
sub new {
my $class = shift;
my $mailbox = shift;
my $self = {};
$self->{'MAILBOX'} = [$mailbox,"","",0,{}]; # Adresse, Typ, Objekt, Change Time, Puffer
bless($self,$class);
return($self);
}
#*****************************************************************
sub read {
my $self = shift;
my @pars = @_;
$self->{'READ'} = 1;
my $erg = $self->message(@pars);
delete ($self->{'READ'});
return($erg);
}
#**************************************************************
sub message {
my $self = shift;
my $label = shift;
my $text = shift;
my $mbox = shift;
if (!$mbox) {
$mbox = $self->{'MAILBOX'};
}
my $zaehler; my $zeile;
my $file = $mbox->[0];
my $func = $mbox->[1];
if (!$func) {
if (-f $file and !(-f $file.".lock")) {
$zaehler = 0;
open(FFILE,"<".$file);
while (0 == 0) {
$zaehler = $zaehler + 1;
$zeile = <FFILE>;
$func = "mboxfile";
last if ($zeile =~ /^From /);
$func = "sqlite";
last if ($zeile =~ /SQLite/);
$func = "mboxlist";
last if ($zeile =~ /\# +MBOXLIST/i);
}
close(FFILE);
}
if (-d $file) {
$func = "mboxlist";
$file =~ s/\/$//;
$mbox->[0] = $file;
}
$mbox->[1] = $func;
}
return("") if (!$func);
$func = "message_" . $func;
$zeile = $self->$func($label,$text,$mbox);
return($zeile);
}
#**************************************************************
sub message_mboxlist {
my $self = shift;
my $label = shift;
my $text = shift;
my $mbox = shift;
my @files; my $entries; my $erg;
my $file = $mbox->[0];
my $liste = $mbox->[2];
my $t = $mbox->[3];
my $o;
my @ee = stat($file);
return("") if (!@ee);
if (!$liste or ($t < $ee[9])) {
$entries = {};
if ($liste) {
foreach $o (@$liste) {
$entries->{$o->[0]} = $o;
}
}
$liste = [];
if (-d $file) {
opendir(DDIR,$file);
@files = readdir(DDIR);
closedir(DDIR);
} else {
open(FFILE,"<".$file);
@files = <FFILE>;
close(FFILE);
}
foreach $o (@files) {
$o =~ s/\n//gs;
$o =~ s/ //gs;
next if (!$o);
next if ($o eq ".");
next if ($o eq "..");
next if ($o =~ /\#/);
if (-d ($file . "/" . $o)) {
$o = $file . "/" . $o;
}
if ($entries->{$o}) {
push(@$liste,$entries->{$o});
} else {
push(@$liste,[$o,"","",0]);
}
}
$mbox->[2] = $liste;
$mbox->[3] = $ee[9] + 1;
}
foreach $o (@$liste) {
$erg = $self->message($label,$text,$o);
return($erg) if ($erg);
}
return("");
}
#**************************************************************
sub message_mboxfile {
my $self = shift;
my $label = shift;
my $text = shift;
my $mbox = shift;
my $file = $mbox->[0];
my $obj = $mbox->[2];
my $t = $mbox->[3];
my $o; my $o1; my $header;
my @ee = stat($file);
return("") if (!@ee);
if (!(-f $file . ".lock") and $t < $ee[9]) {
$mbox->[3] = $ee[9] + 1;
$mbox->[4] = {};
}
if (!(exists $mbox->[4]->{$label.",".$text})) {
# print "CREATE Mailbox\n";
$obj = Mail::Box::File->new(folder => $file, access => "rw");
if ($label =~ /^id$/i) {
$o = $obj->find($text);
} else {
@ee = $obj->messages("ALL");
foreach $o (@ee) {
$header = $o->head()->get($label);
if ($header =~ /$text/ or !$text and !$header) {
$header = $o;
} else {
$header = "";
}
last if ($header);
}
# print "XX: $header\n";
}
if ($header) {
$o = $header->clone();
$header->delete() if (!($self->{'READ'}));
} else {
$o = "";
}
$mbox->[4]->{$label.",".$text} = $o;
# print "DELETE Mailbox\n";
}
return($mbox->[4]->{$label.",".$text});
}
#**************************************************************
1;