2018-05-21 17:59:28 -04:00
|
|
|
'use strict';
|
|
|
|
require('dotenv').config();
|
|
|
|
|
|
|
|
const express = require('express');
|
|
|
|
const q = require('q');
|
|
|
|
const fs = require('fs');
|
2018-06-21 00:33:26 -04:00
|
|
|
const stat = q.denodeify(fs.stat);
|
|
|
|
const writeFile = q.denodeify(fs.writeFile);
|
|
|
|
const readdir = q.denodeify(fs.readdir);
|
2018-05-21 17:59:28 -04:00
|
|
|
const cors = require('cors');
|
|
|
|
const execFile = q.denodeify(require('child_process').execFile);
|
2018-05-27 17:45:42 -04:00
|
|
|
const musicMetadata = require('music-metadata');
|
2018-05-21 17:59:28 -04:00
|
|
|
const path = require('path');
|
2018-06-21 00:33:26 -04:00
|
|
|
|
2018-05-21 17:59:28 -04:00
|
|
|
const ws = require('./ws');
|
|
|
|
const config = require('./config.js');
|
|
|
|
|
|
|
|
const files = config.files;
|
|
|
|
|
|
|
|
const app = express();
|
|
|
|
|
|
|
|
app.listen(3030, () => console.log('Listening...'));
|
|
|
|
|
2018-05-27 17:45:42 -04:00
|
|
|
const whitelist = ['http://localhost:3032', new RegExp('^http://.*:3032'), new RegExp('^http://.*:3000')];
|
2018-05-21 17:59:28 -04:00
|
|
|
|
|
|
|
const corsOptions = {
|
|
|
|
origin: (origin, callback) => {
|
|
|
|
let some = whitelist.find(white =>
|
|
|
|
(typeof white == 'string' && white == origin) ||
|
|
|
|
(white.test && white.test(origin))
|
|
|
|
);
|
|
|
|
|
|
|
|
if(!some) {
|
|
|
|
callback(new Error("CORS FAIL"));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
callback(null, true);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
app.get('/files.json', cors(corsOptions), (req, res) => {
|
|
|
|
res.json(files);
|
|
|
|
})
|
|
|
|
|
|
|
|
const getDuration = (filename) => {
|
|
|
|
return q.resolve()
|
2018-05-27 17:45:42 -04:00
|
|
|
.then(() => musicMetadata.parseFile(filename))
|
|
|
|
.then(meta => {
|
|
|
|
return meta.format.duration * 1000;
|
|
|
|
});
|
2018-05-21 17:59:28 -04:00
|
|
|
};
|
|
|
|
|
2018-06-21 00:33:26 -04:00
|
|
|
const audioDir = path.join(__dirname, 'frontend/public/audio');
|
|
|
|
|
2018-05-21 17:59:28 -04:00
|
|
|
q.resolve()
|
2018-06-21 00:33:26 -04:00
|
|
|
.then(() => {
|
|
|
|
const envPath = path.join(__dirname, '.env');
|
|
|
|
return stat(envPath)
|
|
|
|
.catch(() => {
|
|
|
|
return readdir(audioDir)
|
|
|
|
.then(files => {
|
|
|
|
if(files.length) {
|
|
|
|
const contents = `
|
|
|
|
AUDIO_FILES_ARRAY=${JSON.stringify(files)}
|
|
|
|
`;
|
|
|
|
|
|
|
|
return writeFile(envPath, contents, 'utf8');
|
|
|
|
}
|
|
|
|
});
|
|
|
|
})
|
|
|
|
})
|
|
|
|
.then(() => getDuration(path.join(audioDir, files[0])))
|
2018-05-21 17:59:28 -04:00
|
|
|
.then(audioLength => {
|
|
|
|
let startTime = Date.now();
|
|
|
|
|
|
|
|
ws.init(startTime, audioLength, files.map(x => 'audio/' + x));
|
|
|
|
})
|
|
|
|
.catch(e => {
|
|
|
|
console.error(e);
|
|
|
|
process.exit(1);
|
|
|
|
});
|