Added filefix %AREA
This commit is contained in:
@@ -2,10 +2,10 @@
|
||||
|
||||
namespace App\Console\Commands\Filefix;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Console\Command;
|
||||
|
||||
use App\Models\{Address,Filearea,File};
|
||||
use App\Jobs\FilefixRescan;
|
||||
use App\Models\{Address,Filearea};
|
||||
|
||||
class Rescan extends Command
|
||||
{
|
||||
@@ -14,7 +14,13 @@ class Rescan extends Command
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'filefix:rescan {ftn} {area} {file?}';
|
||||
protected $signature = 'filefix:rescan'
|
||||
.' {ftn : FTN Address}'
|
||||
.' {area : Echoarea Tag}'
|
||||
.' {days? : Limit to files received days ago}'
|
||||
.' {--j|queue : Queue the Job}'
|
||||
.' {--Q|queuename=default : Queue on queue}'
|
||||
.' {--R|export : Re-export previously sent files}';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
@@ -31,6 +37,9 @@ class Rescan extends Command
|
||||
*/
|
||||
public function handle(): int
|
||||
{
|
||||
if (($this->argument('days')) && (! is_numeric($this->argument('days'))))
|
||||
throw new \Exception('Days must be numeric: '.$this->argument('days'));
|
||||
|
||||
$ao = Address::findFtn($this->argument('ftn'));
|
||||
|
||||
if (! $ao)
|
||||
@@ -41,49 +50,14 @@ class Rescan extends Command
|
||||
throw new \Exception('Areaname is required');
|
||||
|
||||
$fao = Filearea::where('name',$this->argument('area'))->sole();
|
||||
|
||||
if ($fao->domain_id !== $ao->zone->domain_id)
|
||||
throw new \Exception(sprintf('File area [%s] is not in domain [%s] for FTN [%s]',$fao->name,$ao->zone->domain->name,$ao->ftn));
|
||||
|
||||
// Check that the user is subscribed
|
||||
if (! $ao->fileareas->contains($fao->id))
|
||||
throw new \Exception(sprintf('FTN [%s] is not subscribed to [%s]',$ao->ftn,$fao->name));
|
||||
|
||||
// Check that an FTN can read the area
|
||||
if (! $fao->can_read($ao->security))
|
||||
throw new \Exception(sprintf('FTN [%s] doesnt have permission to receive [%s]',$ao->ftn,$fao->name));
|
||||
|
||||
foreach (File::select('id')
|
||||
->where('filearea_id',$fao->id)
|
||||
->when($this->argument('file'),function($query) {
|
||||
return $query->where('name','=',$this->argument('file'));
|
||||
})
|
||||
->orderBy('datetime')
|
||||
->cursor() as $fo) {
|
||||
|
||||
// File hasnt been exported before
|
||||
if (! $fo->seenby->count()) {
|
||||
$fo->seenby()->attach($ao->id,['export_at'=>Carbon::now()]);
|
||||
$this->info(sprintf('Exported [%d] to [%s]',$fo->id,$ao->ftn3d));
|
||||
|
||||
} else {
|
||||
$export = $fo->seenby->where('id',$ao->id)->pop();
|
||||
|
||||
// File is pending export
|
||||
if ($export && $export->pivot->export_at && is_null($export->pivot->sent_at) && is_null($export->pivot->sent_pkt)) {
|
||||
$this->warn(sprintf('Not exporting [%d] already queued for [%s]',$fo->id,$ao->ftn3d));
|
||||
|
||||
// File has been exported
|
||||
} elseif ($export) {
|
||||
$fo->seenby()->updateExistingPivot($ao,['export_at'=>Carbon::now(),'sent_at'=>NULL]);
|
||||
$this->info(sprintf('Re-exported [%d] to [%s]',$fo->id,$ao->ftn3d));
|
||||
|
||||
// File has not been exported
|
||||
} else {
|
||||
$fo->seenby()->attach($ao,['export_at'=>Carbon::now(),'sent_at'=>NULL]);
|
||||
$this->info(sprintf('Exported [%d] to [%s]',$fo->id,$ao->ftn3d));
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($this->option('queue'))
|
||||
FilefixRescan::dispatch($ao,$fao,$this->argument('days'))->onQueue($this->option('queuename'));
|
||||
else
|
||||
FilefixRescan::dispatchSync($ao,$fao,$this->argument('days'));
|
||||
|
||||
return self::SUCCESS;
|
||||
}
|
||||
|
Reference in New Issue
Block a user