public function regenerateCovers() { $tmpBase = sys_get_temp_dir() . "/bm/{$this->beatmapset_id}-" . time(); $workingFolder = "{$tmpBase}/working"; $outputFolder = "{$tmpBase}/out"; try { // make our temp folders if they don't exist if (!is_dir($workingFolder)) { mkdir($workingFolder, 0755, true); } if (!is_dir($outputFolder)) { mkdir($outputFolder, 0755, true); } // download and extract beatmap $osz = "{$tmpBase}/osz.zip"; $ok = copy($this->oszDownloadURL(), $osz); if (!$ok) { throw new BeatmapProcessorException('Error retrieving beatmap'); } $zip = new \ZipArchive(); $zip->open($osz); $zip->extractTo($workingFolder); $zip->close(); // grab the first beatmap (as per old implementation) and scan for background image $beatmap = $this->beatmaps()->first(); $beatmapFilename = $beatmap->filename; $bgFilename = self::scanBMForBG("{$workingFolder}/{$beatmapFilename}"); if (!$bgFilename) { $this->update(['cover_updated_at' => $this->freshTimestamp()]); return; } $bgFile = ci_file_search("{$workingFolder}/{$bgFilename}"); if (!$bgFile) { throw new BeatmapProcessorException("Background image missing: {$bgFile}"); } $processor = new ImageProcessorService($tmpBase); // upload original image $this->storeCover('raw.jpg', $bgFile); // upload optimized version $optimized = $processor->optimize($this->coverURL('raw')); $this->storeCover('fullsize.jpg', $optimized); // use thumbnailer to generate and upload all our variants foreach (self::coverSizes() as $size) { $resized = $processor->resize($this->coverURL('fullsize'), $size); $this->storeCover("{$size}.jpg", $resized); } $this->update(['cover_updated_at' => $this->freshTimestamp()]); } finally { // clean up after ourselves deltree($tmpBase); } }