Start of console commands enhancements

This commit is contained in:
Deon George 2020-01-03 08:04:15 +11:00
parent c5fcfdc1d7
commit cf7c9317eb
6 changed files with 131 additions and 127 deletions

View File

@ -4,42 +4,42 @@ namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Traits\Type;
class CatalogDump extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'catalog:dump {type : Photo | Video } {id : Photo ID}';
use Type;
/**
* The console command description.
*
* @var string
*/
protected $description = 'Scan Photo for metadata';
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'catalog:dump {type : Photo | Video } {id : Photo ID}';
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$class = 'App\Model\\'.$this->argument('type');
/**
* The console command description.
*
* @var string
*/
protected $description = 'Scan Photo for metadata';
if (! class_exists($class))
abort(500,sprintf('No class [%s]',$this->argument('type')));
$o = $class::findOrFail($this->argument('id'));
if (! is_readable($o->file_path()))
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$this->warn(sprintf('Ignoring [%s], it is not readable',$o->file_path()));
exit;
}
$class = $this->getModelType($this->argument('type'));
print_r($o->properties());
}
}
$o = $class::findOrFail($this->argument('id'));
if (! $o->isReadable()) {
$this->warn(sprintf('Ignoring [%s], it is not readable',$o->file_path()));
exit;
}
dump($o->properties());
}
}

View File

@ -4,37 +4,38 @@ namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Traits\Type;
class CatalogScan extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'catalog:scan {type : Photo | Video } {id : Photo ID}';
use Type;
/**
* The console command description.
*
* @var string
*/
protected $description = 'Scan Photo for metadata';
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'catalog:scan {type : Photo | Video } {id : Photo ID}';
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$class = 'App\Models\\'.$this->argument('type');
/**
* The console command description.
*
* @var string
*/
protected $description = 'Scan Photo for metadata';
if (! class_exists($class))
abort(500,sprintf('No class [%s]',$this->argument('type')));
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$class = $this->getModelType($this->argument('type'));
$o = $class::findOrFail($this->argument('id'));
if (! is_readable($o->file_path())) {
if (! $o->isReadable()) {
$this->warn(sprintf('Ignoring [%s], it is not readable',$o->file_path()));
return;
}
@ -70,10 +71,10 @@ class CatalogScan extends Command
$o->scanned = '1';
if ($o->getDirty()) {
$this->warn(sprintf('Image [%s] metadata changed',$o->file_path()));
$this->warn(sprintf('Image [%s] metadata changed',$o->filename));
dump(['id'=>$o->id,'data'=>$o->getDirty()]);
}
$o->save();
}
}
}
}

View File

@ -9,7 +9,7 @@ use Illuminate\Support\Facades\Log;
use App\Models\Photo;
use App\Jobs\CatalogScan;
class PhotoScanAll extends Command
class CatalogScanAll extends Command
{
use DispatchesJobs;
@ -18,15 +18,16 @@ class PhotoScanAll extends Command
*
* @var string
*/
protected $signature = 'photo:scanall '.
'{--scanned : Rescan Scanned Photos}';
protected $signature = 'catalog:scanall'.
' {type : Photo | Video }'.
' {--scanned : Rescan Scanned Photos}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Scan Photos';
protected $description = '(re)Scan Media';
/**
* Create a new command instance.
@ -45,15 +46,19 @@ class PhotoScanAll extends Command
*/
public function handle()
{
$o = ($this->option('scanned') ? Photo::NotRemove() : Photo::NotScanned());
$class = $this->getModelType($this->argument('type'));
$o->each(function ($item) {
if ($this->option('scanned')) {
$class::update(['scanned'=>NULL]);
}
$class::NotScanned()->each(function ($item) {
if ($item->remove) {
Log::warning(sprintf('Not scanning [%s], marked for removal',$item->id));
return;
}
Log::info(sprintf('%s: Rescanning [%s]',__METHOD__,$item->id));
Log::info(sprintf('%s: Rescanning [%s]',$item->type,$item->id));
$this->dispatch((new CatalogScan($item))->onQueue('scan'));
});

View File

@ -1,62 +0,0 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Support\Facades\Log;
use App\Models\Video;
use App\Jobs\CatalogScan;
class VideoScanAll extends Command
{
use DispatchesJobs;
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'video:scanall'.
' {--scanned : Rescan Scanned Videos}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Scan Videos';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$o = ($this->option('scanned') ? Video::NotRemove() : Video::NotScanned());
$o->each(function ($item) {
if ($item->remove) {
Log::warning(sprintf('Not scanning [%s], marked for removal',$item->id));
return;
}
Log::info(sprintf('%s: Rescanning [%s]',__METHOD__,$item->id));
$this->dispatch((new CatalogScan($item))->onQueue('scan'));
});
Log::info(sprintf('Processed [%s]',$o->count()));
}
}

View File

@ -180,8 +180,25 @@ abstract class Catalog extends Model
return $format ? date('d-m-Y H:i:s',$t) : $t;
}
/**
* Return what the filename should be.
*
* @return string
*/
public function file_name(bool $short=TRUE): string
{
// If the date created is not set, the file name will be based on the ID of the file.
$file = sprintf('%s.%s',((is_null($this->date_created) OR ! $this->date_created)
? sprintf('UNKNOWN/%07s',$this->file_path_id())
: sprintf('%s_%03s',$this->date_created->format('Y/m/d-His'),$this->subsectime).
((! static::$includeSubSecTime OR $this->subsectime) ? '' : sprintf('-%05s',$this->id))),$this->type());
return (($short OR preg_match('/^\//',$file)) ? '' : config('photo.dir').DIRECTORY_SEPARATOR).$file;
}
/**
* Determine the new name for the image
* @deprecated
*/
public function file_path($short=FALSE,$new=FALSE)
{
@ -304,6 +321,16 @@ abstract class Catalog extends Model
return ($this->gps_lat AND $this->gps_lon) ? sprintf('%s/%s',$this->gps_lat,$this->gps_lon) : 'UNKNOWN';
}
/**
* Return if this source file is readable.
*
* @return bool
*/
public function isReadable(): bool
{
return is_readable($this->file_path());
}
/**
* Return an HTML checkbox
*/
@ -371,6 +398,17 @@ abstract class Catalog extends Model
return TRUE;
}
/**
* Flag to indicate if a file should be moved.
*
* @return bool
*/
public function mustMove(): bool
{
dump(['f'=>$this->filename,'fn'=>$this->file_name(),'test'=>($this->filename == $this->file_name())]);
return $this->filename !== $this->file_name();
}
/**
* Get the id of the previous record
*/

22
app/Traits/Type.php Normal file
View File

@ -0,0 +1,22 @@
<?php
namespace App\Traits;
/**
* Trait Files
* This will return a valid Model Object.
*
* @package App\Traits
*/
trait Type
{
private function getModelType(string $type): string
{
$class = 'App\Models\\'.$type;
if (! class_exists($class))
abort(500,sprintf('No class [%s]',$type));
return $class;
}
}