From 48f33ec5115847cee43f92d03d92498a3f7f43c9 Mon Sep 17 00:00:00 2001 From: openbuilds-engineer Date: Tue, 3 Jul 2018 22:28:02 +0200 Subject: [PATCH] Work on lib --- .gitignore | 1 + index.js | 147 +++++++++++++++++++++++++++++++++++++-------------- package.json | 3 +- 3 files changed, 109 insertions(+), 42 deletions(-) diff --git a/.gitignore b/.gitignore index 00e2a45..8c08aea 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ #electron dist dist +upload # Compiled source # ################### diff --git a/index.js b/index.js index e40b62c..6eedd11 100644 --- a/index.js +++ b/index.js @@ -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() diff --git a/package.json b/package.json index a68d974..0efefa1 100644 --- a/package.json +++ b/package.json @@ -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",