diff --git a/app/Console/Commands/UpdateCommand.php b/app/Console/Commands/UpdateCommand.php new file mode 100644 index 000000000..d39d89e20 --- /dev/null +++ b/app/Console/Commands/UpdateCommand.php @@ -0,0 +1,173 @@ +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; + + 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(); + } + + 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); + } +}