Example #1
0
 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);
     }
 }