diff --git a/app/Console/Commands/Areafix/Rescan.php b/app/Console/Commands/Areafix/Rescan.php index 08373f4..4e02fe8 100644 --- a/app/Console/Commands/Areafix/Rescan.php +++ b/app/Console/Commands/Areafix/Rescan.php @@ -14,7 +14,11 @@ class Rescan extends Command * * @var string */ - protected $signature = 'areafix:rescan {ftn} {area} {days?}'; + protected $signature = 'areafix:rescan' + .' {ftn : FTN Address}' + .' {area : Echoarea Tag}' + .' {days? : Limit to messages authored days ago}' + .' {--R|export : Re-export previously sent messages }'; /** * The console command description. @@ -55,34 +59,51 @@ class Rescan extends Command if (! $eao->can_read($ao->security)) throw new \Exception(sprintf('FTN [%s] doesnt have permission to receive [%s]',$ao->ftn,$eao->name)); - foreach (Echomail::select('id') + foreach (Echomail::select(['id','datetime']) ->where('echoarea_id',$eao->id) - ->when($this->argument('days'),function($query) { - return $query->where('created_at','>=',Carbon::now()->subDays($this->argument('days'))->startOfDay()); - }) + ->when( + $this->argument('days'), + fn($query)=>$query->where('datetime','>=', + Carbon::now() + ->subDays($this->argument('days')) + ->startOfDay()) + ) ->orderBy('datetime') ->cursor() as $eo) { // Echomail hasnt been exported before if (! $eo->seenby->count()) { $eo->seenby()->attach($ao->id,['export_at'=>Carbon::now()]); - $this->info(sprintf('Exported [%d] to [%s]',$eo->id,$ao->ftn3d)); + + $this->info(sprintf('Exported [%d] MSG (%s) dated (%s) to [%s]',$eo->id,$eo->msgid ?: '*NO MSGID*',$eo->datetime->format('Y-m-d H:i:s'),$ao->ftn3d)); } else { $export = $eo->seenby->where('id',$ao->id)->pop(); - // Echomail 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]',$eo->id,$ao->ftn3d)); + if ($export) { + // Echomail is pending export + if ($export->pivot->export_at && is_null($export->pivot->sent_at) && is_null($export->pivot->sent_pkt)) { + $this->warn(sprintf('Not exporting [%d] MSG (%s) dated (%s) already queued for [%s]',$eo->id,$eo->msgid ?: '*NO MSGID*',$eo->datetime->format('Y-m-d H:i:s'),$ao->ftn3d)); - // Echomail has been exported - } elseif ($export) { - $eo->seenby()->updateExistingPivot($ao,['export_at'=>Carbon::now(),'sent_at'=>NULL,'sent_pkt'=>NULL]); - $this->info(sprintf('Re-exported [%d] to [%s]',$eo->id,$ao->ftn3d)); + // Echomail has been exported + } elseif ($this->option('export')) { + $eo->seenby()->updateExistingPivot($ao,['export_at'=>Carbon::now(),'sent_at'=>NULL,'sent_pkt'=>NULL]); + + $this->info(sprintf('Re-exported [%d] MSG (%s) dated (%s) to [%s]',$eo->id,$eo->msgid ?: '*NO MSGID*',$eo->datetime,$ao->ftn3d)); + + } else { + $this->info(sprintf('Not resending previously sent message [%d], MSGID (%s) - sent in Pkt [%s] on [%s]', + $eo->id, + $eo->msgid ?: '* NO MSGID*', + $export->pivot->sent_pkt ?: '-', + $export->pivot->sent_at ?: '-', + )); + } // Echomail has not been exported } else { $eo->seenby()->attach($ao,['export_at'=>Carbon::now(),'sent_at'=>NULL,'sent_pkt'=>NULL]); + $this->info(sprintf('Exported [%d] to [%s]',$eo->id,$ao->ftn3d)); } } diff --git a/app/Models/Echomail.php b/app/Models/Echomail.php index 3ead694..ea31392 100644 --- a/app/Models/Echomail.php +++ b/app/Models/Echomail.php @@ -290,6 +290,7 @@ final class Echomail extends Model implements Packet return $this->belongsToMany(Address::class,'echomail_seenby') ->select(['id','zone_id','host_id','node_id']) ->withPivot(['export_at','sent_at','sent_pkt']) + ->dontCache() ->FTN2DOrder(); }