const fs = require('fs') const express = require('express') const http = require('http') const bodyParser = require('body-parser') const path = require('path') const socketIo = require('socket.io') import bridge from '../bridge' const multer = require('multer') const upload = multer({ dest: 'uploads/' }) const Loader = require('../vendor/Loader') let app, server, io const api = require('./api') const site = module.exports = {} site.init = function(){ app = express() app.use(express.static(path.join(__dirname, '../../public'))) app.use(bodyParser.json()) app.use(bodyParser.urlencoded({ extended: false })) app.use(express.query()) server = http.createServer(app).listen(process.env.PORT, function () { console.log('Cortex listening at http://localhost:%s', server.address().port) }) io = socketIo(server) bridge.connectSocketIo(io) const api_folders = api(app, 'folder') const api_files = api(app, 'file') const api_jobs = api(app, 'job') const api_tasks = api(app, 'task') app.get('/devices', (req, res) => { res.json( bridge.devices ) }) app.post('/folders/:id', upload.array('file'), (req, res) => { if ( ! req.files ) return; let data = {} let loader = new Loader() loader.onReady( () => { if (Object.keys(data).some( el => !! el )) { res.json( Object.keys(data).map(k=>data[k]).sort((a,b) => { b.id - a.id }) ) } bridge.process() }) loader.register('upload') const files = req.files || [] files.forEach( (file) => { const fn = file.originalname data[fn] = false loader.register(fn) fs.rename(file.path, 'data/' + req.params.id + '/' + fn, function(err){ api_files.crud.create({ // table.string('username') 'folder_id': req.params.id, 'name': fn, 'size': file.size, 'generated': false, 'processed': false, }).then( (file) => { data[fn] = file.toJSON() loader.ready(fn) }).catch( (err) => { console.warn(err) res.sendStatus(500) }) }) }) loader.ready('upload') }) }