From 92e7f344e026fb4f86bab1bfbaed8b952d0de145 Mon Sep 17 00:00:00 2001 From: James Cole Date: Thu, 22 Feb 2024 06:52:58 +0100 Subject: [PATCH] Refresh update code. --- .../FireflyIIIOrg/Update/UpdateRequest.php | 159 +++++++++++------- resources/lang/en_US/firefly.php | 1 - 2 files changed, 97 insertions(+), 63 deletions(-) diff --git a/app/Services/FireflyIIIOrg/Update/UpdateRequest.php b/app/Services/FireflyIIIOrg/Update/UpdateRequest.php index dd3250b3d6..deb6b7aa1b 100644 --- a/app/Services/FireflyIIIOrg/Update/UpdateRequest.php +++ b/app/Services/FireflyIIIOrg/Update/UpdateRequest.php @@ -135,95 +135,52 @@ class UpdateRequest implements UpdateRequestInterface private function parseResult(array $information): array { app('log')->debug('Now in parseResult()', $information); - $return = []; - $current = (string)config('firefly.version'); - $latest = $information['version']; + $current = (string)config('firefly.version'); + $latest = (string)$information['version']; // strip the 'v' from the version if it's there. if (str_starts_with($latest, 'v')) { $latest = substr($latest, 1); } if (str_starts_with($current, 'develop')) { - return $this->parseDevelopResult($current, $latest, $information); + return $this->parseResultDevelop($current, $latest, $information); } - $compare = version_compare($latest, $current); + $compare = version_compare($latest, $current); app('log')->debug(sprintf('Current version is "%s", latest is "%s", result is: %d', $current, $latest, $compare)); // -1: you're running a newer version: if (-1 === $compare) { - $return['level'] = 'info'; - $return['message'] = (string)trans('firefly.update_newer_version_alert', ['your_version' => $current, 'new_version' => $latest]); - app('log')->debug('User is running a newer version', $return); - - return $return; + return $this->runsNewerVersion($current, $latest); } // running the current version: if (0 === $compare) { - $return['level'] = 'info'; - $return['message'] = (string)trans('firefly.update_current_version_alert', ['version' => $current]); - app('log')->debug('User is the current version.', $return); - - return $return; + return $this->runsSameVersion($current); } // a newer version is available! /** @var Carbon $released */ - $released = $information['date']; - $today = today(config('app.timezone'))->startOfDay(); - $diff = $today->diffInDays($released); - $expectedDiff = config('firefly.update_minimum_age') ?? 6; - // it's still very fresh, and user wants a stable release: - if ($diff <= $expectedDiff) { - $return['level'] = 'info'; - $return['message'] = (string)trans( - 'firefly.just_new_release', - [ - 'version' => $latest, - 'date' => $released->isoFormat((string)trans('config.month_and_day_js')), - 'days' => $expectedDiff, - ] - ); - app('log')->debug('Release is very fresh.', $return); + $released = $information['date']; + $today = today(config('app.timezone'))->startOfDay(); + $diff = $today->diffInDays($released); + $expectedDiff = config('firefly.update_minimum_age') ?? 6; + $isBeta = $information['is_beta'] ?? false; + $isAlpha = $information['is_alpha'] ?? false; - return $return; - } - - // it's been around for a while: - $return['level'] = 'success'; - $return['message'] = (string)trans( - 'firefly.update_new_version_alert', - [ - 'your_version' => $current, - 'new_version' => $latest, - 'date' => $released->isoFormat((string)trans('config.month_and_day_js')), - ] - ); - app('log')->debug('New release is old enough.'); - - // add warning in case of alpha or beta: - // append warning if beta or alpha. - $isBeta = $information['is_beta'] ?? false; - if (true === $isBeta) { - $return['message'] = sprintf('%s %s', $return['message'], trans('firefly.update_version_beta')); - app('log')->debug('New release is also a beta!'); - } - - $isAlpha = $information['is_alpha'] ?? false; + // it's new but alpha: if (true === $isAlpha) { - $return['message'] = sprintf('%s %s', $return['message'], trans('firefly.update_version_alpha')); - app('log')->debug('New release is also a alpha!'); + return $this->releasedNewAlpha($current, $latest, $released); } - app('log')->debug('New release is here!', $return); - // send event, this may result in a notification. - event(new NewVersionAvailable($return['message'])); + if (true === $isBeta) { + return $this->releasedNewBeta($current, $latest, $released); + } - return $return; + return $this->releasedNewVersion($current, $latest, $released); } - private function parseDevelopResult(string $current, string $latest, array $information): array + private function parseResultDevelop(string $current, string $latest, array $information): array { Log::debug(sprintf('User is running develop version "%s"', $current)); $parts = explode('/', $current); @@ -245,4 +202,82 @@ class UpdateRequest implements UpdateRequestInterface return $return; } + + private function runsNewerVersion(string $current, string $latest): array + { + $return = [ + 'level' => 'info', + 'message' => (string)trans('firefly.update_newer_version_alert', ['your_version' => $current, 'new_version' => $latest]), + ]; + app('log')->debug('User is running a newer version', $return); + + return $return; + } + + private function runsSameVersion(string $current) + { + $return = [ + 'level' => 'info', + 'message' => (string)trans('firefly.update_current_version_alert', ['version' => $current]), + ]; + app('log')->debug('User is the current version.', $return); + + return $return; + } + + private function releasedNewAlpha(string $current, string $latest, Carbon $date): array + { + app('log')->debug('New release is also a alpha!'); + $message = (string)trans( + 'firefly.update_new_version_alert', + [ + 'your_version' => $current, + 'new_version' => $latest, + 'date' => $date->isoFormat((string)trans('config.month_and_day_js')), + ] + ); + + return [ + 'level' => 'success', + 'message' => sprintf('%s %s', $message, trans('firefly.update_version_alpha')), + ]; + } + + private function releasedNewBeta(string $current, string $latest, Carbon $date): array + { + app('log')->debug('New release is also a beta!'); + $message = (string)trans( + 'firefly.update_new_version_alert', + [ + 'your_version' => $current, + 'new_version' => $latest, + 'date' => $date->isoFormat((string)trans('config.month_and_day_js')), + ] + ); + + return [ + 'level' => 'success', + 'message' => sprintf('%s %s', $message, trans('firefly.update_version_beta')), + ]; + } + + private function releasedNewVersion(string $current, string $latest, Carbon $date): array + { + app('log')->debug('New release is old enough.'); + $message = (string)trans( + 'firefly.update_new_version_alert', + [ + 'your_version' => $current, + 'new_version' => $latest, + 'date' => $date->isoFormat((string)trans('config.month_and_day_js')), + ] + ); + app('log')->debug('New release is here!', [$message]); + event(new NewVersionAvailable($message)); + + return [ + 'level' => 'success', + 'message' => $message, + ]; + } } diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index f744538274..fc23624846 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -314,7 +314,6 @@ return [ 'update_newer_version_alert' => 'You are running :your_version, which is newer than the latest release, :new_version.', 'update_check_error' => 'An error occurred while checking for updates: :error', 'unknown_error' => 'Unknown error. Sorry about that.', - 'just_new_release' => 'A new version is available! Version :version was released :date. This release is very fresh. Wait a few days for the new release to stabilize.', 'disabled_but_check' => 'You disabled update checking. So don\'t forget to check for updates yourself every now and then. Thank you!', 'admin_update_channel_title' => 'Update channel', 'admin_update_channel_explain' => 'Firefly III has three update "channels" which determine how ahead of the curve you are in terms of features, enhancements and bugs. Use the "beta" channel if you\'re adventurous and the "alpha" when you like to live life dangerously.',