1. fix read so that sysop reading doesn't increment the read counter for
[spider.git] / cmd / read.pl
index c72be605ba37786b9f907de3869fe74495d0a5db..9d57307fa80b2edf78a285ec49275ee168dfd6ae 100644 (file)
@@ -5,3 +5,69 @@
 #
 # $Id$
 #
+
+my ($self, $line) = @_;
+my @f = split /\s+/, $line;
+my $msgno;
+my @out;
+my @body;
+my $ref;
+
+# if there are no specified message numbers, try and find a private one
+# that I haven't read yet
+if (@f == 0) {
+       foreach $ref (DXMsg::get_all()) {
+               if ($ref->to eq $self->call && $ref->private && !$ref->read && !$ref->delete) {
+                       push @f, $ref->msgno;
+                       last;
+               }
+       }
+}
+
+return (1, $self->msg('read1')) if @f == 0;
+
+for $msgno (@f) {
+       $ref = DXMsg::get($msgno);
+       if (!$ref) {
+               push @out, $self->msg('read2', $msgno);
+               next;
+       }
+       if ($self->priv < 5 && $ref->private && $ref->to ne $self->call && $ref->from ne $self->call ) {
+               push @out, $self->msg('read3', $msgno);
+               next;
+       }
+       push @out, sprintf "Msg: %d From: %s Date: %6.6s %5.5s Subj: %-30.30s", $msgno,
+               $ref->from, cldate($ref->t), ztime($ref->t), $ref->subject;
+       @body = $ref->read_msg_body;
+       push @out, @body;
+       
+       # mark it as read
+       unless ($ref->private && $ref->to ne $self->call) {
+               $ref->read($ref->read() + 1);
+               $ref->store(\@body);    # note call by reference!
+
+               # if it had a read receipt on it generate a new message to send back to
+               # the sender.
+               if ($ref->rrreq) {
+                       my $sub = $ref->subject;
+                       $sub = "Re: $sub" unless $sub =~ /^\s*re:/i;
+                       my $to = $ref->to;
+                       my $from = $ref->from;
+                       my $rref = DXMsg->alloc(1, $from, $main::mycall, time, 
+                                                                       1, $sub, $main::mycall, 0, 0 );
+                       my $msgno = DXMsg::next_transno("Msgno");
+                       $rref->msgno($msgno);
+                       $rref->gotit( [ "$main::mycall" ] );
+                       $rref->store( [ "Return receipt from delivering node. Message read by $to." ] );
+                       DXMsg::add_dir($rref);
+                       DXMsg::queue_msg(0);
+               }
+       
+               # remember this one as the last one read
+               $self->lastread($msgno);
+       }
+}
+
+return (1, @out);
+
+