diff --git a/main.js b/main.js index f7bbee1281365b6c161fdf629c9ff08dfa8ac202..5dc65f26e050753514c91693e1c08a4ce6c4d2dd 100644 --- a/main.js +++ b/main.js @@ -18,6 +18,10 @@ var tail = require('tail').Tail; var client; /* Sub process for the express server */ +/* Timers functions, needs to be clear on app quit */ +var loopIntervals = []; +var loopTimeouts = []; + class Lektor { constructor() { this.closed = true; @@ -283,65 +287,75 @@ ipcMain.on('add-kara-queue-pos', (event, addparams) => { ipcMain.on('verify-lektord', (event, arg) => { lkt.ping().then(sta => { logger.debug('main', `Status from ping is ${sta}`); + + /* Install the clear function before registering all timers */ + win.on('close', () => { + logger.info('main', 'Close instance window, '); + loopIntervals.forEach(timer => clearInterval(timer)); + loopTimeouts.forEach(timer => clearTimeout(timer)); + }); + lkt.reloadState(); - setTimeout(() => lkt.idleActualisation(), 1000); - setTimeout(() => lkt.statusActualisation(), 1500); - - setTimeout(() => db.queueAll().then(karas => win.webContents.send('reload-queue-responce', karas)), 1000); - setInterval(() => { - if (lkt.isQueueUpdated()) { - lkt.setQueueUpdated(false); - db.queueAll().then(karas => win.webContents.send('reload-queue-responce', karas)); - } - }, 50); - - setInterval(() => { - var newSongTimeData = lkt.getSongTimeData(); - if (newSongTimeData.elapsed != songTimeData.elapsed || newSongTimeData.song != songTimeData.song) { - songTimeData = newSongTimeData; - win.webContents.send('send-song-time-data', { - elapsed: songTimeData.elapsed, - total: songTimeData.total, - song: songTimeData.song, - state: songTimeData.state, - }); - counterTime = 0; - } else if (newSongTimeData.state == 'play') { - counterTime++; - win.webContents.send('send-song-time-data', { - elapsed: songTimeData.elapsed + counterTime / 20.0, - total: songTimeData.total, - song: songTimeData.song, - state: songTimeData.state, - }); - } else { - win.webContents.send('send-song-time-data', { - elapsed: songTimeData.elapsed + counterTime / 20.0, - total: songTimeData.total, - song: songTimeData.song, - state: songTimeData.state, - }); - } - }, 50); - - setInterval( - () => - isRunning({ win: 'klkt.exe', mac: 'klkt', linux: 'klkt' }).then(vklkt => - isRunning({ win: 'lektord.exe', mac: 'lektord', linux: 'lektord' }).then(vlektord => - win.webContents.send('send-runnings', { - klkt: vklkt, - lektord: vlektord, - }) - ) - ), - 1000 - ); - - setInterval(() => { - if (lkt.isStatusUpdated()) { - win.webContents.send('send-state', lkt.getStatus().state); - } - }, 50); + + loopTimeouts.concat([ + setTimeout(() => lkt.idleActualisation(), 1000), + setTimeout(() => lkt.statusActualisation(), 1500), + setTimeout(() => db.queueAll().then(karas => win.webContents.send('reload-queue-responce', karas)), 1000), + ]); + + loopIntervals.concat([ + setInterval(() => { + if (lkt.isQueueUpdated()) { + lkt.setQueueUpdated(false); + db.queueAll().then(karas => win.webContents.send('reload-queue-responce', karas)); + } + }, 50), + setInterval(() => { + var newSongTimeData = lkt.getSongTimeData(); + if (newSongTimeData.elapsed != songTimeData.elapsed || newSongTimeData.song != songTimeData.song) { + songTimeData = newSongTimeData; + win.webContents.send('send-song-time-data', { + elapsed: songTimeData.elapsed, + total: songTimeData.total, + song: songTimeData.song, + state: songTimeData.state, + }); + counterTime = 0; + } else if (newSongTimeData.state == 'play') { + counterTime++; + win.webContents.send('send-song-time-data', { + elapsed: songTimeData.elapsed + counterTime / 20.0, + total: songTimeData.total, + song: songTimeData.song, + state: songTimeData.state, + }); + } else { + win.webContents.send('send-song-time-data', { + elapsed: songTimeData.elapsed + counterTime / 20.0, + total: songTimeData.total, + song: songTimeData.song, + state: songTimeData.state, + }); + } + }, 50), + setInterval( + () => + isRunning({ win: 'klkt.exe', mac: 'klkt', linux: 'klkt' }).then(vklkt => + isRunning({ win: 'lektord.exe', mac: 'lektord', linux: 'lektord' }).then(vlektord => + win.webContents.send('send-runnings', { + klkt: vklkt, + lektord: vlektord, + }) + ) + ), + 1000 + ), + setInterval(() => { + if (lkt.isStatusUpdated()) { + win.webContents.send('send-state', lkt.getStatus().state); + } + }, 50), + ]); }); });