public function organize() { $this->log('Starte DownloadsOrganizer...'); $this->log(''); $this->log(sprintf('Frage die Episoden von %s ab...', $this->client->getURL())); $episodes = $this->client->getEpisodes(); $this->log(count($episodes) . ' Episode(n) gefunden'); $this->logger->br(); if (isset($this->client->getLastResponse()->errors) && ($er = $this->client->getLastResponse()->errors) && count($er) > 0) { foreach ($er as $episodeInfo => $errors) { $this->log(' Fehler bei: ' . $episodeInfo . ': ' . \Psc\A::join($errors, "\n %s")); } } if (count($episodes) == 0) { $this->log('Keine Episoden zum überprüfen'); } /* diese episoden haben jetzt bestimmte stati, die für den Client wichtig sind. scheduled, downloaded, etc. je nach Status verschieben wir die Folgen schauen, ob es sie schon gibt starten den Download oder ähnliches */ foreach ($episodes as $episode) { // wir haben genau die zustände: SCHEDULED, DOWNLOADED, MOVED, WAIT_FOR_SUB $this->log('Bearbeite Episode: ' . $episode->getInfo() . ' Status: ' . $episode->getStatus()); try { /* zu allererst schauen wir, ob wir die Episode schon im Zielverzeichnis haben */ $exists = $this->exists($episode); if ($exists) { $this->log(sprintf(' Episode existiert im Zielverzeichnis. Status -> WAIT_FOR_SUB')); $episode->setStatus(Status::WAIT_FOR_SUB); } if ($episode->getStatus() === Status::SCHEDULED) { // wir fügen es dem jdownloader hinzu try { $this->startEpisode($episode); // kann hier nach auf DOWNLOADED gesetzt worden sein } catch (NotDecryptedException $e) { $this->log(' Links decrypten! (' . $e->getMessage() . ')'); } } // wir überprüfen, ob der Download möglicherweise schon fertig ist if ($episode->getStatus() === Status::DOWNLOADING) { $this->checkDownload($episode); } if ($episode->getStatus() === Status::DOWNLOADED) { // wir verschieben die Episode ins Zielverzeichnis try { $this->moveEpisode($episode); } catch (NoEpisodeDirectoryException $e) { $this->log(' Kein Downloadverzeichnis mit Dateien gefunden! Zum Neuladen auf Scheduled zurücksetzen. (' . $e->directory . ')'); $this->log(' neuer Status: downloading'); $episode->setStatus(Status::DOWNLOADING); } } if ($episode->getStatus() === Status::MOVED || $episode->getStatus() === Status::WAIT_FOR_SUB) { if ($this->downloadSub($episode)) { $episode->setStatus(Status::FINISHED); $this->log(' Alle Subs vorhanden => FINISHED'); } else { $episode->setStatus(Status::WAIT_FOR_SUB); // falls wir moved haben und dann höher setzen $this->log(' Warte weiterhin auf fehlende Subs'); } } $this->client->updateEpisodeStatus($episode, $episode->getStatus()); $this->client->updateEpisodeExtension($episode, $episode->getExtension()); } catch (\Psc\Exception $e) { $this->log(' CRITICAL ERROR: ' . $e->getMessage() . ' ' . $e->getFile() . ':' . $e->getLine()); } $this->log(NULL); } return $episodes; }
protected function onNotSuccessfulTest(\Exception $e) { print \Psc\A::join($this->sjg->log, "\n %s"); throw $e; }