From 117cd18e134da74e4e3d1061efd9ea923e8ee29e Mon Sep 17 00:00:00 2001 From: deurstann <tristan.derouet@gmail.com> Date: Thu, 4 Feb 2021 23:03:14 +0100 Subject: [PATCH] Progress bar does now follow song playtime --- common/lkt.js | 38 ++++++++++++++++++++++++++++++++++++-- instance/index.html | 9 +++++++-- instance/main.js | 11 +++++++---- main.js | 26 +++++++++++++++++++++++--- 4 files changed, 73 insertions(+), 11 deletions(-) diff --git a/common/lkt.js b/common/lkt.js index 518e397..f77a9bd 100644 --- a/common/lkt.js +++ b/common/lkt.js @@ -161,6 +161,26 @@ class LktClient { return __getResult(client); } + static statusActualisation() { + var client = new this(); + var dataObj; + function __getResult(client) { + return new Promise(resolv => { + client.m_socket.setTimeout(0); + setInterval(()=>client.m_socket.write(`status\n`),100); + client.m_socket.on('data', data => { + dataObj = __mpdToObject(data); + //logger.info('lkt', `elapsed:${dataObj.elapsed}, total:${dataObj.duration}`); + if(dataObj.elapsed && dataObj.duration && dataObj.state) { + LktClient.setSongTimeData(parseInt(dataObj.elapsed,10), parseInt(dataObj.duration,10), dataObj.state); + } + + }); + }); + } + return __getResult(client); + } + static commandPlay() { var status = LktClient.commandStatus(); return status.then(LktClient.changePlayStatus, LktClient.errorStatus); @@ -179,8 +199,10 @@ class LktClient { default: logger.info('Unknown play state' + status.state); } + LktClient.setPlayState(status.state); } static commandPlayPos(position) { + this.setSongTimeData(0,this.timeData.total,this.timeData.state); return LktClient.__execSimple(`play ${position}`); } static commandStop() { @@ -200,7 +222,6 @@ class LktClient { return LktClient.__execSimple('clear'); } static commandMove(from, to) { - logger.info("lkt", `move ${from} ${to}`) return LktClient.__execSimple(`move ${from} ${to}`); } @@ -211,12 +232,12 @@ class LktClient { return LktClient.__execSimple(`__insert id://${id}`); } static commandQueueDelPos(position) { - logger.info("lkt", `delete ${position}`) return LktClient.__execSimple(`delete ${position}`); } static commandQueueDelId(id) { return LktClient.__execSimple(`deleteid ${id}`); } + static errorStatus(error) { logger.error('Unable to access lektor status:' + error); } @@ -230,6 +251,19 @@ class LktClient { static isQueueUpdated() { return this.queue_updated; } + + static timeData = {elapsed:0, total:100, state:'stop'}; + + static setPlayState(state) { + this.timeData.state = state; + } + + static setSongTimeData(elapsed, total, state) { + this.timeData = {elapsed:elapsed, total:total, state:state}; + } + static getSongTimeData() { + return this.timeData; + } } function __mpdToObject(string) { diff --git a/instance/index.html b/instance/index.html index 85dd38a..b7db80f 100644 --- a/instance/index.html +++ b/instance/index.html @@ -42,7 +42,7 @@ ></ul> </div> <div - id="progressBar" + id="progress" class="progress" style=" z-index: 666; @@ -54,8 +54,13 @@ > <div class="progress-bar" + id="progressBar" role="progressbar" - style="width: 75%" + style="-webkit-transition: none; + -moz-transition: none; + -ms-transition: none; + -o-transition: none; + transition: none;" ></div> </div> </div> diff --git a/instance/main.js b/instance/main.js index a4cdd3a..48a037a 100644 --- a/instance/main.js +++ b/instance/main.js @@ -52,6 +52,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); logger.debug('instance', 'Window loaded'); $('#filterInput').on('keypress', e => { @@ -174,10 +175,12 @@ ipcRenderer.on('reload-queue-responce', (event, arg) => { ); }); -/*ipcRenderer.on('queue-moved-responce', (event, arg) => { - logger.info('Time', new Date().getTime() - time); - ipcRenderer.send('reload-queue-request'); -});*/ +ipcRenderer.on('send-song-time-data', (event,timeData) => { + + document.getElementById('progressBar').style.width= + `${timeData.elapsed/timeData.total*document.documentElement.clientWidth}px`; + +}); function addDBKaraEventHandlers(element) { diff --git a/main.js b/main.js index 551b9be..2789d0b 100644 --- a/main.js +++ b/main.js @@ -146,7 +146,10 @@ app.on('ready', () => { }); setTimeout(() => { lkt.idleActualisation(); - }, 500); + }, 1000); + setTimeout(()=> { + lkt.statusActualisation(); + }, 1500); lektor.on('close', code => { logger.warn('main', `Lektor exited with code ${code}`); lektor_closed = true; @@ -234,10 +237,27 @@ ipcMain.on('insert-kara-queue-id', (event, arg) => { }); ipcMain.on('delete-kara-queue-pos', (event, arg) => { - logger.info("cc"); lkt.commandQueueDelPos(arg.position); }); ipcMain.on('add-kara-queue-pos', (event,addparams) => { lkt.commandQueueAddId(addparams.id).then(() => lkt.commandMove(addparams.queueSize+1,addparams.position)); -}) \ No newline at end of file +}); + +var songTimeData = {elapsed:0,total:100,state:'stop'}; +var counterTime = 0; +ipcMain.on('get-song-time-data', (event,arg) => { + var newSongTimeData = lkt.getSongTimeData(); + if(newSongTimeData.elapsed != songTimeData.elapsed) { + songTimeData = newSongTimeData; + event.reply('send-song-time-data',{elapsed:songTimeData.elapsed, total:songTimeData.total}); + counterTime = 0; + } + else if(newSongTimeData.state == 'play') { + counterTime++; + event.reply('send-song-time-data',{elapsed:songTimeData.elapsed+(counterTime/20.0), total:songTimeData.total}); + } + else { + event.reply('send-song-time-data',{elapsed:songTimeData.elapsed+(counterTime/20.0), total:songTimeData.total}) + } +}); \ No newline at end of file -- GitLab