diff --git a/client/main.js b/client/main.js index 2d1d9db1973ba58428dff9bcb281f47c9d1ad94a..ab07310d81e38da80f1b8d2aa85fc4decbfafb15 100644 --- a/client/main.js +++ b/client/main.js @@ -1,20 +1,21 @@ -const logger = require('../common/logger.js'); +const rootDirectory = `${__dirname}/..`; +const logger = require(rootDirectory + '/common/logger.js'); const express = require('express'); -const port = 3000; +const packageConfig = require(rootDirectory + '/package.json').config; function launcher() { const app = express(); - logger.debug('express', `Express started on localhost:${port}`); + logger.debug('express', `Express started on localhost:${packageConfig.port}`); var publicRouter = require('./routes/public.js'); app.set('views', `${__dirname}/views`); app.set('view engine', 'ejs'); - app.use(express.static(`${__dirname}/../style`)); + app.use(express.static(`${rootDirectory}/style`)); app.use('/', publicRouter); - app.listen(port, () => { - logger.info('express', `Express listening on port ${port}`); + app.listen(packageConfig.port, () => { + logger.info('express', `Express listening on port ${packageConfig.port}`); }); } diff --git a/common/isRunning.js b/common/isRunning.js new file mode 100644 index 0000000000000000000000000000000000000000..7ef4684696e1acb08c11b06688ed21f95f914ad8 --- /dev/null +++ b/common/isRunning.js @@ -0,0 +1,26 @@ +function isRunning(arg) { + const win = arg.win; + const mac = arg.mac; + const linux = arg.linux; + + return new Promise(function (resolve, reject) { + const exec = require('child_process').exec; + const plat = process.platform; + + /* prettier-ignore */ + const cmd = plat == 'win32' ? 'tasklist' + : plat == 'darwin' ? 'ps -ax | grep ' + mac + : plat == 'linux' ? 'ps -A' + : ''; + + const proc = plat == 'win32' ? win : plat == 'darwin' ? mac : plat == 'linux' ? linux : ''; + if (cmd === '' || proc === '') { + resolve(false); + } + exec(cmd, function (err, stdout, stderr) { + resolve(stdout.toLowerCase().indexOf(proc.toLowerCase()) > -1); + }); + }); +} + +module.exports = isRunning; diff --git a/instance/index.html b/instance/index.html index cfc848e92a1da0558f857a6caeaf3893e1025dd1..bc70f41500fb2ac36d6ab3f2e5d0306e3b160bdc 100644 --- a/instance/index.html +++ b/instance/index.html @@ -14,7 +14,13 @@ <script></script> </head> <body> - <div id="modal-settings" class="modal bd-example-modal-lg" tabindex="-1" role="dialog"> + <div + id="modal-settings" + class="modal bd-example-modal-lg" + tabindex="-1" + role="dialog" + style="overflow-y: scroll" + > <div class="modal-dialog modal-lg modal-dialog-centered" role="document"> <div class="modal-content"> <div class="modal-header"> @@ -25,6 +31,31 @@ </div> <div class="modal-body"> <form> + <h3>Running processes</h3> + <p + >Here is a list of related processes that may run. The box is checked when the process + is running.</p + > + <div class="form-group row"> + <div class="col-sm-2">Lektord</div> + <div class="col-sm-10"> + <div class="form-check"> + <input class="form-check-input" type="checkbox" id="running-lektord" disabled /> + <label class="form-check-label" for="running-lektord"></label> + </div> + </div> + </div> + <div class="form-group row"> + <div class="col-sm-2">Klkt</div> + <div class="col-sm-10"> + <div class="form-check"> + <input class="form-check-input" type="checkbox" id="running-klkt" disabled /> + <label class="form-check-label" for="running-klkt"></label> + </div> + </div> + </div> + <hr /> + <h3>Lektord settings</h3> <p>Configure which lektord to use or if 'attach' mode is enabled.</p> <div class="form-group row"> diff --git a/instance/main.js b/instance/main.js index 3068e65d58069fbc3078db2e989dbbad9196568a..0979dcdd13d2f09a38791c0b17b2b635f72a5625 100644 --- a/instance/main.js +++ b/instance/main.js @@ -86,6 +86,7 @@ window.onload = () => { setTimeout(() => ipcRenderer.send('reload-queue-request'), 1000); setInterval(() => ipcRenderer.send('verify-queue-reloaded-request'), 50); setInterval(() => ipcRenderer.send('get-song-time-data'), 50); + setInterval(() => ipcRenderer.send('get-runnings'), 10000); logger.debug('instance', 'Window loaded'); $('#filterInput').on('keypress', e => { @@ -226,6 +227,12 @@ ipcRenderer.on('send-song-time-data', (event, timeData) => { } }); +ipcRenderer.on('send-runnings', (event, arg) => { + logger.debug('instance', `lektord: ${arg.lektord}, klkt: ${arg.klkt}`); + $('#running-lektord').prop('checked', arg.lektord); + $('#running-klkt').prop('checked', arg.klkt); +}); + function addDBKaraEventHandlers(element) { element.addEventListener('dragstart', onDragStartDB, false); element.addEventListener('dragend', onDragEnd, false); diff --git a/main.js b/main.js index 61d04ce7e7c510322ce47f89bef570718fd3681b..e7af4cd9ea23d6cbdf1228d38cbb797524b77f40 100644 --- a/main.js +++ b/main.js @@ -3,7 +3,11 @@ const logger = require.main.require('./common/logger.js'), { app, BrowserWindow, globalShortcut, ipcMain } = require('electron'), { fork, spawn } = require('child_process'), fs = require('fs'), - lkt = require.main.require('./common/lkt.js'); + lkt = require.main.require('./common/lkt.js'), + isRunning = require('./common/isRunning.js'); + +const packageConfig = require('./package.json').config; +logger.debug('main', 'Package config is ' + JSON.stringify(packageConfig)); var config = require('./common/config.js'); var db = require.main.require('./common/db.js'); @@ -14,8 +18,7 @@ var client; /* Sub process for the express server */ class Lektor { constructor() { this.closed = true; - - this.isRunning('lektord.exe', 'lektord', 'lektord').then(v => { + isRunning({ win: 'lektord.exe', linux: 'lektord', mac: 'lektord' }).then(v => { if (v && config.attachmode) { logger.info('main', `Lektord is running! Attach to it`); } else if (v) { @@ -25,11 +28,9 @@ class Lektor { logger.debug('main', `Lektord not running, start it!`); this.closed = false; this.process = spawn('lektord', ['-F']); - this.process.stderr.on('data', data => { logger.lektord(data); }); - this.process.on('close', code => { logger.warn('main', `Lektor exited with code ${code}`); this.lektor_closed = true; @@ -39,30 +40,6 @@ class Lektor { }); } - isRunning(win, mac, linux) { - return new Promise(function (resolve, reject) { - //var ps = require('ps-node'); - const exec = require('child_process').exec; - - const plat = process.platform; - const cmd = - plat == 'win32' - ? 'tasklist' - : plat == 'darwin' - ? 'ps -ax | grep ' + mac - : plat == 'linux' - ? 'ps -A' - : ''; - const proc = plat == 'win32' ? win : plat == 'darwin' ? mac : plat == 'linux' ? linux : ''; - if (cmd === '' || proc === '') { - resolve(false); - } - exec(cmd, function (err, stdout, stderr) { - resolve(stdout.toLowerCase().indexOf(proc.toLowerCase()) > -1); - }); - }); - } - exit() { if (this.closed) { logger.warning('main', 'Lektord is already closed'); @@ -124,7 +101,7 @@ function createKurisuWindow() { contextIsolation: true, }, }); - kurisu.loadURL('https://kurisu.iiens.net'); + kurisu.loadURL(packageConfig.kurisu); kurisu.once('ready-to-show', () => { kurisu.show(); }); @@ -300,6 +277,17 @@ ipcMain.on('get-song-time-data', (event, arg) => { } }); +ipcMain.on('get-runnings', (event, arg) => { + isRunning({ win: 'klkt.exe', mac: 'klkt', linux: 'klkt' }).then(vklkt => { + isRunning({ win: 'lektord.exe', mac: 'lektord', linux: 'lektord' }).then(vlektord => { + event.reply('send-runnings', { + klkt: vklkt, + lektord: vlektord, + }); + }); + }); +}); + ipcMain.on('set-settings', (event, arg) => { logger.info('main', `Settings are now: ${JSON.stringify(arg)}`); config.host = arg.host; diff --git a/package.json b/package.json index efe7462553b27196331760e70df2cffe38de8cb9..da07bed2aab9288d51f9c00577391702070624e6 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "author": "Bakaclub", "contributors": [ "Kubat <mael.martin31@gmail.com>", - "Sting <>" + "Sting <lallegre26@gmail.com>", + "Deurstann <tristan.derouet@gmail.com>" ], "license": "ISC", "scripts": { @@ -25,8 +26,7 @@ }, "config": { "port": "8080", - "kurisu": "https://kurisu.iiens.net/", - "lektord": "/usr/local/bin/lektord" + "kurisu": "https://kurisu.iiens.net/" }, "devDependencies": { "prettier": "2.1.2"