2018-01-11 12:59:53 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Jobs;
|
|
|
|
|
2024-08-31 12:23:07 +00:00
|
|
|
use Illuminate\Contracts\Queue\ShouldBeUnique;
|
2019-11-09 02:52:04 +00:00
|
|
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
2024-08-31 12:23:07 +00:00
|
|
|
use Illuminate\Foundation\Queue\Queueable;
|
|
|
|
use Illuminate\Queue\Middleware\WithoutOverlapping;
|
2018-01-11 12:59:53 +00:00
|
|
|
use Illuminate\Queue\SerializesModels;
|
|
|
|
use Illuminate\Queue\InteractsWithQueue;
|
2019-11-09 02:52:04 +00:00
|
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
|
|
|
|
use App\Models\Abstracted\Catalog;
|
2018-01-11 12:59:53 +00:00
|
|
|
|
2024-08-31 12:23:07 +00:00
|
|
|
class CatalogScan implements ShouldQueue, ShouldBeUnique
|
2018-01-11 12:59:53 +00:00
|
|
|
{
|
2024-08-31 12:23:07 +00:00
|
|
|
use InteractsWithQueue,Queueable,SerializesModels;
|
2018-01-11 12:59:53 +00:00
|
|
|
|
|
|
|
// Our object
|
2024-08-31 12:23:07 +00:00
|
|
|
private Catalog $o;
|
|
|
|
private bool $show_dirty;
|
2018-01-11 12:59:53 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Create a new job instance.
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
2024-08-31 12:23:07 +00:00
|
|
|
public function __construct(Catalog $o,bool $show_dirty=FALSE) {
|
|
|
|
$this->o = $o->withoutRelations();
|
|
|
|
$this->show_dirty = $show_dirty;
|
|
|
|
}
|
|
|
|
|
2024-09-02 12:51:19 +00:00
|
|
|
public function middleware(): array
|
2024-08-31 12:23:07 +00:00
|
|
|
{
|
|
|
|
return [new WithoutOverlapping($this->o->id)];
|
2018-01-11 12:59:53 +00:00
|
|
|
}
|
|
|
|
|
2024-09-02 12:51:19 +00:00
|
|
|
/**
|
|
|
|
* Get the unique ID for the job.
|
|
|
|
*/
|
|
|
|
public function uniqueId(): string
|
|
|
|
{
|
|
|
|
return $this->o->id;
|
|
|
|
}
|
|
|
|
|
2018-01-11 12:59:53 +00:00
|
|
|
/**
|
|
|
|
* Execute the job.
|
|
|
|
*
|
|
|
|
* @return void
|
2024-08-31 12:23:07 +00:00
|
|
|
* @throws \Exception
|
2018-01-11 12:59:53 +00:00
|
|
|
*/
|
|
|
|
public function handle()
|
|
|
|
{
|
|
|
|
Log::info(sprintf('%s: Scanning [%s|%s]',__METHOD__,$this->o->objecttype(),$this->o->id));
|
2019-11-09 02:52:04 +00:00
|
|
|
|
2024-08-31 12:23:07 +00:00
|
|
|
if (! $this->o->isReadable()) {
|
|
|
|
Log::alert(sprintf('Ignoring [%s], it is not readable',$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 photo 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')) {
|
|
|
|
dump(['old'=>$this->o->getOriginal('file_signature'),'new'=>$this->o->file_signature]);
|
|
|
|
abort(500,'File Signature Changed?');
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->o->save();
|
2018-01-11 12:59:53 +00:00
|
|
|
}
|
2019-11-09 02:52:04 +00:00
|
|
|
}
|