main.js 5,01 Kio
const logger = require.main.require('./common/logger.js');
const electron = require('electron');
const { app, BrowserWindow, ipcRenderer } = require('electron');
const { globalShortcut } = require('electron');
const { ipcMain } = require('electron');
const { fork, spawn } = require('child_process');
const fs = require('fs');
const db = require.main.require('./common/db.js');
const lkt = require.main.require('./common/lkt.js');
var tail = require('tail').Tail;
var client; /* Sub process for the express server */
var lektor; /* Sub process, the lektord player */
var lektor_closed = false; /* Is lektord closed? */
var myDb = new db('/home/kara/kara.db');
/**********************
* Reinit the logfile *
**********************/
fs.truncate(logger.logfile, 0, () => {});
var tail = new tail(logger.logfile);
tail.on('line', function (data) {
console.log(data);
});
/***************************************************************
* Creates the main window and process for the admin interface *
***************************************************************/
function createInstanceWindow() {
/* Main window */
const win = new BrowserWindow({
width: 1280,
height: 720,
frame: false,
menuBarVisible: true,
webPreferences: {
nodeIntegration: true,
},
});
win.loadFile('instance/index.html');
}
/******************************
* The end of the application *
******************************/
ipcMain.on('close-app', (evt, arg) => {
app.quit();
});
app.on('quit', () => {
logger.info('Send SIGTERM to express process, lektord and tailler process');
client.kill('SIGTERM');
if (!lektor_closed) {
lektor.kill('SIGTERM');
}
});
/*********************************
* The beggin of the application *
*********************************/
app.on('ready', () => {
logger.info('Main window is ready');
createInstanceWindow();
client = fork('client/main.js');
lektor = spawn('lektord', ['-F']);
globalShortcut.register('CommandOrControl+D', () => {
var win = BrowserWindow.getFocusedWindow();
if (win === null) {
return;
}
logger.info('Reloading DB');
let contents = win.webContents;
myDb.all().then(karas => {
contents.send('reload-db-responce', karas);
});
});
globalShortcut.register('F12', () => {
var focused = BrowserWindow.getFocusedWindow();
if (focused) {
focused.webContents.openDevTools();
}
});
lektor.stderr.on('data', data => {
data.toString()
.split(/\r?\n/)
.forEach(line => {
var line = line.trim();
if (!line) return;
switch (line[0]) {
case '*':
logger.warn(line.replace(/^\* (.*)$/g, '$1'));
break;
case '!':
logger.error(line.replace(/^! (.*)$/g, '$1'));
break;
case '.':
if (line.length >= 2 && line[1] != '.') {
logger.info(line.replace(/^\. (.*)$/g, '$1'));
break;
}
/* Fallthrough case */
default:
logger.debug(line.replace(/^\.\.\. (.*)$/g, '\t$1'));
break;
}
});
});
setTimeout(() => {lkt.idleActualisation(ipcRenderer);},500);
lektor.on('close', code => {
logger.warn(`Lektor exited with code ${code}`);
lektor_closed = true;
app.quit();
});
});
/*********************************
* Messages from the main window *
*********************************/
ipcMain.on('cmd-play', (event, arg) => {
lkt.commandPlay().then(arg => {
logger.debug('Returned from cmd-play');
});
});
ipcMain.on('cmd-stop', (event, arg) => {
lkt.commandStop().then(arg => {
logger.debug('Returned from cmd-stop');
});
});
ipcMain.on('cmd-clear', (event, arg) => {
lkt.commandClear().then(arg => {
logger.debug('Cleared queue with cmd-clear');
});
});
/* Fill the pannel with the content of the DB.
* The `arg` is the HTML object of the pannel */
ipcMain.on('reload-db-request', (event, arg) => {
logger.info('Reloading the DB content');
myDb.all().then(karas => {
event.reply('reload-db-responce', karas);
});
});
/* Send the queue to the webpage when asked to */
ipcMain.on('reload-queue-request', (event, arg) => {
logger.info('Reloading next karas in queue');
myDb.queue(0, 100).then(karas => {
event.reply('reload-queue-responce', karas);
});
});
ipcMain.on('verify-queue-reloaded-request', (event, arg) => {
if(lkt.isQueueUpdated()) {
lkt.setQueueUpdated(false);
myDb.queue(0, 100).then(karas => {
event.reply('reload-queue-responce', karas);
});
}
});
ReloadQueue = () => {
myDb.queue(0,100).then(karas=>{
})
}