diff --git a/src/js/app.js b/src/js/app.js index f724022..bf0b67c 100644 --- a/src/js/app.js +++ b/src/js/app.js @@ -30,27 +30,39 @@ var api = require('./api'); var cookie = require('./cookie')('bbctrl-'); var Sock = require('./sock'); -const { exec } = require('child_process'); -function compare_versions(a, b) { - var reStripTrailingZeros = /(\.0+)+$/; - var segsA = a.replace(reStripTrailingZeros, '').split('.'); - var segsB = b.replace(reStripTrailingZeros, '').split('.'); - var l = Math.min(segsA.length, segsB.length); +function is_newer_version(current, latest) { + const pattern = /(\d+)\.(\d+)\.(\d+)(.*)/; + const currentParts = current.match(pattern); + const latestParts = latest.match(pattern); - for (var i = 0; i < l; i++) { - var diff = parseInt(segsA[i], 10) - parseInt(segsB[i], 10); - if (diff) return diff; - } + if (!currentParts || !latestParts) { + return false; + } - return segsA.length - segsB.length; + // Normal version comparisons + const major = latestParts[1] - currentParts[1]; + const minor = latestParts[2] - currentParts[2]; + const patch = latestParts[3] - currentParts[3]; + + // If current is a pre-release, and latest is a release + const betaToRelease = latestParts[4].length === 0 && currentParts[4].length > 0; + + switch (true) { + case major > 0: + case major === 0 && minor > 0: + case major === 0 && minor === 0 && patch > 0: + case major === 0 && minor === 0 && patch === 0 && betaToRelease: + return true; + + default: + return false; + } } - function is_object(o) {return o !== null && typeof o == 'object'} function is_array(o) {return Array.isArray(o)} - function update_array(dst, src) { while (dst.length) dst.pop() for (var i = 0; i < src.length; i++) @@ -292,7 +304,7 @@ module.exports = new Vue({ show_upgrade: function () { if (!this.latestVersion) return false; - return compare_versions(this.config.version, this.latestVersion) < 0; + return is_newer_version(this.config.version, this.latestVersion); }, update: function () {