app\models\Beatmapset::regenerateCovers PHP Method

regenerateCovers() public method

public regenerateCovers ( )
    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);
        }
    }