pull/110/head
openbuilds-engineer 2018-07-03 22:28:02 +02:00
rodzic 586231b552
commit 48f33ec511
3 zmienionych plików z 109 dodań i 42 usunięć

1
.gitignore vendored
Wyświetl plik

@ -2,6 +2,7 @@
#electron dist
dist
upload
# Compiled source #
###################

147
index.js
Wyświetl plik

@ -2,6 +2,7 @@ console.log("Starting OpenBuilds Machine Driver v" + require('./package').versio
const grblStrings = require("./grblStrings.js");
var path = require("path");
const join = require('path').join;
var express = require("express");
var app = express();
var http = require("http").Server(app);
@ -16,6 +17,14 @@ var rimraf = require("rimraf")
var formidable = require('formidable')
var util = require('util');
var lastsentuploadprogress = 0;
var gcodethumbnail = require("gcodethumbnail");
var colors = {
G0: '#00CC00',
G1: '#CC0000',
G2G3: "#0000CC"
};
var width = 250;
var height = 200;
var oldportslist;
const iconPath = path.join(__dirname, 'app/icon.png');
@ -258,6 +267,37 @@ var status = {
}
};
function refreshGcodeLibrary() {
const dirTree = require('directory-tree');
var tree = dirTree('./upload', {
extensions: /\.gcode|\.nc|\.tap|\.cnc|\.gc|\.g-code$/
}, (item, PATH) => {
// if a gcode is found, then
// console.log(item);
ConvertGCODEtoPNG(item.path, item.path + ".png")
});
// console.log("---------------")
var tree = dirTree('./upload', {
extensions: /\.gcode|\.png/
});
var treeData = JSON.stringify(tree, null, 2)
// console.log(treeData);
fs.writeFileSync(join(__dirname, 'upload/data.json'), treeData, 'utf-8')
}
function ConvertGCODEtoPNG(file, out) {
var path = out;
fs.readFile(file, 'utf8',
function(err, data) {
if (err) {
console.log(err);
process.exit(1);
}
gcodethumbnail.generatePNG(path, data, colors, width, height);
});
}
SerialPort.list(function(err, ports) {
oldportslist = ports;
status.comms.interfaces.ports = ports;
@ -287,8 +327,6 @@ var PortCheckinterval = setInterval(function() {
})
}
}
oldportslist = ports;
});
}
@ -309,6 +347,7 @@ app.get('/api/version', (req, res) => {
res.send(JSON.stringify(data), null, 2);
})
// Upload
app.get('/upload', (req, res) => {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
@ -323,29 +362,30 @@ app.post('/upload', function(req, res) {
uploadprogress = 0
var form = new formidable.IncomingForm();
var uploadsDir = __dirname + '/uploads';
var uploadsDir = __dirname + '/upload';
fs.readdir(uploadsDir, function(err, files) {
files.forEach(function(file, index) {
fs.stat(path.join(uploadsDir, file), function(err, stat) {
var endTime, now;
if (err) {
return console.error(err);
}
now = new Date().getTime();
// older than an hour
endTime = new Date(stat.ctime).getTime() + 3600000;
if (now > endTime) {
return rimraf(path.join(uploadsDir, file), function(err) {
if (err) {
return console.error(err);
}
console.log('successfully deleted' + file);
});
}
});
});
});
// Cleanup old files - later
// fs.readdir(uploadsDir, function(err, files) {
// files.forEach(function(file, index) {
// fs.stat(path.join(uploadsDir, file), function(err, stat) {
// var endTime, now;
// if (err) {
// return console.error(err);
// }
// now = new Date().getTime();
// // older than an hour
// endTime = new Date(stat.ctime).getTime() + 3600000;
// if (now > endTime) {
// return rimraf(path.join(uploadsDir, file), function(err) {
// if (err) {
// return console.error(err);
// }
// console.log('successfully deleted' + file);
// });
// }
// });
// });
// });
// form.parse(req);
form.parse(req, function(err, fields, files) {
@ -355,12 +395,12 @@ app.post('/upload', function(req, res) {
// }));
});
// form.on('fileBegin', function(name, file) {
// // Emitted whenever a new file is detected in the upload stream. Use this event if you want to stream the file to somewhere else while buffering the upload on the file system.
// console.log('Uploading ' + file.name);
// file.path = __dirname + '/uploads/' + file.name;
// // io.sockets.in('sessionId').emit('startupload', 'STARTING');
// });
form.on('fileBegin', function(name, file) {
// Emitted whenever a new file is detected in the upload stream. Use this event if you want to stream the file to somewhere else while buffering the upload on the file system.
console.log('Uploading ' + file.name);
file.path = __dirname + '/upload/' + file.name;
// io.sockets.in('sessionId').emit('startupload', 'STARTING');
});
form.on('progress', function(bytesReceived, bytesExpected) {
uploadprogress = parseInt(((bytesReceived * 100) / bytesExpected).toFixed(0));
@ -372,21 +412,24 @@ app.post('/upload', function(req, res) {
form.on('file', function(name, file) {
// Emitted whenever a field / file pair has been received. file is an instance of File.
// console.log('Uploaded ' + file.path);
console.log('Uploaded ' + file.path);
// io.sockets.in('sessionId').emit('doneupload', 'COMPLETE');
refreshGcodeLibrary();
if (jogWindow === null) {
createJogWindow();
jogWindow.show()
// workaround from https://github.com/electron/electron/issues/2867#issuecomment-261067169 to make window pop over for focus
jogWindow.setAlwaysOnTop(true);
jogWindow.focus();
jogWindow.once('did-finish-load', () => {
// Send Message
})
jogWindow.setAlwaysOnTop(false);
} else {
jogWindow.show()
jogWindow.setAlwaysOnTop(true);
jogWindow.focus();
jogWindow.setAlwaysOnTop(false);
}
// console.log("Done, now lets work with " + file.path)
setTimeout(function() {
fs.readFile(file.path, 'utf8',
function(err, data) {
@ -394,8 +437,7 @@ app.post('/upload', function(req, res) {
console.log(err);
process.exit(1);
}
// GCODE FILE CONTENT
// console.log(data);
// console.log(data)
io.sockets.emit('gcodeupload', data);
});
appIcon.displayBalloon({
@ -403,9 +445,8 @@ app.post('/upload', function(req, res) {
title: "GCODE Received",
content: "OpenBuilds Machine Driver received new GCODE"
})
}, 1000);
}, 1500);
// console.log("Done, now lets work with " + file.path)
});
form.on('aborted', function() {
@ -1484,11 +1525,14 @@ io.on("connection", function(socket) {
});
http.listen(config.webPort, '0.0.0.0', function() {
console.log('listening on:' + ip.address() + ":" + config.webPort);
// Now refresh library
refreshGcodeLibrary();
});
function machineSend(gcode) {
// console.log("SENDING: " + gcode)
if (port.isOpen) {
@ -1964,8 +2008,14 @@ const shouldQuit = electronApp.makeSingleInstance((commandLine, workingDirectory
if (jogWindow === null) {
createJogWindow();
jogWindow.show()
jogWindow.setAlwaysOnTop(true);
jogWindow.focus();
jogWindow.setAlwaysOnTop(false);
} else {
jogWindow.show()
jogWindow.setAlwaysOnTop(true);
jogWindow.focus();
jogWindow.setAlwaysOnTop(false);
}
});
@ -2008,8 +2058,14 @@ if (electronApp) {
if (jogWindow === null) {
createJogWindow();
jogWindow.show()
jogWindow.setAlwaysOnTop(true);
jogWindow.focus();
jogWindow.setAlwaysOnTop(false);
} else {
jogWindow.show()
jogWindow.setAlwaysOnTop(true);
jogWindow.focus();
jogWindow.setAlwaysOnTop(false);
}
})
@ -2018,8 +2074,14 @@ if (electronApp) {
if (jogWindow === null) {
createJogWindow();
jogWindow.show()
jogWindow.setAlwaysOnTop(true);
jogWindow.focus();
jogWindow.setAlwaysOnTop(false);
} else {
jogWindow.show()
jogWindow.setAlwaysOnTop(true);
jogWindow.focus();
jogWindow.setAlwaysOnTop(false);
}
})
@ -2072,6 +2134,9 @@ if (electronApp) {
});
jogWindow.once('ready-to-show', () => {
jogWindow.show()
jogWindow.setAlwaysOnTop(true);
jogWindow.focus();
jogWindow.setAlwaysOnTop(false);
})
// jogWindow.maximize()
// jogWindow.webContents.openDevTools()

Wyświetl plik

@ -8,12 +8,13 @@
"copyfiles": "^1.2.0",
"electron": "^1.6.x",
"electron-builder": "^14.1.1",
"electron-rebuild": "^1.5.7",
"ncp": "^2.0.0"
},
"dependencies": {
"directory-tree": "^2.1.0",
"express": "^4.16.2",
"formidable": "^1.2.1",
"gcodethumbnail": "^1.0.1",
"ip": "^1.1.5",
"lodash": "^4.17.10",
"md5": "^2.2.1",