shouldSync()) { try { $run = $syncService->sync(); $this->line((string) $run->message); } catch (Throwable $exception) { $this->error('Synchronisation CalDAV agenda en echec : '.$exception->getMessage()); return self::FAILURE; } } elseif (! $this->option('no-sync')) { $interval = (int) config('relais_sms.caldav.sync_interval_minutes', 60); $this->line('Synchronisation CalDAV ignoree : derniere synchronisation recente, intervalle '.$interval.' minute(s).'); } $sent = $sender->sendDue(); $this->info($sent.' rappel(s) SMS envoye(s).'); return self::SUCCESS; } private function shouldSync(): bool { if ($this->option('no-sync')) { return false; } if ($this->option('force-sync')) { return true; } $interval = max(1, (int) config('relais_sms.caldav.sync_interval_minutes', 60)); $lastRun = SourceSyncRun::query() ->where('source', 'caldav_calendar') ->latest('started_at') ->first(); $rawStartedAt = $lastRun?->getRawOriginal('started_at'); if ($rawStartedAt === null) { return true; } $lastStartedAt = Carbon::parse((string) $rawStartedAt, 'UTC'); $nextAllowedSyncAt = Carbon::now()->utc()->subMinutes($interval); return $lastStartedAt->lessThanOrEqualTo($nextAllowedSyncAt); } }