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);
}
}