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