151 lines
5.6 KiB
JavaScript
151 lines
5.6 KiB
JavaScript
$(function() {
|
|
function ConnectionViewModel(parameters) {
|
|
var self = this;
|
|
|
|
self.loginState = parameters[0];
|
|
self.settings = parameters[1];
|
|
self.printerProfiles = parameters[2];
|
|
|
|
self.printerProfiles.profiles.items.subscribe(function() {
|
|
var allProfiles = self.printerProfiles.profiles.items();
|
|
|
|
var printerOptions = [];
|
|
_.each(allProfiles, function(profile) {
|
|
printerOptions.push({id: profile.id, name: profile.name});
|
|
});
|
|
self.printerOptions(printerOptions);
|
|
});
|
|
|
|
self.printerProfiles.currentProfile.subscribe(function() {
|
|
self.selectedPrinter(self.printerProfiles.currentProfile());
|
|
});
|
|
|
|
self.portOptions = ko.observableArray(undefined);
|
|
self.baudrateOptions = ko.observableArray(undefined);
|
|
self.printerOptions = ko.observableArray(undefined);
|
|
self.selectedPort = ko.observable(undefined);
|
|
self.selectedBaudrate = ko.observable(undefined);
|
|
self.selectedPrinter = ko.observable(undefined);
|
|
self.saveSettings = ko.observable(undefined);
|
|
self.autoconnect = ko.observable(undefined);
|
|
|
|
self.isErrorOrClosed = ko.observable(undefined);
|
|
self.isOperational = ko.observable(undefined);
|
|
self.isPrinting = ko.observable(undefined);
|
|
self.isPaused = ko.observable(undefined);
|
|
self.isError = ko.observable(undefined);
|
|
self.isReady = ko.observable(undefined);
|
|
self.isLoading = ko.observable(undefined);
|
|
|
|
self.buttonText = ko.pureComputed(function() {
|
|
if (self.isErrorOrClosed())
|
|
return gettext("Connect");
|
|
else
|
|
return gettext("Disconnect");
|
|
});
|
|
|
|
self.previousIsOperational = undefined;
|
|
|
|
self.requestData = function() {
|
|
OctoPrint.connection.getSettings()
|
|
.done(self.fromResponse);
|
|
};
|
|
|
|
self.fromResponse = function(response) {
|
|
var ports = response.options.ports;
|
|
var baudrates = response.options.baudrates;
|
|
var portPreference = response.options.portPreference;
|
|
var baudratePreference = response.options.baudratePreference;
|
|
var printerPreference = response.options.printerProfilePreference;
|
|
var printerProfiles = response.options.printerProfiles;
|
|
|
|
self.portOptions(ports);
|
|
self.baudrateOptions(baudrates);
|
|
|
|
if (!self.selectedPort() && ports && ports.indexOf(portPreference) >= 0)
|
|
self.selectedPort(portPreference);
|
|
if (!self.selectedBaudrate() && baudrates && baudrates.indexOf(baudratePreference) >= 0)
|
|
self.selectedBaudrate(baudratePreference);
|
|
if (!self.selectedPrinter() && printerProfiles && printerProfiles.indexOf(printerPreference) >= 0)
|
|
self.selectedPrinter(printerPreference);
|
|
|
|
self.saveSettings(false);
|
|
};
|
|
|
|
self.fromHistoryData = function(data) {
|
|
self._processStateData(data.state);
|
|
};
|
|
|
|
self.fromCurrentData = function(data) {
|
|
self._processStateData(data.state);
|
|
};
|
|
|
|
self.openOrCloseOnStateChange = function() {
|
|
var connectionTab = $("#connection");
|
|
if (self.isOperational() && connectionTab.hasClass("in")) {
|
|
connectionTab.collapse("hide");
|
|
} else if (!self.isOperational() && !connectionTab.hasClass("in")) {
|
|
connectionTab.collapse("show");
|
|
}
|
|
};
|
|
|
|
self._processStateData = function(data) {
|
|
self.previousIsOperational = self.isOperational();
|
|
|
|
self.isErrorOrClosed(data.flags.closedOrError);
|
|
self.isOperational(data.flags.operational);
|
|
self.isPaused(data.flags.paused);
|
|
self.isPrinting(data.flags.printing);
|
|
self.isError(data.flags.error);
|
|
self.isReady(data.flags.ready);
|
|
self.isLoading(data.flags.loading);
|
|
|
|
if (self.loginState.isUser() && self.previousIsOperational !== self.isOperational()) {
|
|
// only open or close if the panel is visible (for admins) and
|
|
// the state just changed to avoid thwarting manual open/close
|
|
self.openOrCloseOnStateChange();
|
|
}
|
|
};
|
|
|
|
self.connect = function() {
|
|
if (self.isErrorOrClosed()) {
|
|
var data = {
|
|
"port": self.selectedPort() || "AUTO",
|
|
"baudrate": self.selectedBaudrate() || 0,
|
|
"printerProfile": self.selectedPrinter(),
|
|
"autoconnect": self.settings.serial_autoconnect()
|
|
};
|
|
|
|
if (self.saveSettings())
|
|
data["save"] = true;
|
|
|
|
OctoPrint.connection.connect(data)
|
|
.done(function() {
|
|
self.settings.requestData();
|
|
self.settings.printerProfiles.requestData();
|
|
});
|
|
} else {
|
|
self.requestData();
|
|
OctoPrint.connection.disconnect();
|
|
}
|
|
};
|
|
|
|
self.onStartup = function() {
|
|
self.requestData();
|
|
};
|
|
|
|
self.onUserLoggedIn = function() {
|
|
self.openOrCloseOnStateChange();
|
|
};
|
|
|
|
self.onUserLoggedOut = function() {
|
|
self.openOrCloseOnStateChange();
|
|
};
|
|
}
|
|
|
|
OCTOPRINT_VIEWMODELS.push([
|
|
ConnectionViewModel,
|
|
["loginStateViewModel", "settingsViewModel", "printerProfilesViewModel"],
|
|
"#connection_wrapper"
|
|
]);
|
|
});
|