public function Fire() { $keeper = new BookKeeper(); $provider = GetProvider(); $episode = $this->episode; // We've already downloaded this episode. if ($episode->IsAlreadyDownloaded()) { LogMessage("Skipping #{$episode->nzbid} '{$episode->title}' because it has been downloaded previously"); return; } $title = SafeFileName($episode->title); $basename = $title . '_' . $episode->nzbid . '.nzb'; $basename = \config::DownloadFileCallback($basename); $file_name = \config::$nzb_output_dir . '/' . $basename; if ($provider instanceof ProviderNZBMatrix) { $file_name .= '.gz'; } // NZBMatrix returns gZIP files rather than raw NZBs. try { $provider->DownloadEpisode($episode, $file_name); } catch (DownloadException $e) { LogMessage("Could not get #{$episode->nzbid} '{$episode->title}'", LOG_ERR); $this->Cancel(); return; } // NZB files are never less than 1k, so it's probably a dud. We'll try // on a different execution run. if (filesize($file_name) < 1000) { LogMessage("Failed to download #{$episode->nzbid} '{$episode->title}'. Please run again.", LOG_WRN); unlink($file_name); $this->Cancel(); return; } $keeper->RecordDownload($episode); LogMessage("Downloaded #{$episode->nzbid} '{$episode->title}'"); $provider->RateLimitDownload($episode); }