Skip to content

Commit

Permalink
more reliably check for version numbers
Browse files Browse the repository at this point in the history
  • Loading branch information
perfectra1n committed Nov 9, 2024
1 parent 47baa02 commit 48d53e2
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 3 deletions.
50 changes: 49 additions & 1 deletion src/public/app/services/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -527,6 +527,52 @@ function downloadSvg(nameWithoutExtension, svgContent) {
document.body.removeChild(element);
}

/**
* Compares two semantic version strings.
* Returns:
* 1 if v1 is greater than v2
* 0 if v1 is equal to v2
* -1 if v1 is less than v2
*
* @param {string} v1 First version string
* @param {string} v2 Second version string
* @returns {number}
*/
function compareVersions(v1, v2) {

// Remove 'v' prefix and everything after dash if present
v1 = v1.replace(/^v/, '').split('-')[0];
v2 = v2.replace(/^v/, '').split('-')[0];

const v1parts = v1.split('.').map(Number);
const v2parts = v2.split('.').map(Number);

// Pad shorter version with zeros
while (v1parts.length < 3) v1parts.push(0);
while (v2parts.length < 3) v2parts.push(0);

// Compare major version
if (v1parts[0] !== v2parts[0]) {
return v1parts[0] > v2parts[0] ? 1 : -1;
}

// Compare minor version
if (v1parts[1] !== v2parts[1]) {
return v1parts[1] > v2parts[1] ? 1 : -1;
}

// Compare patch version
if (v1parts[2] !== v2parts[2]) {
return v1parts[2] > v2parts[2] ? 1 : -1;
}

return 0;
}

function isUpdateAvailable(latestVersion, currentVersion) {
return compareVersions(latestVersion, currentVersion) > 0;
}

export default {
reloadFrontendApp,
parseDate,
Expand Down Expand Up @@ -567,5 +613,7 @@ export default {
areObjectsEqual,
copyHtmlToClipboard,
createImageSrcUrl,
downloadSvg
downloadSvg,
compareVersions,
isUpdateAvailable
};
1 change: 0 additions & 1 deletion src/public/app/widgets/buttons/global_menu.js
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,6 @@ export default class GlobalMenuWidget extends BasicWidget {

const latestVersion = await this.fetchLatestVersion();
this.updateAvailableWidget.updateVersionStatus(latestVersion);
this.$updateToLatestVersionButton.toggle(latestVersion > glob.triliumVersion);
this.$updateToLatestVersionButton.find(".version-text").text(`Version ${latestVersion} is available, click to download.`);
}

Expand Down
3 changes: 2 additions & 1 deletion src/public/app/widgets/buttons/update_available.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { t } from "../../services/i18n.js";
import BasicWidget from "../basic_widget.js";
import utils from "../../services/utils.js";

const TPL = `
<div style="display: none;">
Expand Down Expand Up @@ -34,6 +35,6 @@ export default class UpdateAvailableWidget extends BasicWidget {
}

updateVersionStatus(latestVersion) {
this.$widget.toggle(latestVersion > glob.triliumVersion);
this.$widget.toggle(utils.isUpdateAvailable(latestVersion, glob.triliumVersion));
}
}

0 comments on commit 48d53e2

Please sign in to comment.