option('force'); $only = $this->option('only'); $dryRun = $this->option('dry-run'); $this->info("Animexe Çapraz Import Job Oluşturucu"); $this->info("===================================="); // Tüm yayınlanan animeleri job durumlarıyla al $animes = Anime::where('is_published', true) ->with('importJobs') ->get(); $this->info("Toplam yayınlanan anime: {$animes->count()}"); $aniziumCreated = 0; $animecixCreated = 0; $skipped = 0; $requeued = 0; foreach ($animes as $anime) { $jobs = $anime->importJobs; $aniziumJobs = $jobs->where('source', 'anizium'); $animecixJobs = $jobs->where('source', 'animecix'); $hasAniziumDone = $aniziumJobs->where('status', 'done')->isNotEmpty(); $hasAnimecixDone = $animecixJobs->where('status', 'done')->isNotEmpty(); $hasAniziumAny = $aniziumJobs->whereIn('status', ['pending','fetching','downloading','uploading','done'])->isNotEmpty(); $hasAnimecixAny = $animecixJobs->whereIn('status', ['pending','fetching','downloading','uploading','done'])->isNotEmpty(); // ── Re-queue: ikisi de done olan animeleri yeniden işlet ────────── if ($force && $hasAniziumDone && $hasAnimecixDone) { if (!$dryRun) { // En son done Anizium job'unu yeniden pending yap $aj = $aniziumJobs->where('status', 'done')->sortByDesc('id')->first(); if ($aj) { $aj->update(['status' => 'pending', 'done_episodes' => 0, 'error_log' => null, 'current_step' => 'Çapraz re-import']); } // En son done AnimeCix job'unu yeniden pending yap $cj = $animecixJobs->where('status', 'done')->sortByDesc('id')->first(); if ($cj) { $cj->update(['status' => 'pending', 'done_episodes' => 0, 'error_log' => null, 'current_step' => 'Çapraz re-import']); } $requeued++; } else { $this->line("[DRY] Re-queue: {$anime->title} (her iki kaynak mevcut)"); } continue; } // ── Anizium job oluştur ─────────────────────────────────────────── if ((!$only || $only === 'anizium') && !$hasAniziumAny) { // Anizium watch_id'yi bilmiyoruz — Python reimport_all.py bu görevi üstlenir. // Buradan sadece anime_id'yi atayarak "ihtiyaç listesi" oluşturabiliriz; // watch_id olmadan bot job'ı işleyemez. Bu yüzden sadece logluyoruz. $this->warn("[SKIP-ANİZİUM] {$anime->title} (watch_id bilinmiyor — reimport_all.py kullan)"); $skipped++; } // ── AnimeCix job oluştur ────────────────────────────────────────── if ((!$only || $only === 'animecix') && !$hasAnimecixAny) { // animecix_title_id'yi bilmiyoruz — daemon.py bunu otomatik keşfeder. $this->warn("[SKIP-ANİMECİX] {$anime->title} (title_id bilinmiyor — daemon.py kullan)"); $skipped++; } // ── Anizium'u olan ama AnimeCix'i olmayan: Anizium job'larından watch_id var ── // ─ (bu zaten mevcut) ─ // ── AnimeCix'i olan ama Anizium'u olmayan: watch_id bilinmiyorsa skip ── if ((!$only || $only === 'anizium') && $hasAnimecixDone && !$hasAniziumAny) { // AnimeCix'te var ama Anizium'da yok — reimport_all.py Anizium katalogunda arayacak $this->line("[ANİZİUM-GEREKLİ] {$anime->title} (MAL: {$anime->mal_id}) — reimport_all.py işleyecek"); } // ── Anizium'u olan ama AnimeCix'i olmayan: daemon.py katalog taramasında otomatik bulur ── if ((!$only || $only === 'animecix') && $hasAniziumDone && !$hasAnimecixAny) { $this->line("[ANİMECİX-GEREKLİ] {$anime->title} (MAL: {$anime->mal_id}) — daemon.py bulacak"); } } // ── Var olan Anizium done job'larını yeniden pending yap (--force) ─── if ($force && !$dryRun) { $this->info("Re-queue tamamlandı: {$requeued} anime"); } $this->newLine(); $this->info("Özet:"); $this->info(" Anizium job oluşturuldu : {$aniziumCreated}"); $this->info(" AnimeCix job oluşturuldu: {$animecixCreated}"); $this->info(" Yeniden kuyruğa alındı : {$requeued}"); $this->info(" Atlandı (watch_id yok) : {$skipped}"); $this->newLine(); $this->info("Tüm anime + kaynak eşleştirmesi için: python reimport_all.py"); return 0; } }