Skip to content
Extraits de code Groupes Projets
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=>{
        
    })
}