diff --git a/js/api/UpdateAPI.js b/js/api/UpdateAPI.js index 8d712d6..4f27bff 100644 --- a/js/api/UpdateAPI.js +++ b/js/api/UpdateAPI.js @@ -27,6 +27,15 @@ function UpdateAPI() { var _autoRefreshing = false; var _refreshDelay; this.refreshDelayTime = 2000; + var _installing = false; + var _ignoreNextStatusResponse = false; + + // When the updater doesn't preserve settings the box can't reconnect + // to the same network, so we can't retrieve whether the update was + // successfull, so we override the state to INSTALLED after a fixed delay + var INSTALL_TIME = 90*1000; + var _installedDelayer; // setTimout instance + //callbacks this.refreshing; // I'm refreshing this.updated; // New network status info @@ -47,6 +56,10 @@ function UpdateAPI() { timeout: _timeoutTime, success: function(response){ //console.log("UpdateAPI:status response: ",response); + if(_ignoreNextStatusResponse) { + _ignoreNextStatusResponse = false; + return; + } if(response.status == "error" || response.status == "fail") { if(failedHandler) failedHandler(response); } else { @@ -58,10 +71,18 @@ function UpdateAPI() { } else { data.newest_version_is_newer = true; } - completeHandler(response.data); + if(_installing && data.state_code === UpdateAPI.STATUS.NONE) { + data.state_code = UpdateAPI.STATUS.INSTALLED; + _installing = false; + } + completeHandler(data); } } }).fail(function() { + if(_ignoreNextStatusResponse) { + _ignoreNextStatusResponse = false; + return; + } if(failedHandler) failedHandler(); }); } @@ -77,13 +98,14 @@ function UpdateAPI() { if(failedHandler) failedHandler(response); } else { var data = response.data; - completeHandler(response.data); + if(completeHandler) completeHandler(response.data); } } }).fail(function() { //console.log("UpdatePanel:downloadUpdate: failed"); if(failedHandler) failedHandler(); }); + overrideStatus(UpdateAPI.STATUS.DOWNLOADING); } this.install = function(noRetain, completeHandler,failedHandler) { //console.log("UpdateAPI:install"); @@ -95,10 +117,24 @@ function UpdateAPI() { dataType: 'json', success: function(response){ //console.log("UpdatePanel:installUpdate response: ",response); + if(response.status == "error" || response.status == "fail") { + if(failedHandler) failedHandler(response); + } else { + var data = response.data; + if(completeHandler) completeHandler(response.data); + } } }).fail(function() { //console.log("UpdatePanel:installUpdate: no respons (there shouldn't be)"); }); + overrideStatus(UpdateAPI.STATUS.INSTALLING); + clearTimeout(_installedDelayer); + if(noRetain) { + _installedDelayer = setTimeout(function() { + overrideStatus(UpdateAPI.STATUS.INSTALLED); + },INSTALL_TIME); + } + _installing = true; } @@ -137,6 +173,18 @@ function UpdateAPI() { }); } + function overrideStatus(status) { + _self.state = status; + var data = {state_code:status,override:true}; + if(_self.updated) { + _self.updated(data); + } + if(_autoRefreshing) { + _ignoreNextStatusResponse = true; + _self.refresh(); + } + } + function versionIsBeta(version) { return version ? /.*-.*/g.test(version) : null; }