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=>{ }) }