2014-05-23 19:09:46 +02:00
|
|
|
/*
|
|
|
|
* This file is part of the Doodle3D project (http://doodle3d.com).
|
|
|
|
*
|
|
|
|
* Copyright (c) 2013, Doodle3D
|
|
|
|
* This software is licensed under the terms of the GNU GPL v2 or later.
|
|
|
|
* See file LICENSE.txt or visit http://www.gnu.org/licenses/gpl.html for full license details.
|
|
|
|
*/
|
|
|
|
|
|
|
|
(function (w) {
|
|
|
|
var _page;
|
|
|
|
var _form;
|
|
|
|
var _statusField;
|
|
|
|
var _infoField;
|
2014-05-26 17:36:21 +02:00
|
|
|
var _noRetainCheckbox;
|
2014-05-23 19:09:46 +02:00
|
|
|
var _includeBetasCheckbox;
|
|
|
|
var _submitButton;
|
|
|
|
|
|
|
|
var _updateAPI = new UpdateAPI();
|
|
|
|
var _configAPI = new ConfigAPI();
|
|
|
|
var _pageData = {};
|
|
|
|
var _updateStatus = {};
|
|
|
|
|
|
|
|
var PAGE_ID = "#update";
|
|
|
|
|
|
|
|
var _self = this;
|
|
|
|
|
|
|
|
$.mobile.document.on( "pageinit", PAGE_ID, function( event, data ) {
|
|
|
|
//console.log(PAGE_ID+":pageinit");
|
|
|
|
_page = $(this);
|
|
|
|
_statusField = _page.find("#status");
|
|
|
|
_infoField = _page.find("#info");
|
|
|
|
_form = _page.find("form");
|
2014-05-26 17:36:21 +02:00
|
|
|
_noRetainCheckbox = _form.find("#noRetainConfiguration");
|
2014-05-23 19:09:46 +02:00
|
|
|
_includeBetasCheckbox = _form.find("#includeBetas");
|
|
|
|
_submitButton = _form.find("input[type=submit]");
|
|
|
|
|
2014-05-26 17:36:21 +02:00
|
|
|
_noRetainCheckbox.change(noRetainCheckboxChanged);
|
2014-05-23 19:09:46 +02:00
|
|
|
_includeBetasCheckbox.change(includeBetasChanged);
|
|
|
|
_form.submit(update);
|
|
|
|
|
|
|
|
// make sure links in (checkbox) labels are clickable
|
|
|
|
_form.find("label a").click(function(event) {
|
|
|
|
event.stopPropagation();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
$.mobile.document.on( "pagebeforeshow", PAGE_ID, function( event, data ) {
|
|
|
|
//console.log(PAGE_ID+":pagebeforeshow");
|
|
|
|
_pageData = d3d.util.getPageParams(PAGE_ID);
|
|
|
|
if(_pageData === undefined) {
|
|
|
|
$.mobile.changePage("#boxes");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
var boxURL = "http://"+_pageData.localip;
|
|
|
|
|
|
|
|
_statusField.text("");
|
|
|
|
_submitButton.button('disable');
|
|
|
|
_submitButton.val("Update");
|
|
|
|
_submitButton.button("refresh");
|
|
|
|
_infoField.html("");
|
|
|
|
|
|
|
|
_updateAPI.init(boxURL);
|
|
|
|
retrieveUpdateStatus();
|
|
|
|
_configAPI.init(boxURL);
|
|
|
|
});
|
|
|
|
$.mobile.document.on( "pagebeforehide", PAGE_ID, function( event, data ) {
|
|
|
|
//console.log(PAGE_ID+":pagebeforehide");
|
|
|
|
});
|
|
|
|
|
|
|
|
function retrieveUpdateStatus() {
|
|
|
|
console.log(PAGE_ID+":retrieveUpdateStatus");
|
|
|
|
|
|
|
|
_submitButton.button('disable');
|
|
|
|
|
|
|
|
_updateAPI.status(function(data) { // completed
|
|
|
|
console.log(PAGE_ID+":retrieveUpdateStatus:completed");
|
|
|
|
updatePage(data);
|
|
|
|
_updateStatus = data;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
function updatePage(data) {
|
|
|
|
// Status
|
|
|
|
var status = "";
|
|
|
|
switch(data.state_code){
|
|
|
|
case UpdateAPI.STATUS.NONE:
|
|
|
|
if(data.can_update) {
|
|
|
|
status = "Update available";
|
|
|
|
} else {
|
|
|
|
status = "You're up to date.";
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case UpdateAPI.STATUS.DOWNLOADING:
|
|
|
|
status = "Downloading update...";
|
|
|
|
break;
|
|
|
|
case UpdateAPI.STATUS.DOWNLOAD_FAILED:
|
|
|
|
status = "Downloading update failed.";
|
|
|
|
break;
|
|
|
|
case UpdateAPI.STATUS.IMAGE_READY:
|
|
|
|
status = "Update downloaded.";
|
|
|
|
break;
|
|
|
|
case UpdateAPI.STATUS.INSTALLING:
|
|
|
|
status = "Installing update... ";
|
|
|
|
break;
|
|
|
|
case UpdateAPI.STATUS.INSTALLED:
|
|
|
|
status = "Update complete!";
|
|
|
|
break;
|
|
|
|
case UpdateAPI.STATUS.INSTALL_FAILED:
|
|
|
|
status = "Installing update failed.";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
_statusField.text(status);
|
|
|
|
|
|
|
|
// Button
|
|
|
|
updateButton(data);
|
|
|
|
|
|
|
|
// Info
|
|
|
|
var html = 'Current version: ' + data.current_version;
|
|
|
|
if (data.current_release_date) {
|
|
|
|
html += ' (released: ' + formatDate(data.current_release_date) + ')';
|
|
|
|
}
|
|
|
|
var localReleasenotes = "http://"+_pageData.localip+"/ReleaseNotes.html";
|
|
|
|
html += ' (<a target="d3d-curr-relnotes" href="'+localReleasenotes+'">release notes</a>).';
|
|
|
|
if(data.can_update) {
|
|
|
|
html += '<br/>Latest version: ' + data.newest_version;
|
|
|
|
if (data.newest_release_date) {
|
|
|
|
html += ' (released: ' + formatDate(data.newest_release_date) + ')';
|
|
|
|
}
|
|
|
|
html += ' (<a target="d3d-new-relnotes" href="http://doodle3d.com/releasenotes/">release notes</a>).';
|
|
|
|
}
|
|
|
|
_infoField.html(html);
|
|
|
|
}
|
|
|
|
function updateButton(data) {
|
|
|
|
console.log(PAGE_ID+":updateButton");
|
2014-05-26 17:36:21 +02:00
|
|
|
var noRetain = _noRetainCheckbox.prop('checked');
|
2014-05-23 19:09:46 +02:00
|
|
|
|
|
|
|
var buttonText = "Update";
|
|
|
|
_submitButton.button('disable');
|
|
|
|
switch(data.state_code) {
|
|
|
|
case UpdateAPI.STATUS.NONE:
|
|
|
|
case UpdateAPI.STATUS.IMAGE_READY:
|
|
|
|
case UpdateAPI.STATUS.DOWNLOAD_FAILED:
|
|
|
|
case UpdateAPI.STATUS.INSTALL_FAILED:
|
2014-05-26 17:36:21 +02:00
|
|
|
if(data.can_update || noRetain) {
|
2014-05-23 19:09:46 +02:00
|
|
|
_submitButton.button('enable');
|
|
|
|
if (data.newest_version_is_beta) {
|
2014-05-26 17:36:21 +02:00
|
|
|
if(noRetain) {
|
2014-05-23 19:09:46 +02:00
|
|
|
buttonText = "Clean update to beta";
|
2014-05-26 17:36:21 +02:00
|
|
|
} else {
|
|
|
|
buttonText = "Update to beta";
|
2014-05-23 19:09:46 +02:00
|
|
|
}
|
|
|
|
} else if (data.current_version_is_beta && !data.newest_version_is_newer) {
|
2014-05-26 17:36:21 +02:00
|
|
|
if(noRetain) {
|
2014-05-23 19:09:46 +02:00
|
|
|
buttonText = "Clean revert to latest stable release";
|
2014-05-26 17:36:21 +02:00
|
|
|
} else {
|
|
|
|
buttonText = "Revert to latest stable release";
|
2014-05-23 19:09:46 +02:00
|
|
|
}
|
2014-05-26 17:36:21 +02:00
|
|
|
} else if (noRetain){
|
2014-05-23 19:09:46 +02:00
|
|
|
if(data.newest_version_is_newer) {
|
|
|
|
buttonText = "Clean update";
|
|
|
|
} else {
|
|
|
|
buttonText = "Reinstall";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
_submitButton.val(buttonText);
|
|
|
|
_submitButton.button("refresh");
|
|
|
|
}
|
|
|
|
function formatDate(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];
|
|
|
|
}
|
2014-05-26 17:36:21 +02:00
|
|
|
function noRetainCheckboxChanged () {
|
|
|
|
//console.log(PAGE_ID+":noRetainCheckboxChanged");
|
2014-05-23 19:09:46 +02:00
|
|
|
updateButton(_updateStatus);
|
|
|
|
}
|
|
|
|
function includeBetasChanged () {
|
|
|
|
console.log(PAGE_ID+":includeBetasChanged");
|
|
|
|
|
|
|
|
var settings = {};
|
|
|
|
settings[_includeBetasCheckbox.attr('name')] = _includeBetasCheckbox.prop('checked');
|
|
|
|
_configAPI.save(settings,function() {
|
2014-05-26 17:36:21 +02:00
|
|
|
//console.log(" saved");
|
2014-05-23 19:09:46 +02:00
|
|
|
retrieveUpdateStatus();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function update() {
|
|
|
|
console.log(PAGE_ID+":update");
|
|
|
|
var submitLink = _form.data("target");
|
|
|
|
submitLink = d3d.util.replaceURLParameters(submitLink,_pageData);
|
|
|
|
$.mobile.changePage(submitLink);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
})(window);
|