From 9a620fd9ced7dd251a645f8d4a989a28cb8e9504 Mon Sep 17 00:00:00 2001 From: Wouter R Date: Tue, 25 Feb 2014 17:06:08 +0100 Subject: [PATCH] Display more specific texts in update panel. Fix minor bugs in update code. Display release dates of updates. --- js/settings/UpdatePanel.js | 58 ++++++++++++++++++++++++++++++++------ www/settings.html | 2 +- 2 files changed, 50 insertions(+), 10 deletions(-) diff --git a/js/settings/UpdatePanel.js b/js/settings/UpdatePanel.js index a174879..f1d9dcb 100644 --- a/js/settings/UpdatePanel.js +++ b/js/settings/UpdatePanel.js @@ -23,6 +23,8 @@ function UpdatePanel() { this.canUpdate = false; this.currentVersion = ""; this.newestVersion; + this.currentReleaseDate; + this.newestReleaseDate; this.progress; this.imageSize; var _inAccessPointMode; @@ -59,21 +61,26 @@ function UpdatePanel() { this.checkStatus(false); } + this.retainChanged = function(e) { //console.log("UpdatePanel:retainChanged"); //this call ensures that the update button gets enabled if (!retainChanged && !canUpdate) self.setState(self.state,true); } + this.includeBetasChanged = function() { //console.log("UpdatePanel:includeBetasChanged"); _form.saveSettings(_form.readForm(),function(validated, data) { if(validated) self.checkStatus(false); }); } + + this.update = function() { console.log("UpdatePanel:update"); self.downloadUpdate(); } + this.downloadUpdate = function() { console.log("UpdatePanel:downloadUpdate"); $.ajax({ @@ -89,6 +96,7 @@ function UpdatePanel() { self.setState(UpdatePanel.DOWNLOADING); self.startCheckingStatus(); } + this.installUpdate = function() { console.log("UpdatePanel:installUpdate"); @@ -115,15 +123,18 @@ function UpdatePanel() { self.installedDelayer = setTimeout(function() { self.setState(UpdatePanel.INSTALLED) },self.installedDelay); } + this.startCheckingStatus = function() { clearTimeout(self.statusCheckDelayer); clearTimeout(self.retryDelayer); self.statusCheckDelayer = setTimeout(function() { self.checkStatus(true) },self.statusCheckInterval); } + this.stopCheckingStatus = function() { clearTimeout(self.statusCheckDelayer); clearTimeout(self.retryDelayer); } + this.checkStatus = function(keepChecking) { if (!communicateWithWifibox) return; $.ajax({ @@ -161,15 +172,19 @@ function UpdatePanel() { }); } + this.handleStatusData = function(data) { //console.log("UpdatePanel:handleStatusData"); - var refreshUI = (self.canUpdate != data.can_update); + //status texts and button state might have to be updated if the newest version changes (e.g., after (un)ticking include betas checkbox) + var refreshUI = (self.newestVersion != data.newest_version); self.canUpdate = data.can_update; if(self.currentVersion != data.current_version || self.newestVersion != data.newest_version) { self.currentVersion = data.current_version; self.newestVersion = data.newest_version; + self.currentReleaseDate = data.current_release_date; // not always available (for older versions) + self.newestReleaseDate = data.newest_release_date; // not always available (for older versions) self.updateInfoDisplay(); } @@ -185,6 +200,7 @@ function UpdatePanel() { break; } } + this.setState = function(newState,refresh) { //console.log("UpdatePanel:setState"); if(!refresh && this.state == newState) return; @@ -221,15 +237,25 @@ function UpdatePanel() { } this.updateStatusDisplay(); } + this.updateStatusDisplay = function() { var text = ""; if(self.newestVersion != undefined) { switch(this.state){ case UpdatePanel.NONE: if(self.canUpdate) { - var settings = _form.readForm(); - if (self.versionIsBeta(self.currentVersion) && !settings.includeBetas) text = "You can switch back to the latest stable release."; - else text = "Update(s) available."; + var currIsBeta = self.versionIsBeta(self.currentVersion); + var newIsBeta = self.versionIsBeta(self.newestVersion); + var relIsNewer = (self.newestReleaseDate && self.currentReleaseDate) ? (self.newestReleaseDate - self.currentReleaseDate > 0) : true; + + if (!newIsBeta) { + if (relIsNewer) text = "Update available."; + else text = "You can switch back to the latest stable release."; //this case is always a beta->stable 'downgrade' + } else { + //NOTE: actually, an older beta will never be presented as update by the API + var prefixText = currIsBeta ? "A" : (relIsNewer ? "A newer" : "An older"); + text = prefixText + " beta release is available."; + } } else { text = "You're up to date."; } @@ -263,22 +289,36 @@ function UpdatePanel() { } this.statusDisplay.html(text); } + this.updateInfoDisplay = function() { - var html = 'Current version: ' + self.currentVersion + - ' (release notes). '; + var html = 'Current version: ' + self.currentVersion; + if (self.currentReleaseDate) html += '; released: ' + self.formatDate(self.currentReleaseDate); + html += ' (release notes).'; + if(self.canUpdate) { - html += 'Latest version: ' + self.newestVersion + - ' (release notes).'; + html += '
Latest version: ' + self.newestVersion; + if (self.newestReleaseDate) html += '; released: ' + self.formatDate(self.newestReleaseDate); + html += ' (release notes).'; } self.infoDisplay.html(html); } + this.setInAccessPointMode = function(inAccessPointMode) { _inAccessPointMode = inAccessPointMode; self.updateStatusDisplay(); } + this.formatDate = function(ts) { + if (!ts || ts.length != 8 || !/^[0-9]+$/.test(ts)) return null; + var fields = [ ts.substr(0, 4), ts.substr(4, 2), ts.substr(6, 2) ]; + if (!fields || fields.length != 3 || fields[1] > 12) return null; + + var abbrMonths = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Sep', 'Aug', 'Oct', 'Nov', 'Dec' ]; + return abbrMonths[fields[1] - 1] + " " + fields[2] + ", " + fields[0]; + } + this.versionIsBeta = function(version) { - return version.match(/.*-.*/g) != null; + return version ? /.*-.*/g.test(version) : null; } } diff --git a/www/settings.html b/www/settings.html index 147601e..b3418bd 100644 --- a/www/settings.html +++ b/www/settings.html @@ -166,7 +166,7 @@
Update
-
+