verifyVersion(); } public function verifyVersion() { $this->callSilent('config:cache'); $this->version = config('pixelfed.version'); $known = in_array($this->version, $this->versions); if($known == false) { $this->error('Unknown version found, aborting...'); exit; } $this->updateStrategy($this->version); } public function updateStrategy($version) { switch ($version) { case '0.1.8': $this->info('You are running an older version that doesn\'t require any updates!'); break; case '0.1.9': $this->update019(); break; case '0.2.1': $this->update021(); break; default: # code... break; } } public function update019() { $this->buildVersionFile(); $v = $this->getVersionFile(); if($v['updated'] == true) { $this->info('Already up to date!'); exit; } $exists = Schema::hasColumn('statuses','scope'); if(!$exists) { $this->error('You need to run the migrations before you proceed with this update.'); if($this->confirm('Do you want to run the migrations?')) { $this->callSilent('migrate'); } else { exit; } } $statusCount = Status::count(); $this->info('Running updates ...'); $bar = $this->output->createProgressBar($statusCount); Status::chunk(200, function($statuses) use ($bar) { foreach($statuses as $status) { $ts = $status->updated_at; $status->scope = $status->visibility; $status->updated_at = $ts; $status->save(); if($status->firstMedia()) { $media = $status->firstMedia(); if(in_array($media->mime, ['image/jpeg', 'image/png'])) { ImageThumbnail::dispatch($media); } } $bar->advance(); } }); $this->updateVersionFile('0.1.9', true); $bar->finish(); } public function update021() { $this->buildVersionFile(); $v = $this->getVersionFile(); if($v['updated'] == true) { $this->info('Already up to date!'); exit; } $statusCount = Status::count(); $this->info('Running updates ...'); $bar = $this->output->createProgressBar($statusCount); Status::has('media')->chunk(200, function($statuses) use ($bar) { foreach($statuses as $status) { if($status->firstMedia()) { $media = $status->firstMedia(); if(in_array($media->mime, ['image/jpeg', 'image/png'])) { ImageThumbnail::dispatch($media); } } $bar->advance(); } }); $this->updateVersionFile('0.2.1', true); $bar->finish(); } protected function buildVersionFile() { $path = storage_path('app/version.json'); if(is_file($path) == false) { $contents = json_encode([ 'version' => $this->version, 'updated' => false, 'timestamp' => date('c') ], JSON_PRETTY_PRINT); file_put_contents($path, $contents); } } protected function getVersionFile() { $path = storage_path('app/version.json'); if(is_file($path) == false) { $contents = [ 'version' => $this->version, 'updated' => false, 'timestamp' => date('c') ]; $json = json_encode($contents, JSON_PRETTY_PRINT); file_put_contents($path, $json); return $contents; } else { return json_decode(file_get_contents($path), true); } } protected function updateVersionFile($version, $updated = false) { $path = storage_path('app/version.json'); if(is_file($path) == false) { return; } $contents = [ 'version' => $version, 'updated' => $updated, 'timestamp' => date('c') ]; $json = json_encode($contents, JSON_PRETTY_PRINT); file_put_contents($path, $json); } }