f = $mail; $this->ftype = ((($type&0xff)<<8)|self::IS_PKT); $this->readpos = 0; } public function __get($key) { switch ($key) { case 'dbids': return $this->f->messages->pluck('id'); case 'name': return sprintf('%08x',$this->youngest_id()); case 'nameas': return sprintf('%s.pkt',$this->name); case 'mtime': return $this->youngest_date()->timestamp; case 'type': return ($this->ftype&0xff00)>>8; default: return parent::__get($key); } } public function close(bool $successful,Node $node): void { if ($successful) { $this->complete = TRUE; Log::info(sprintf('%s:- Successful close for [%d] - updating [%d] records.',self::LOGKEY,$this->type,$this->dbids->count()),['dbids'=>$this->dbids,'authd'=>$node->aka_remote_authed->pluck('id')]); // Update netmail table if (($this->type === Send::T_NETMAIL) && ($x=$this->dbids)->count()) DB::table('netmails') ->whereIn('id',$x) ->update([ 'sent_at'=>Carbon::now(), 'sent_pkt'=>$this->name, 'sent_id'=>$node->address->id, 'flags'=>DB::raw('flags | '.Message::FLAG_SENT), ]); // Update echomails table elseif (($this->type === Send::T_ECHOMAIL) && ($x=$this->dbids)->count() && $node->aka_remote_authed->count()) DB::table('echomail_seenby') ->whereIn('echomail_id',$x) ->whereIn('address_id',$node->aka_remote_authed->pluck('id')) ->update([ 'sent_at'=>Carbon::now(), 'sent_pkt'=>$this->name, ]); $this->content = NULL; $this->f = NULL; } } public function feof(): bool { return ($this->readpos === $this->size); } public function open(string $compress=''): bool { $this->content = (string)$this->f; $this->size = strlen($this->content); return TRUE; } public function read(int $length): string { $result = substr($this->content,$this->readpos,$length); $this->readpos += strlen($result); return $result; } public function seek(int $pos): bool { $this->readpos = ($pos < $this->size) ? $pos : $this->size; return TRUE; } private function youngest(): array { return $this->f->messages->sortBy(fn($item)=>Arr::get($item,'datetime'))->first(); } private function youngest_id(): int { return Arr::get($this->youngest(),'id',0); } private function youngest_date(): Carbon { return Arr::get($this->youngest(),'datetime',Carbon::now()); } }