Added files and connection API and socket library

This commit is contained in:
Gina Häußge 2015-09-22 18:33:27 +02:00
parent 8232126684
commit 5f8c3d967c
4 changed files with 278 additions and 35 deletions

View file

@ -0,0 +1,41 @@
OctoPrint.connection = (function() {
var self = {};
self.getSettings = function(opts) {
opts = opts || {};
var params = $.extend({}, opts);
params.url = "api/connection";
return OctoPrint.getJson(params);
};
self.connect = function(data, opts) {
data = data || {};
return self.issueCommand("connect", data, opts);
};
self.disconnect = function(opts) {
return self.issueCommand("disconnect", {}, opts);
};
self.fakeAck = function(opts) {
return self.issueCommand("fake_ack", {}, opts);
};
self.issueCommand = function(command, data, opts) {
opts = opts || {};
data = data || {};
var payload = $.extend({}, data);
payload.command = command;
var params = $.extend({}, opts);
params.url = "api/connection";
return OctoPrint.postJson(payload, params);
};
return self;
})($, _);

View file

@ -1,21 +1,89 @@
OctoPrint.files = (function($, _) {
var self = {};
var exports = {};
self.get = function(opts) {
var url = "api/files";
var origin = opts.origin || "";
exports.get = function(opts) {
opts = opts || {};
if (origin && _.contains(["local", "sdcard"], origin)) {
url += origin + "/"
var path = "api/files";
var location = opts.location || "";
if (location && _.contains(["local", "sdcard"], location)) {
path += "/" + location;
}
OctoPrint.get_json({
url: url,
success: opts.success,
error: opts.error,
complete: opts.complete
})
var params = _.extend({}, opts);
params.url = path;
return OctoPrint.getJson(params);
};
return self;
exports.listAll = function(opts) {
opts = opts || {};
if (opts.location) {
opts.location = undefined;
}
return exports.get(opts);
};
exports.listAllForLocation = function(location, opts) {
opts = opts || {};
opts.location = location;
return exports.get(opts);
};
exports.getInfoForFile = function(location, filename, opts) {
opts = opts || {};
var params = $.extend({}, opts);
params.url = exports.resourceForFile(location, filename);
return OctoPrint.getJson(params);
};
exports.selectFile = function(location, filename, print, opts) {
print = print || false;
var data = {
print: print
};
return exports.issueFileCommand(location, filename, "select", data, opts);
};
exports.sliceFile = function(location, filename, parameters, opts) {
parameters = parameters || {};
return exports.issueFileCommand(location, filename, "slice", parameters, opts);
};
exports.issueFileCommand = function(location, filename, command, data, opts) {
opts = opts || {};
data = data || {};
var payload = $.extend({}, data);
payload.command = command;
var params = $.extend({}, opts);
params.url = exports.resourceForFile(location, filename);
return OctoPrint.postJson(payload, params);
};
exports.deleteFile = function(location, filename, opts) {
opts = opts || {};
var params = $.extend({}, opts);
params.url = exports.resourceForFile(location, filename);
return OctoPrint.delete(opts);
};
exports.resourceForFile = function(location, filename) {
return "api/files/" + location + "/" + filename;
};
return exports;
})($, _);

View file

@ -1,65 +1,80 @@
var OctoPrint = (function($) {
var self = {};
var OctoPrint = (function($, _) {
var exports = {};
self.options = {
exports.options = {
"baseurl": undefined,
"apikey": undefined
};
self.ajax = function(opts) {
var url = self.options.baseurl + opts.url;
exports.ajax = function(opts) {
opts = opts || {};
var url = exports.options.baseurl;
if (!_.endsWith(url, "/")) {
url = url + "/";
}
url += opts.url;
var headers = $.extend({}, opts.headers || {});
headers["X-Api-Key"] = self.options.apikey;
headers["X-Api-Key"] = exports.options.apikey;
var params = $.extend({}, opts);
params.url = url;
params.headers = headers;
$.ajax(params);
return $.ajax(params);
};
self.get = function(opts) {
exports.get = function(opts) {
opts = opts || {};
var params = $.extend({}, opts);
params.type = "GET";
self.ajax(params);
return exports.ajax(params);
};
self.post = function(opts) {
exports.post = function(data, opts) {
opts = opts || {};
var headers = $.extend({}, opts.headers || {});
headers["Cache-Control"] = "no-cache";
var params = $.extend({}, opts);
params.type = "POST";
params.data = JSON.stringify(data);
params.data = data;
params.headers = headers;
self.ajax(params);
return exports.ajax(params);
};
self.delete = function(opts) {
exports.delete = function(opts) {
opts = opts || {};
var params = $.extend({}, opts);
params.type = "DELETE";
self.ajax(params);
return exports.ajax(params);
};
self.get_json = function(opts) {
exports.getJson = function(opts) {
opts = opts || {};
var params = $.extend({}, opts);
params.dataType = "json";
self.get(params);
return exports.get(params);
};
self.post_json = function(opts) {
var data = opts.data || {};
exports.postJson = function(data, opts) {
opts = opts || {};
var params = $.extend({}, opts);
params.contentType = "application/json; charset=UTF-8";
params.dataType = "json";
params.data = JSON.stringify(data);
self.post(params);
return exports.post(JSON.stringify(data), params);
};
return self;
})($);
return exports;
})($, _);

View file

@ -0,0 +1,119 @@
OctoPrint.socket = (function($, _, SockJS) {
var exports = {};
exports.options = {
timeouts: [0, 1, 1, 2, 3, 5, 8, 13, 20, 40, 100]
};
var normalClose = 1000;
var socket = undefined;
var reconnecting = false;
var reconnectTrial = 0;
var onOpen = function() {
reconnecting = false;
reconnectTrial = 0;
};
var onClose = function(e) {
if (e.code == normalClose) {
return;
}
if (exports.onReconnectAttempt(reconnectTrial)) {
return;
}
if (reconnectTrial < exports.options.timeouts.length) {
var timeout = exports.options.timeouts[reconnectTrial];
setTimeout(exports.reconnect, timeout * 1000);
reconnectTrial++;
} else {
exports.onReconnectFailed();
}
};
var onMessage = function(msg) {
for (var prop in msg.data) {
if (!msg.data.hasOwnProperty(prop)) {
continue;
}
var data = msg.data[prop];
switch (prop) {
case "connected": {
exports.onConnected(data);
break;
}
case "history": {
exports.onHistoryData(data);
break;
}
case "current": {
exports.onCurrentData(data);
break;
}
case "event": {
var event = data["type"];
var payload = data["payload"];
exports.onEvent(event, payload);
break;
}
case "plugin": {
exports.onPluginMessage(data.plugin, data.data);
break;
}
case "timelapse": {
exports.onTimelapseSettings(data);
break;
}
case "slicingProgress": {
exports.onSlicingProgress(data.slicer, data.model_path, data.machinecode_path, data.progress);
break;
}
}
}
};
exports.connect = function(opts) {
opts = opts || {};
exports.disconnect();
var url = OctoPrint.options.baseurl;
if (!_.endsWith(url, "/")) {
url += "/";
}
socket = new SockJS(url + "sockjs", undefined, opts);
socket.onopen = onOpen;
socket.onclose = onClose;
socket.onmessage = onMessage;
};
exports.reconnect = function() {
exports.disconnect();
socket = undefined;
exports.connect();
};
exports.disconnect = function() {
if (socket != undefined) {
socket.close();
}
};
exports.onConnected = function(data) {};
exports.onCurrentData = function(data) {};
exports.onHistoryData = function(data) {};
exports.onEvent = function(event, data) {};
exports.onPluginMessage = function(plugin, message) {};
exports.onTimelapseSettings = function(data) {};
exports.onSlicingProgress = function(slicer, modelPath, machinecodePath, progress) {};
exports.onReconnectAttempt = function(trial) {};
exports.onReconnectFailed = function() {};
return exports;
})($, _, SockJS);