o = $o->withoutRelations(); $this->show_dirty = $show_dirty; } public function middleware(): array { return [new WithoutOverlapping($this->uniqueId())]; } /** * Get the unique ID for the job. */ public function uniqueId(): string { return $this->o::config.'|'.$this->o->id; } /** * Execute the job. * * @return void * @throws \Exception */ public function handle(): void { Log::info(sprintf('Scanning [%s] (%d)',$this->o->file_name(FALSE),$this->o->id)); if (! $this->o->isReadable()) { Log::alert(sprintf('Ignoring [%s], it is not readable',$this->o->file_name(FALSE))); return; } // Check the details are valid if ($this->o->file_signature === $this->o->getObjectOriginal('file_signature')) { // For sanity, we'll check a couple of other attrs if (($this->o->width && ($this->o->width != $this->o->getObjectOriginal('width'))) || (($this->o->height && $this->o->height != $this->o->getObjectOriginal('height')))) { Log::alert(sprintf('Dimensions [%s] (%s x %s) mismatch for [%s]', $this->o->dimensions, $this->o->getObjectOriginal('width'), $this->o->getObjectOriginal('height'), $this->o->file_name(FALSE))); $this->fail(new \Exception(sprintf('Dimensions [%s] (%s x %s) mismatch for [%s]', $this->o->dimensions, $this->o->getObjectOriginal('width'), $this->o->getObjectOriginal('height'), $this->o->file_name(FALSE)))); return; } } elseif ($this->o->file_signature) { Log::alert(sprintf('File Signature [%s] doesnt match [%s] for [%s]', $x=$this->o->getObjectOriginal('file_signature'), $this->o->file_signature, $this->o->file_name(FALSE))); $this->fail(new \Exception(sprintf('File Signature [%s] doesnt match [%s] for [%s]', $x, $this->o->file_signature, $this->o->file_name(FALSE)))); return; } $this->o->init(); // If this is a duplicate $x = $this->o->myduplicates()->get(); if (count($x)) { foreach ($x as $this->oo) { // And that catalog item is not marked as a duplicate if (! $this->oo->duplicate) { $this->o->duplicate = TRUE; Log::alert(sprintf('Image [%s] marked as a duplicate',$this->o->filename)); // If the file signature also matches, we'll mark it for deletion if ($this->oo->file_signature && ($this->o->file_signature == $this->oo->file_signature)) { Log::alert(sprintf('Image [%s] marked for deletion',$this->o->filename)); $this->o->remove = TRUE; } break; } } } $this->o->scanned = TRUE; if ($this->o->getDirty()) { Log::alert(sprintf('Image [%s] metadata changed',$this->o->filename)); if ($this->show_dirty) dump(['id'=>$this->o->id,'data'=>$this->o->getDirty()]); } // If the file signature changed, abort the update. if ($this->o->getOriginal('file_signature') && $this->o->wasChanged('file_signature')) { $this->fail(new \Exception(sprintf('File Signature Changed for [%s] DB: [%s], File: [%s]?', $this->o->file_name(), $this->o->file_signature, $this->o->getOriginal('file_signature'), ))); return; } $this->o->save(); } }