0
0
mirror of https://github.com/Doodle3D/doodle3d-client.git synced 2024-11-25 18:47:57 +01:00
doodle3d-client/js/SettingsWindow.js

792 lines
25 KiB
JavaScript
Raw Normal View History

2013-12-20 16:31:41 +01: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.
*/
2013-08-27 15:34:28 +02:00
//these settings are defined in the firmware (conf_defaults.lua) and will be initialized in loadSettings()
2014-01-17 16:28:29 +01:00
var settings = {};
2014-01-16 21:30:57 +01:00
var settingsPopup;
//wrapper to prevent scoping issues in showSettings()
function openSettingsWindow() {
2014-01-16 21:30:57 +01:00
settingsWindow.loadSettings(function() { // reload settings
settingsPopup.open();
});
}
2013-08-27 15:34:28 +02:00
function SettingsWindow() {
this.wifiboxURL;
2014-01-17 16:28:29 +01:00
this.wifiboxCGIBinURL;
2013-08-27 15:34:28 +02:00
this.window;
this.btnOK;
2013-08-27 15:34:28 +02:00
this.form;
this.timeoutTime = 3000;
this.saveSettingsTimeoutTime = 8000;
2013-08-27 15:34:28 +02:00
this.retryDelay = 2000; // retry setTimout delay
2013-10-10 12:12:33 +02:00
this.retryRetrieveNetworkStatusDelayTime = 1000;// retry setTimout delay
2013-08-27 15:34:28 +02:00
this.retryLoadSettingsDelay; // retry setTimout instance
this.retrySaveSettingsDelay; // retry setTimout instance
2014-01-17 16:28:29 +01:00
this.retryResetSettingsDelay; // retry setTimout instance
2013-09-02 18:07:22 +02:00
this.retryRetrieveNetworkStatusDelay;// retry setTimout instance
2013-09-02 18:07:22 +02:00
this.apFieldSet;
this.clientFieldSet;
2014-01-02 15:09:36 +01:00
this.restoreStateField;
2013-09-02 18:07:22 +02:00
this.networks;
this.currentNetwork; // the ssid of the network the box is on
this.selectedNetwork; // the ssid of the selected network in the client mode settings
this.currentLocalIP = "";
this.clientModeState = SettingsWindow.NOT_CONNECTED;
this.currentAP;
this.apModeState = SettingsWindow.NO_AP;
// after switching wifi network or creating a access point we delay the status retrieval
// because the webserver needs time to switch
2014-01-17 16:28:29 +01:00
this.retrieveNetworkStatusDelay; // setTimout delay
this.retrieveNetworkStatusDelayTime = 1000;
2013-09-02 18:07:22 +02:00
2014-01-02 15:09:36 +01:00
this.restoredStateHideDelayTime = 3000;
2014-01-17 16:28:29 +01:00
this.restoredStateHideDelay; // setTimout instance
2013-08-27 15:34:28 +02:00
// Events
2013-10-10 12:12:33 +02:00
SettingsWindow.SETTINGS_LOADED = "settingsLoaded";
2013-09-02 18:07:22 +02:00
// network client mode states
2014-01-17 16:28:29 +01:00
SettingsWindow.NOT_CONNECTED = "not connected"; // also used as first item in networks list
SettingsWindow.CONNECTED = "connected";
SettingsWindow.CONNECTING = "connecting";
SettingsWindow.CONNECTING_FAILED = "connecting failed";
// network access point mode states
SettingsWindow.NO_AP = "no ap";
SettingsWindow.AP = "ap";
SettingsWindow.CREATING_AP = "creating ap";
2014-01-17 16:28:29 +01:00
SettingsWindow.API_CONNECTING_FAILED = -1;
SettingsWindow.API_NOT_CONNECTED = 0;
SettingsWindow.API_CONNECTING = 1;
SettingsWindow.API_CONNECTED = 2;
SettingsWindow.API_CREATING = 3;
SettingsWindow.API_CREATED = 4;
// network mode
2014-01-17 16:28:29 +01:00
SettingsWindow.NETWORK_MODE_NEITHER = "neither";
SettingsWindow.NETWORK_MODE_CLIENT = "clientMode";
SettingsWindow.NETWORK_MODE_ACCESS_POINT = "accessPointMode";
this.networkMode = SettingsWindow.NETWORK_MODE_NEITHER;
this.updatePanel = new UpdatePanel();
this.printerPanel = new PrinterPanel();
2013-08-27 15:34:28 +02:00
var self = this;
2013-09-02 18:07:22 +02:00
this.init = function(wifiboxURL,wifiboxCGIBinURL) {
2013-08-27 15:34:28 +02:00
this.wifiboxURL = wifiboxURL;
this.wifiboxCGIBinURL = wifiboxCGIBinURL;
2013-09-02 18:07:22 +02:00
2014-01-16 21:30:57 +01:00
this.window = $("#popupSettings");
this.btnOK = this.window.find(".btnOK");
enableButton(this.btnOK,this.submitwindow);
2014-01-17 16:28:29 +01:00
2014-01-16 21:30:57 +01:00
settingsPopup = new Popup($("#popupSettings"), $("#popupMask"));
2014-01-10 17:21:43 +01:00
this.window.find("#settingsContainer").load("settings.html", function() {
console.log("Settings:finished loading settings.html, now loading settings...");
2013-09-02 18:07:22 +02:00
self.form = self.window.find("form");
2014-01-17 16:28:29 +01:00
self.form.submit(function (e) { self.submitwindow(e); });
2013-09-02 18:07:22 +02:00
$.ajax({
url: self.wifiboxURL + "/printer/listall",
dataType: 'json',
timeout: self.timeoutTime,
success: function(response) {
console.log("Settings:printer/listall response: ",response.data.printers);
$.each(response.data.printers, function(key, value) {
2014-01-17 16:28:29 +01:00
// console.log(key,value);
$('#printerType').append($('<option>').text(value).attr('value', key));
});
self.loadSettings();
2014-01-17 16:28:29 +01:00
var btnAP = self.form.find("label[for='ap']");
var btnClient = self.form.find("label[for='client']");
var btnRefresh = self.form.find("#refreshNetworks");
var btnConnect = self.form.find("#connectToNetwork");
var btnCreate = self.form.find("#createAP");
var networkSelector = self.form.find("#network");
2014-01-17 16:28:29 +01:00
self.apFieldSet = self.form.find("#apSettings");
self.clientFieldSet = self.form.find("#clientSettings");
2014-01-17 16:28:29 +01:00
self.btnRestoreSettings = self.form.find("#restoreSettings");
self.restoreStateField = self.form.find("#restoreState");
btnAP.on('touchstart mousedown',self.showAPSettings);
btnClient.on('touchstart mousedown',self.showClientSettings);
btnRefresh.on('touchstart mousedown',self.refreshNetworks);
btnConnect.on('touchstart mousedown',self.connectToNetwork);
btnCreate.on('touchstart mousedown',self.createAP);
networkSelector.change(self.networkSelectorChanged);
self.btnRestoreSettings.on('touchstart mousedown',self.resetSettings);
// update panel
var $updatePanelElement = self.form.find("#updatePanel");
self.updatePanel.init(wifiboxURL,$updatePanelElement);
// printer panel
var $printerPanelElement = self.form.find("#printerPanel");
self.printerPanel.init(wifiboxURL,$printerPanelElement);
self.printerPanel.fillForm = self.fillForm;
}
}).fail(function() {
console.log("FATAL ERROR: Settings:printer/listall failed");
});
}); //this.window.find
2014-01-17 16:28:29 +01:00
}; //this.init
2014-01-16 21:30:57 +01:00
this.openSettings = function() {
self.loadSettings(function() { // reload settings
settingsPopup.open();
});
2014-01-17 16:28:29 +01:00
};
2014-01-16 21:30:57 +01:00
this.closeSettings = function(complete) {
settingsPopup.close(complete);
2014-01-17 16:28:29 +01:00
};
2013-08-27 15:34:28 +02:00
this.submitwindow = function(e) {
disableButton(self.btnOK,self.submitwindow);
2013-08-27 15:34:28 +02:00
e.preventDefault();
2014-01-17 16:28:29 +01:00
e.stopPropagation();
self.saveSettings(self.readForm(),function(success){
if(success) {
2014-01-16 21:30:57 +01:00
self.closeSettings(function() {
enableButton(self.btnOK,self.submitwindow);
});
2013-10-28 13:50:08 +01:00
self.signin();
2014-01-17 16:28:29 +01:00
} else {
enableButton(self.btnOK,self.submitwindow);
}
});
2014-01-17 16:28:29 +01:00
clearTimeout(self.retryRetrieveNetworkStatusDelay);
};
2013-09-02 18:07:22 +02:00
this.loadSettings = function(complete) {
2013-08-27 15:34:28 +02:00
if (!communicateWithWifibox) {
2014-01-17 16:28:29 +01:00
console.log(" communicateWithWifibox is false: settings aren't being loaded from wifibox...");
2013-08-27 15:34:28 +02:00
return;
}
2014-01-17 16:28:29 +01:00
console.log("Settings:loadSettings() >> getting new data...");
2013-09-02 18:07:22 +02:00
2013-08-27 15:34:28 +02:00
$.ajax({
2014-01-17 16:28:29 +01:00
url: this.wifiboxURL + "/config/all",
dataType: 'json',
timeout: this.timeoutTime,
success: function(response){
console.log("Settings:loadSettings response: ",response);
settings = response.data;
console.log(" settings: ",settings);
self.fillForm(settings);
$(document).trigger(SettingsWindow.SETTINGS_LOADED);
if(complete) complete();
2013-08-27 15:34:28 +02:00
}
2013-09-02 18:07:22 +02:00
}).fail(function() {
2013-08-27 15:34:28 +02:00
console.log("Settings:loadSettings: failed");
clearTimeout(self.retryLoadSettingsDelay);
2014-01-17 16:28:29 +01:00
self.retryLoadSettingsDelay = setTimeout(function() { self.loadSettings(); },self.retryDelay); // retry after delay
2013-08-27 15:34:28 +02:00
});
2013-09-02 18:07:22 +02:00
2014-01-17 16:28:29 +01:00
this.refreshNetworks();
this.retrieveNetworkStatus(false);
};
2013-12-01 18:38:02 +01:00
this.fillForm = function(settings,form) {
if(!form) form = this.form; // if no form specified, fill whole form
2014-01-17 16:28:29 +01:00
2013-08-28 18:33:25 +02:00
//fill form with loaded settings
2013-12-01 18:38:02 +01:00
var selects = form.find("select");
2013-08-28 18:33:25 +02:00
selects.each( function(index,element) {
2014-01-17 16:28:29 +01:00
var elem = $(element);
elem.val(settings[elem.attr('name')]);
2013-08-28 18:33:25 +02:00
});
2013-12-01 18:38:02 +01:00
var inputs = form.find("input");
2013-08-28 18:33:25 +02:00
inputs.each( function(index,element) {
2014-01-17 16:28:29 +01:00
var elem = $(element);
2013-08-27 15:34:28 +02:00
//console.log("printer setting input: ",index,element.attr("type"),element.attr('name')); //,element);
2014-01-17 16:28:29 +01:00
switch(elem.attr("type")) {
case "text":
case "number":
elem.val(settings[elem.attr('name')]);
break;
case "checkbox":
elem.prop('checked', settings[elem.attr('name')]);
break;
2013-08-27 15:34:28 +02:00
}
});
2013-12-01 18:38:02 +01:00
var textareas = form.find("textarea");
2013-08-28 18:33:25 +02:00
textareas.each( function(index,element) {
2014-01-17 16:28:29 +01:00
var elem = $(element);
var value = settings[elem.attr('name')];
elem.val(value);
2013-08-28 18:33:25 +02:00
});
2014-01-17 16:28:29 +01:00
};
2013-09-02 18:07:22 +02:00
this.saveSettings = function(newSettings,complete) {
2013-10-21 15:14:00 +02:00
settings = newSettings; // store new settings in global settings
if (communicateWithWifibox) {
2014-01-17 16:28:29 +01:00
$.ajax({
url: self.wifiboxCGIBinURL + "/config",
type: "POST",
data: newSettings,
dataType: 'json',
timeout: self.saveSettingsTimeoutTime,
success: function(response){
console.log("Settings:saveSettings response: ",response);
if(response.status == "error") {
clearTimeout(self.retrySaveSettingsDelay);
self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings(settings,complete); },self.retryDelay); // retry after delay
} else {
var data = response.data;
var validation = data.validation;
self.clearValidationErrors();
var validated = true;
$.each(validation, function(key, val) {
if (val != "ok") {
console.log("ERROR: setting '" + key + "' not successfully set. Message: " + val);
self.displayValidationError(key,val);
validated = false;
}
});
settings.substituted_ssid = data.substituted_ssid;
if(complete) complete(validated);
}
}
}).fail(function() {
console.log("Settings:saveSettings: failed");
clearTimeout(self.retrySaveSettingsDelay);
2014-01-17 16:28:29 +01:00
self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings(settings,complete); },self.retryDelay); // retry after delay
});
2014-01-17 16:28:29 +01:00
}
};
2013-11-22 17:45:16 +01:00
this.resetSettings = function() {
console.log("resetSettings");
//$("#restoreSettings").addClass("disabled");
self.btnRestoreSettings.attr("disabled", true);
2014-01-17 16:28:29 +01:00
2014-01-02 15:09:36 +01:00
clearTimeout(self.restoredStateHideDelay);
2014-01-17 16:28:29 +01:00
2014-01-02 15:09:36 +01:00
self.setRestoreState("Restoring...");
2014-01-17 16:28:29 +01:00
2013-11-22 17:45:16 +01:00
//console.log(" self.wifiboxURL: ",self.wifiboxURL);
2014-01-17 16:28:29 +01:00
2013-11-22 17:45:16 +01:00
if (communicateWithWifibox) {
2014-01-17 16:28:29 +01:00
$.ajax({
url: self.wifiboxCGIBinURL + "/config/resetall",
type: "POST",
dataType: 'json',
timeout: this.timeoutTime,
success: function(response){
console.log("Settings:resetSettings response: ",response);
if(response.status == "error") {
clearTimeout(self.retryResetSettingsDelay);
self.retryResetSettingsDelay = setTimeout(function() { self.resetSettings(); },self.retryDelay); // retry after delay
} else {
settings = response.data;
2013-11-22 17:45:16 +01:00
console.log(" settings: ",settings);
2013-12-01 18:38:02 +01:00
self.fillForm(settings);
2013-11-22 17:45:16 +01:00
$(document).trigger(SettingsWindow.SETTINGS_LOADED);
2014-01-17 16:28:29 +01:00
2013-11-22 17:45:16 +01:00
self.btnRestoreSettings.removeAttr("disabled");
2014-01-02 15:09:36 +01:00
self.setRestoreState("Settings restored");
// auto hide status
clearTimeout(self.restoredStateHideDelay);
self.restoredStateHideDelay = setTimeout(function() { self.setRestoreState(""); },self.restoredStateHideDelayTime);
2014-01-17 16:28:29 +01:00
}
2013-11-22 17:45:16 +01:00
}
}).fail(function() {
console.log("Settings:resetSettings: failed");
clearTimeout(self.retryResetSettingsDelay);
2014-01-17 16:28:29 +01:00
self.retryResetSettingsDelay = setTimeout(function() { self.resetSettings(); },self.retryDelay); // retry after delay
2013-11-22 17:45:16 +01:00
});
2014-01-17 16:28:29 +01:00
}
};
2014-01-02 15:09:36 +01:00
this.setRestoreState = function(text) {
self.restoreStateField.html(text);
2014-01-17 16:28:29 +01:00
};
this.displayValidationError = function(key,msg) {
var formElement = self.form.find("[name|='"+key+"']");
formElement.addClass("error");
2014-01-17 16:28:29 +01:00
var errorMsg = "<p class='errorMsg'>"+msg+"</p>";
formElement.after(errorMsg);
2014-01-17 16:28:29 +01:00
};
this.clearValidationErrors = function() {
self.form.find(".errorMsg").remove();
self.form.find(".error").removeClass("error");
2014-01-17 16:28:29 +01:00
};
2013-09-02 18:07:22 +02:00
this.readForm = function() {
//console.log("SettingsWindow:readForm");
var settings = {};
var selects = self.form.find("select");
selects.each( function(index,element) {
2014-01-17 16:28:29 +01:00
var elem = $(element);
//var fieldName = elem.attr('name');
if(elem.attr('name') != "") {
settings[elem.attr('name')] = elem.val();
}
});
2013-09-02 18:07:22 +02:00
var inputs = self.form.find("input");
inputs.each( function(index,element) {
2014-01-17 16:28:29 +01:00
var elem = $(element);
if(elem.attr('name') != "") {
switch(elem.attr("type")) {
case "text":
case "number":
settings[elem.attr('name')] = elem.val();
break;
case "checkbox":
settings[elem.attr('name')] = elem.prop('checked');
break;
}
}
});
2013-09-02 18:07:22 +02:00
var textareas = self.form.find("textarea");
2013-08-28 18:33:25 +02:00
textareas.each( function(index,element) {
2014-01-17 16:28:29 +01:00
var elem = $(element);
settings[elem.attr('name')] = elem.val();
2013-08-28 18:33:25 +02:00
});
//console.log(settings);
return settings;
2014-01-17 16:28:29 +01:00
};
2013-09-02 18:07:22 +02:00
2013-10-28 13:50:08 +01:00
this.signin = function() {
$.ajax({
url: self.wifiboxCGIBinURL + "/network/signin",
type: "GET",
dataType: 'json',
timeout: self.timeoutTime,
success: function(response){
console.log("Settings:signin response: ",response);
}
}).fail(function() {
console.log("Settings:signin: failed");
});
2014-01-17 16:28:29 +01:00
};
2013-10-29 14:10:56 +01:00
this.downloadlogs = function() {
2014-01-17 16:28:29 +01:00
window.location.href = self.wifiboxURL + "/info/logfiles";
};
this.downloadGcode = function() {
var gcode = generate_gcode();
if (gcode!=undefined) {
var blob = new Blob([gcode.join("\n")], {type: "text/plain;charset=utf-8"});
saveAs(blob, "doodle3d.gcode");
}
2014-01-17 16:28:29 +01:00
};
this.downloadSvg = function() {
var svg = saveToSvg();
if (svg!=undefined) {
var blob = new Blob([svg], {type: "text/plain;charset=utf-8"});
saveAs(blob, "doodle3d.svg");
}
2014-01-17 16:28:29 +01:00
};
2013-09-02 18:07:22 +02:00
/*
* Networks ui
*/
this.showAPSettings = function() {
self.apFieldSet.show();
self.clientFieldSet.hide();
2014-01-17 16:28:29 +01:00
};
2013-09-02 18:07:22 +02:00
this.showClientSettings = function() {
self.clientFieldSet.show();
self.apFieldSet.hide();
2014-01-17 16:28:29 +01:00
};
2013-09-02 18:07:22 +02:00
this.refreshNetworks = function() {
2014-01-17 16:28:29 +01:00
console.log("Settings:refreshNetworks");
2013-09-02 18:07:22 +02:00
if (communicateWithWifibox) {
2014-01-17 16:28:29 +01:00
$.ajax({
url: self.wifiboxURL + "/network/scan",
type: "GET",
dataType: 'json',
timeout: self.timeoutTime,
success: function(response){
console.log("Settings:refreshNetworks response: ",response);
if(response.status == "error") {
//clearTimeout(self.retrySaveSettingsDelay);
2013-09-02 18:07:22 +02:00
//self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings() },self.retryDelay); // retry after delay
2014-01-17 16:28:29 +01:00
} else {
var networks = response.data.networks;
self.networks = {};
var foundCurrentNetwork = false;
var networkSelector = self.form.find("#network");
networkSelector.empty();
networkSelector.append(
2013-09-02 18:07:22 +02:00
$("<option></option>").val(SettingsWindow.NOT_CONNECTED).html("not connected")
2014-01-17 16:28:29 +01:00
);
$.each(networks, function(index,element) {
if(element.ssid == self.currentNetwork) {
foundCurrentNetwork = true;
}
2013-09-02 18:07:22 +02:00
networkSelector.append(
2014-01-17 16:28:29 +01:00
$("<option></option>").val(element.ssid).html(element.ssid)
2013-09-02 18:07:22 +02:00
);
self.networks[element.ssid] = element;
});
2014-01-17 16:28:29 +01:00
if(foundCurrentNetwork) {
networkSelector.val(self.currentNetwork);
self.selectNetwork(self.currentNetwork);
}
}
2013-09-02 18:07:22 +02:00
}
}).fail(function() {
2013-09-02 18:07:22 +02:00
});
2014-01-17 16:28:29 +01:00
}
};
2014-01-17 16:28:29 +01:00
this.retrieveNetworkStatus = function(connecting) {
//console.log("Settings:retrieveNetworkStatus");
if (communicateWithWifibox) {
$.ajax({
url: self.wifiboxURL + "/network/status",
type: "GET",
dataType: 'json',
timeout: self.timeoutTime,
success: function(response){
console.log("Settings:retrieveNetworkStatus response: ",response);
if(response.status == "error") {
2014-01-17 16:28:29 +01:00
} else {
var data = response.data;
2014-01-17 16:28:29 +01:00
if(typeof data.status === 'string') {
data.status = parseInt(data.status);
2013-10-10 12:12:33 +02:00
}
2014-01-17 16:28:29 +01:00
//console.log(" data.status: ",data.status,data.statusMessage);
// Determine which network settings to show
switch(data.status) {
case SettingsWindow.API_NOT_CONNECTED:
//console.log(" not connected & not a access point");
self.apFieldSet.show();
self.clientFieldSet.show();
self.networkMode = SettingsWindow.NETWORK_MODE_NEITHER;
break;
case SettingsWindow.API_CONNECTING_FAILED:
case SettingsWindow.API_CONNECTING:
case SettingsWindow.API_CONNECTED:
//console.log(" client mode");
self.form.find("#client").prop('checked',true);
self.apFieldSet.hide();
self.clientFieldSet.show();
if(data.status == SettingsWindow.API_CONNECTED) {
var networkSelector = self.form.find("#network");
networkSelector.val(data.ssid);
2014-01-17 16:28:29 +01:00
self.currentNetwork = data.ssid;
self.currentLocalIP = data.localip;
self.selectNetwork(data.ssid);
} else {
self.currentLocalIP = "";
}
self.networkMode = SettingsWindow.NETWORK_MODE_CLIENT;
break;
case SettingsWindow.API_CREATING:
case SettingsWindow.API_CREATED:
//console.log(" access point mode");
self.form.find("#ap").prop('checked',true);
self.apFieldSet.show();
self.clientFieldSet.hide();
self.currentNetwork = undefined;
self.selectNetwork(SettingsWindow.NOT_CONNECTED);
var networkSelector = self.form.find("#network");
networkSelector.val(SettingsWindow.NOT_CONNECTED);
if(data.ssid && data.status == SettingsWindow.API_CREATED) {
self.currentAP = data.ssid;
}
self.networkMode = SettingsWindow.NETWORK_MODE_ACCESS_POINT;
break;
}
self.updatePanel.setNetworkMode(self.networkMode);
// update status message
switch(data.status) {
case SettingsWindow.API_CONNECTING_FAILED:
self.setClientModeState(SettingsWindow.CONNECTING_FAILED,data.statusMessage);
self.setAPModeState(SettingsWindow.NO_AP,"");
break;
case SettingsWindow.API_NOT_CONNECTED:
self.setClientModeState(SettingsWindow.NOT_CONNECTED,"");
self.setAPModeState(SettingsWindow.NO_AP,"");
break;
case SettingsWindow.API_CONNECTING:
self.setClientModeState(SettingsWindow.CONNECTING,"");
self.setAPModeState(SettingsWindow.NO_AP,"");
break;
case SettingsWindow.API_CONNECTED:
self.setClientModeState(SettingsWindow.CONNECTED,"");
self.setAPModeState(SettingsWindow.NO_AP,"");
break;
case SettingsWindow.API_CREATING:
self.setClientModeState(SettingsWindow.NOT_CONNECTED,"");
self.setAPModeState(SettingsWindow.CREATING_AP,"");
break;
case SettingsWindow.API_CREATED:
self.setClientModeState(SettingsWindow.NOT_CONNECTED,"");
self.setAPModeState(SettingsWindow.AP,"");
break;
}
2014-01-17 16:28:29 +01:00
// Keep checking for updates?
if(connecting) {
2013-10-10 12:12:33 +02:00
switch(data.status) {
2014-01-17 16:28:29 +01:00
case SettingsWindow.API_CONNECTING:
case SettingsWindow.API_CREATING:
clearTimeout(self.retryRetrieveNetworkStatusDelay);
self.retryRetrieveNetworkStatusDelay = setTimeout(function() { self.retrieveNetworkStatus(connecting); },self.retryRetrieveNetworkStatusDelayTime); // retry after delay
break;
2013-10-10 12:12:33 +02:00
}
2014-01-17 16:28:29 +01:00
}
}
2013-09-02 18:07:22 +02:00
}
}).fail(function() {
2013-09-04 19:24:52 +02:00
console.log("Settings:retrieveNetworkStatus: failed");
2013-09-02 18:07:22 +02:00
clearTimeout(self.retryRetrieveNetworkStatusDelay);
2014-01-17 16:28:29 +01:00
self.retryRetrieveNetworkStatusDelay = setTimeout(function() { self.retrieveNetworkStatus(connecting); },self.retryDelay); // retry after delay
2013-09-02 18:07:22 +02:00
});
2014-01-17 16:28:29 +01:00
}
};
2013-09-02 18:07:22 +02:00
this.networkSelectorChanged = function(e) {
var selectedOption = $(this).find("option:selected");
self.selectNetwork(selectedOption.val());
2014-01-17 16:28:29 +01:00
};
2013-09-02 18:07:22 +02:00
this.selectNetwork = function(ssid) {
console.log("select network: ",ssid);
2013-10-22 03:31:12 +02:00
if(ssid == "") return;
console.log(" checked");
2013-09-02 18:07:22 +02:00
this.selectedNetwork = ssid;
2014-01-17 16:28:29 +01:00
if(this.networks == undefined || ssid == SettingsWindow.NOT_CONNECTED) {
this.hideWiFiPassword();
} else {
var network = this.networks[ssid];
if(network.encryption == "none") {
this.hideWiFiPassword();
} else {
this.showWiFiPassword();
}
this.form.find("#password").val("");
}
};
2013-10-10 12:12:33 +02:00
this.showWiFiPassword = function() {
2014-01-17 16:28:29 +01:00
this.form.find("#passwordLabel").show();
2013-10-10 12:12:33 +02:00
this.form.find("#password").show();
2014-01-17 16:28:29 +01:00
};
2013-10-10 12:12:33 +02:00
this.hideWiFiPassword = function() {
this.form.find("#passwordLabel").hide();
this.form.find("#password").hide();
2014-01-17 16:28:29 +01:00
};
this.setClientModeState = function(state,msg) {
var field = this.form.find("#clientModeState");
var btnConnect = self.form.find("#connectToNetwork");
switch(state) {
case SettingsWindow.NOT_CONNECTED:
btnConnect.removeAttr("disabled");
field.html("Not connected");
break;
case SettingsWindow.CONNECTED:
btnConnect.removeAttr("disabled");
var fieldText = "Connected to: <b>"+this.currentNetwork+"</b>.";
if(this.currentLocalIP != undefined && this.currentLocalIP != "") {
var a = "<a href='http://"+this.currentLocalIP+"' target='_black'>"+this.currentLocalIP+"</a>";
fieldText += " (IP: "+a+")";
}
field.html(fieldText);
break;
case SettingsWindow.CONNECTING:
btnConnect.attr("disabled", true);
field.html("Connecting... Reconnect by connecting your device to <b>"+this.selectedNetwork+"</b> and going to <a href='http://connect.doodle3d.com'>connect.doodle3d.com</a>");
break;
case SettingsWindow.CONNECTING_FAILED:
btnConnect.removeAttr("disabled");
field.html(msg);
break;
}
this.clientModeState = state;
};
this.setAPModeState = function(state,msg) {
2013-10-10 12:12:33 +02:00
var field = this.form.find("#apModeState");
var btnCreate = this.form.find("#createAP");
switch(state) {
2014-01-17 16:28:29 +01:00
case SettingsWindow.NO_AP:
btnCreate.removeAttr("disabled");
field.html("Not currently a access point");
break;
case SettingsWindow.AP:
btnCreate.removeAttr("disabled");
field.html("Is access point: <b>"+this.currentAP+"</b>");
break;
case SettingsWindow.CREATING_AP:
btnCreate.attr("disabled", true);
field.html("Creating access point... Reconnect by connecting your device to <b>"+settings.substituted_ssid+"</b> and going to <a href='http://draw.doodle3d.com'>draw.doodle3d.com</a>");
break;
2013-10-10 12:12:33 +02:00
}
this.apModeState = state;
2014-01-17 16:28:29 +01:00
};
2013-09-02 18:07:22 +02:00
this.connectToNetwork = function() {
console.log("connectToNetwork");
if(self.selectedNetwork == undefined) return;
var postData = {
2014-01-17 16:28:29 +01:00
ssid:self.selectedNetwork,
phrase:self.form.find("#password").val(),
recreate:true
};
2013-09-02 18:07:22 +02:00
console.log(" postData: ",postData);
if (communicateWithWifibox) {
// save network related settings and on complete, connect to network
self.saveSettings(self.readForm(),function(success) {
if(!success) return;
$.ajax({
url: self.wifiboxCGIBinURL + "/network/associate",
type: "POST",
data: postData,
dataType: 'json',
timeout: self.timeoutTime,
success: function(response){
console.log("Settings:connectToNetwork response: ",response);
}
}).fail(function() {
console.log("Settings:connectToNetwork: timeout (normal behavior)");
//clearTimeout(self.retrySaveSettingsDelay);
//self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings() },self.retryDelay); // retry after delay
});
2013-09-02 18:07:22 +02:00
});
2014-01-17 16:28:29 +01:00
}
self.setClientModeState(SettingsWindow.CONNECTING,"");
2014-01-17 16:28:29 +01:00
// after switching wifi network or creating a access point we delay the status retrieval
// because the webserver needs time to switch
2013-10-10 12:12:33 +02:00
clearTimeout(self.retrieveNetworkStatusDelay);
2014-01-17 16:28:29 +01:00
self.retrieveNetworkStatusDelay = setTimeout(function() { self.retrieveNetworkStatus(true); },self.retrieveNetworkStatusDelayTime);
};
2013-09-02 18:07:22 +02:00
2014-01-17 16:28:29 +01:00
this.createAP = function() {
console.log("createAP");
2013-09-02 18:07:22 +02:00
if (communicateWithWifibox) {
// save network related settings and on complete, create access point
self.saveSettings(self.readForm(),function(success) {
if(!success) return;
2013-10-18 13:23:50 +02:00
self.setAPModeState(SettingsWindow.CREATING_AP); // get latest substituted ssid
$.ajax({
url: self.wifiboxCGIBinURL + "/network/openap",
type: "POST",
dataType: 'json',
timeout: self.timeoutTime,
success: function(response){
console.log("Settings:createAP response: ",response);
}
}).fail(function() {
console.log("Settings:createAP: timeout (normal behavior)");
//clearTimeout(self.retrySaveSettingsDelay);
//self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings() },self.retryDelay); // retry after delay
});
self.setAPModeState(SettingsWindow.CREATING_AP,"");
// after switching wifi network or creating a access point we delay the status retrieval
// because the webserver needs time to switch
clearTimeout(self.retrieveNetworkStatusDelay);
2014-01-17 16:28:29 +01:00
self.retrieveNetworkStatusDelay = setTimeout(function() { self.retrieveNetworkStatus(true); },self.retrieveNetworkStatusDelayTime);
2013-09-02 18:07:22 +02:00
});
2014-01-17 16:28:29 +01:00
}
};
2013-08-27 15:34:28 +02:00
}
/*************************
*
*
* FROM DOODLE3D.INI
*
*/
//TODO: find all references to these variables, replace them and finally remove these.
var objectHeight = 20;
var layerHeight = .2;
//var wallThickness = .5;
//var hop = 0;
2013-08-27 15:34:28 +02:00
//var speed = 70;
//var travelSpeed = 200;
var enableTraveling = true;
//var filamentThickness = 2.89;
var minScale = .3;
var maxScale = 1;
var shape = "%";
var twists = 0;
//var useSubLayers = true;
2013-08-27 15:34:28 +02:00
//var debug = false; // debug moved to main.js
var loglevel = 2;
//var zOffset = 0;
2013-08-27 15:34:28 +02:00
var serverport = 8888;
var autoLoadImage = "hand.txt";
var loadOffset = [0, 0]; // x en y ?
var showWarmUp = true;
var loopAlways = false;
var firstLayerSlow = true;
var useSubpathColors = false;
var autoWarmUp = true;
//var maxObjectHeight = 150;
2013-08-27 15:34:28 +02:00
var maxScaleDifference = .1;
var frameRate = 60;
var quitOnEscape = true;
var screenToMillimeterScale = .3; // 0.3
//var targetTemperature = 220;
//var simplifyiterations = 10;
//var simplifyminNumPoints = 15;
//var simplifyminDistance = 3;
//var retractionspeed = 50;
//var retractionminDistance = 5;
//var retractionamount = 3;
2013-08-27 15:34:28 +02:00
var sideis3D = true;
var sidevisible = true;
var sidebounds = [900, 210, 131, 390];
var sideborder = [880, 169, 2, 471];
var windowbounds = [0, 0, 800, 500];
var windowcenter = true;
var windowfullscreen = false;
var autoWarmUpCommand = "M104 S230";
//var checkTemperatureInterval = 3;
var autoWarmUpDelay = 3;