Re-implement version check
This makes LibreTime check its version against github releases and lets the user know when to update. It uses the red exclamation point when there is a patch release or if LibreTime is more than one major release ahead. The orange icon is used when LibreTime is on a git install, a single major update is available, or a pre-release version is installed. The green update icon gets used to signify that a new minor release is available. Finally the green checkmark will be used when you are on a stable release.
This commit is contained in:
parent
81d3c3e2b8
commit
06a3ad0ed3
8 changed files with 230 additions and 38 deletions
|
@ -1,5 +1,8 @@
|
|||
<?php
|
||||
|
||||
use Composer\Semver\Comparator;
|
||||
use Composer\Semver\Semver;
|
||||
|
||||
/**
|
||||
* This file does the following things:
|
||||
* 1. Calculate how many major versions back the current installation
|
||||
|
@ -9,9 +12,63 @@
|
|||
* (stored in pair of invisible div tags)
|
||||
* 4. Returns the current version, as HTML (stored in pair of invisible div tags)
|
||||
*/
|
||||
class Airtime_View_Helper_VersionNotify extends Zend_View_Helper_Abstract{
|
||||
class Airtime_View_Helper_VersionNotify extends Zend_View_Helper_Abstract {
|
||||
|
||||
public function versionNotify(){
|
||||
return "";
|
||||
public function versionNotify()
|
||||
{
|
||||
$config = Config::getConfig();
|
||||
|
||||
// retrieve and validate current and latest versions,
|
||||
$current = $config['airtime_version'];
|
||||
$latest = Application_Model_Preference::GetLatestVersion();
|
||||
$link = Application_Model_Preference::GetLatestLink();
|
||||
|
||||
$isGitRelease = preg_match('/^[[:alnum:]]{7}$/i', $current) === 1;
|
||||
$currentParts = array(0, 0, 0, 0);
|
||||
if (!$isGitRelease) {
|
||||
$currentParts = preg_split("/(\.|-)/", $current);
|
||||
}
|
||||
|
||||
$majorCandidates = SemVer::satisfiedBy($latest, sprintf('>=%1$s', $currentParts[0] + 1));
|
||||
$minorCandidates = SemVer::satisfiedBy($latest, sprintf('~%1$s.%2$s', $currentParts[0], $currentParts[1] + 1));
|
||||
$patchCandidates = SemVer::satisfiedBy($latest, sprintf('>=%1$s.%2$s.%3$s <%1$s.%3$s', $currentParts[0], $currentParts[1], $currentParts[2] + 1, $currentParts[1] + 1));
|
||||
$hasMajor = !empty($majorCandidates);
|
||||
$hasMinor = !empty($minorCandidates);
|
||||
$hasPatch = !empty($patchCandidates);
|
||||
$isPreRelease = $isGitRelease || array_key_exists(4, $currentParts);
|
||||
$hasMultiMajor = count($majorCandidates) > 1;
|
||||
|
||||
if ($isPreRelease) {
|
||||
// orange "warning" if you are on unreleased code
|
||||
$class = 'update2';
|
||||
} else if ($hasPatch || $hasMultiMajor) {
|
||||
// current patch or more than 1 major behind
|
||||
$class = 'outdated';
|
||||
} else if ($hasMinor) {
|
||||
// green warning for feature update
|
||||
$class = 'update';
|
||||
} else if ($hasMajor) {
|
||||
// orange warning for 1 major beind
|
||||
$class = 'update2';
|
||||
} else {
|
||||
$class = 'uptodate';
|
||||
}
|
||||
$latest = SemVer::rsort($latest);
|
||||
$highestVersion = $latest[0];
|
||||
|
||||
$data = (object) array(
|
||||
'link' => $link,
|
||||
'latest' => $highestVersion,
|
||||
'current' => $current,
|
||||
'hasPatch' => $hasPatch,
|
||||
'hasMinor' => $hasMinor,
|
||||
'hasMajor' => $hasMajor,
|
||||
'isPreRelease' => $isPreRelease,
|
||||
'hasMultiMajor' => $hasMultiMajor,
|
||||
);
|
||||
|
||||
$result = sprintf('<script>var versionNotifyInfo = %s;</script>', json_encode($data))
|
||||
. "<div id='version-icon' class='" . $class . "'></div>";
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue