From a03d83785980afe3b45f5bce55681e16482af5b8 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Thu, 11 Feb 2021 10:38:20 +0100
Subject: [PATCH] Basic config file generation / parsing

---
 common/config.js    | 23 +++++++++--
 common/lkt.js       | 26 ++++++++++---
 common/logger.js    |  4 +-
 instance/index.html | 14 ++++---
 instance/main.js    | 94 +++++++++++++++++++++++++++------------------
 main.js             | 69 +++++++++++++++++++++++----------
 6 files changed, 155 insertions(+), 75 deletions(-)

diff --git a/common/config.js b/common/config.js
index 1e30028..c5e2523 100644
--- a/common/config.js
+++ b/common/config.js
@@ -1,4 +1,21 @@
-const ini = require('ini');
-const fs = require('fs');
+const ini = require('ini'),
+    os = require('os'),
+    fs = require('fs');
 
-module.exports = 'toto';
+const __configFile = `${os.homedir()}/.amadeus.ini`;
+
+var config = {
+    database: '/home/kara/kara.db',
+    reload: () => {
+        var fd = fs.openSync(__configFile, 'w');
+        fs.close(fd, err => {});
+        var __config = ini.parse(fs.readFileSync(__configFile, 'utf-8'));
+
+        __config.database_path = __config.database_path || '/home/kara/kara.db';
+
+        fs.writeFileSync(__configFile, ini.stringify(__config))
+    },
+};
+
+config.reload();
+module.exports = global.config = module.exports = config;
diff --git a/common/lkt.js b/common/lkt.js
index ade5ce7..229c1d6 100644
--- a/common/lkt.js
+++ b/common/lkt.js
@@ -167,13 +167,22 @@ class LktClient {
         function __getResult(client) {
             return new Promise(resolv => {
                 client.m_socket.setTimeout(0);
-                setInterval(()=>client.m_socket.write(`status\n`),100);
+                setInterval(() => client.m_socket.write(`status\n`), 100);
                 client.m_socket.on('data', data => {
                     dataObj = __mpdToObject(data);
-                    if(dataObj.elapsed && dataObj.duration && dataObj.state && dataObj.song) {
-                        LktClient.setSongTimeData(parseInt(dataObj.elapsed,10), parseInt(dataObj.duration,10), dataObj.state, parseInt(dataObj.song,10));
+                    if (
+                        dataObj.elapsed &&
+                        dataObj.duration &&
+                        dataObj.state &&
+                        dataObj.song
+                    ) {
+                        LktClient.setSongTimeData(
+                            parseInt(dataObj.elapsed, 10),
+                            parseInt(dataObj.duration, 10),
+                            dataObj.state,
+                            parseInt(dataObj.song, 10)
+                        );
                     }
-                   
                 });
             });
         }
@@ -249,14 +258,19 @@ class LktClient {
         return this.queue_updated;
     }
 
-    static timeData = {elapsed:0, total:100, state:'stop', song:0};
+    static timeData = { elapsed: 0, total: 100, state: 'stop', song: 0 };
 
     static setPlayState(state) {
         this.timeData.state = state;
     }
 
     static setSongTimeData(elapsed, total, state, song) {
-        this.timeData = {elapsed:elapsed, total:total, state:state, song:song};
+        this.timeData = {
+            elapsed: elapsed,
+            total: total,
+            state: state,
+            song: song,
+        };
     }
     static getSongTimeData() {
         return this.timeData;
diff --git a/common/logger.js b/common/logger.js
index bb1a6ab..c054dbd 100644
--- a/common/logger.js
+++ b/common/logger.js
@@ -31,7 +31,9 @@ const __loggerCustomLevels = {
 };
 
 const __logFile = `${require('os').tmpdir()}/amadeus.log`;
-fs.open(__logFile, 'w', function (err, file) { if (err) throw err; });
+fs.open(__logFile, 'w', function (err, file) {
+    if (err) throw err;
+});
 
 var __logger = winston.createLogger({
     transports: [
diff --git a/instance/index.html b/instance/index.html
index b7db80f..b404a01 100644
--- a/instance/index.html
+++ b/instance/index.html
@@ -25,7 +25,7 @@
         <script></script>
     </head>
     <body>
-        <div id="mainFrame" class="container-fluid" >
+        <div id="mainFrame" class="container-fluid">
             <div
                 id="buttonPanelListLeft"
                 class="d-flex flex-row bd-highlight mb-3 row card"
@@ -56,11 +56,13 @@
                     class="progress-bar"
                     id="progressBar"
                     role="progressbar"
-                    style="-webkit-transition: none;
-                    -moz-transition: none;
-                    -ms-transition: none;
-                    -o-transition: none;
-                    transition: none;"
+                    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 b04bc42..9212ba6 100644
--- a/instance/main.js
+++ b/instance/main.js
@@ -52,7 +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);
+    setInterval(() => ipcRenderer.send('get-song-time-data'), 50);
     logger.debug('instance', 'Window loaded');
 
     $('#filterInput').on('keypress', e => {
@@ -145,7 +145,7 @@ ipcRenderer.on('reload-db-responce', (event, arg) => {
         );
     });
     [].forEach.call(
-        document.querySelectorAll('#panelLeft .karaCard'), 
+        document.querySelectorAll('#panelLeft .karaCard'),
         addDBKaraEventHandlers
     );
 });
@@ -175,36 +175,46 @@ ipcRenderer.on('reload-queue-responce', (event, arg) => {
     );
 });
 
-var currentSong=0;
-ipcRenderer.on('send-song-time-data', (event,timeData) => {
-    document.getElementById('progressBar').style.width=
-    `${timeData.elapsed/timeData.total*document.documentElement.clientWidth}px`;
-    if(timeData.state == 'play' || timeData.state == 'pause')
-    {
-        if(currentSong !=timeData.song) {
-            document.getElementsByClassName('karaQueue')[currentSong].style.background = '#4e5d6c';
+var currentSong = 0;
+ipcRenderer.on('send-song-time-data', (event, timeData) => {
+    document.getElementById('progressBar').style.width = `${
+        (timeData.elapsed / timeData.total) *
+        document.documentElement.clientWidth
+    }px`;
+    if (timeData.state == 'play' || timeData.state == 'pause') {
+        if (currentSong != timeData.song) {
+            document.getElementsByClassName('karaQueue')[
+                currentSong
+            ].style.background = '#4e5d6c';
             currentSong = timeData.song;
         }
-        document.getElementsByClassName('karaQueue')[timeData.song].style.background = '#6b7d8e';
+        document.getElementsByClassName('karaQueue')[
+            timeData.song
+        ].style.background = '#6b7d8e';
+    } else {
+        document.getElementsByClassName('karaQueue')[
+            timeData.song
+        ].style.background = '#4e5d6c';
     }
-    else {
-        document.getElementsByClassName('karaQueue')[timeData.song].style.background = '#4e5d6c';
-    }
-    
 });
 
-
 function addDBKaraEventHandlers(element) {
     element.addEventListener('dragstart', onDragStartDB, false);
     element.addEventListener('dragend', onDragEnd, false);
-    element.getElementsByClassName('karaAddBtn')[0]
-    .addEventListener('click',()=>ipcRenderer.send('add-kara-queue-id', {
-        id:element.getElementsByClassName('karaID')[0].innerText
-    }));
-    element.getElementsByClassName('karaInsertBtn')[0]
-    .addEventListener('click',()=>ipcRenderer.send('insert-kara-queue-id', {
-        id:element.getElementsByClassName('karaID')[0].innerText
-    }));
+    element
+        .getElementsByClassName('karaAddBtn')[0]
+        .addEventListener('click', () =>
+            ipcRenderer.send('add-kara-queue-id', {
+                id: element.getElementsByClassName('karaID')[0].innerText,
+            })
+        );
+    element
+        .getElementsByClassName('karaInsertBtn')[0]
+        .addEventListener('click', () =>
+            ipcRenderer.send('insert-kara-queue-id', {
+                id: element.getElementsByClassName('karaID')[0].innerText,
+            })
+        );
 }
 
 function addQueueKaraEventHandlers(element) {
@@ -214,14 +224,22 @@ function addQueueKaraEventHandlers(element) {
     element.addEventListener('dragleave', ondragLeave, false);
     element.addEventListener('drop', onDrop, false);
     element.addEventListener('dragend', onDragEnd, false);
-    element.getElementsByClassName('karaDeleteBtn')[0]
-    .addEventListener('click',()=>ipcRenderer.send('delete-kara-queue-pos', {
-        position:element.getElementsByClassName('karaPosition')[0].innerText
-    }));
-    element.getElementsByClassName('karaPlayBtn')[0]
-    .addEventListener('click',()=>ipcRenderer.send('play-kara-queue-pos', {
-        position:element.getElementsByClassName('karaPosition')[0].innerText
-    }));
+    element
+        .getElementsByClassName('karaDeleteBtn')[0]
+        .addEventListener('click', () =>
+            ipcRenderer.send('delete-kara-queue-pos', {
+                position: element.getElementsByClassName('karaPosition')[0]
+                    .innerText,
+            })
+        );
+    element
+        .getElementsByClassName('karaPlayBtn')[0]
+        .addEventListener('click', () =>
+            ipcRenderer.send('play-kara-queue-pos', {
+                position: element.getElementsByClassName('karaPosition')[0]
+                    .innerText,
+            })
+        );
 }
 
 var dragCounter = 0;
@@ -248,7 +266,7 @@ function onDragStartQueue(event) {
 }
 
 function onDragEnter(event) {
-    if(event.currentTarget) {
+    if (event.currentTarget) {
         if (leavedElement != event.currentTarget) {
             leavedElement.style.borderTop = '';
         }
@@ -274,15 +292,15 @@ function ondragLeave(event) {
 
 function onDrop(event) {
     event.currentTarget.style.borderTop = '';
-    if(isDnDFromDB) {
+    if (isDnDFromDB) {
         ipcRenderer.send('add-kara-queue-pos', {
             id: event.dataTransfer.getData('text/plain'),
-            position: event.currentTarget.getElementsByClassName('karaPosition')[0]
-                .innerText,
+            position: event.currentTarget.getElementsByClassName(
+                'karaPosition'
+            )[0].innerText,
             queueSize: countKaraInQueue,
         });
-    }
-    else {
+    } else {
         ipcRenderer.send('queue-moved-kara', {
             from: event.dataTransfer.getData('text/plain'),
             to: event.currentTarget.getElementsByClassName('karaPosition')[0]
diff --git a/main.js b/main.js
index 1a02677..9090174 100644
--- a/main.js
+++ b/main.js
@@ -6,14 +6,12 @@ const logger = require.main.require('./common/logger.js'),
     db = require.main.require('./common/db.js'),
     lkt = require.main.require('./common/lkt.js');
 
+var config = require('./common/config.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? */
 
-/* TODO: Use the config */
-var myDb = new db('/home/kara/kara.db');
-
 var win = null; /* The main window */
 
 /**********************
@@ -26,6 +24,17 @@ tail.on('line', function (data) {
     console.log(data);
 });
 
+/*********************
+ * Create the config *
+ *********************/
+
+function createConfig() {
+    return {
+        database: new db(config.database),
+    };
+}
+const cfg = createConfig();
+
 /***************************************************************
  * Creates the main window and process for the admin interface *
  ***************************************************************/
@@ -99,7 +108,7 @@ app.on('ready', () => {
         }
         logger.info('main', 'Reloading DB');
         let contents = win.webContents;
-        myDb.all().then(karas => {
+        cfg.database.all().then(karas => {
             contents.send('reload-db-responce', karas);
         });
     });
@@ -150,7 +159,7 @@ app.on('ready', () => {
     setTimeout(() => {
         lkt.idleActualisation();
     }, 1000);
-    setTimeout(()=> {
+    setTimeout(() => {
         lkt.statusActualisation();
     }, 1500);
     lektor.on('close', code => {
@@ -198,16 +207,16 @@ ipcMain.on('reload-db-request', (event, arg) => {
     };
     if (arg) {
         logger.debug('main', `Reload DB with search '${arg}'`);
-        myDb.search(arg, 0, 15).then(callback);
+        cfg.database.search(arg, 0, 15).then(callback);
     } else {
-        myDb.all(0, 15).then(callback);
+        cfg.database.all(0, 15).then(callback);
     }
 });
 
 /* Send the queue to the webpage when asked to */
 ipcMain.on('reload-queue-request', (event, arg) => {
     logger.info('main', 'Reloading next karas in queue');
-    myDb.queue(0, 100).then(karas => {
+    cfg.database.queue(0, 100).then(karas => {
         event.reply('reload-queue-responce', karas);
     });
 });
@@ -215,7 +224,7 @@ ipcMain.on('reload-queue-request', (event, arg) => {
 ipcMain.on('verify-queue-reloaded-request', (event, arg) => {
     if (lkt.isQueueUpdated()) {
         lkt.setQueueUpdated(false);
-        myDb.queue(0, 100).then(karas => {
+        cfg.database.queue(0, 100).then(karas => {
             event.reply('reload-queue-responce', karas);
         });
     }
@@ -243,24 +252,42 @@ ipcMain.on('delete-kara-queue-pos', (event, arg) => {
     lkt.commandQueueDelPos(arg.position);
 });
 
-ipcMain.on('add-kara-queue-pos', (event,addparams) => {
-    lkt.commandQueueAddId(addparams.id).then(() => lkt.commandMove(addparams.queueSize+1,addparams.position));
+ipcMain.on('add-kara-queue-pos', (event, addparams) => {
+    lkt.commandQueueAddId(addparams.id).then(() =>
+        lkt.commandMove(addparams.queueSize + 1, addparams.position)
+    );
 });
 
-var songTimeData = {elapsed:0,total:100,state:'stop', song:'0'};
+var songTimeData = { elapsed: 0, total: 100, state: 'stop', song: '0' };
 var counterTime = 0;
-ipcMain.on('get-song-time-data', (event,arg) => {
+ipcMain.on('get-song-time-data', (event, arg) => {
     var newSongTimeData = lkt.getSongTimeData();
-    if(newSongTimeData.elapsed != songTimeData.elapsed || newSongTimeData.song != songTimeData.song) {
+    if (
+        newSongTimeData.elapsed != songTimeData.elapsed ||
+        newSongTimeData.song != songTimeData.song
+    ) {
         songTimeData = newSongTimeData;
-        event.reply('send-song-time-data',{elapsed:songTimeData.elapsed, total:songTimeData.total, song:songTimeData.song,state:songTimeData.state});
+        event.reply('send-song-time-data', {
+            elapsed: songTimeData.elapsed,
+            total: songTimeData.total,
+            song: songTimeData.song,
+            state: songTimeData.state,
+        });
         counterTime = 0;
-    }
-    else if(newSongTimeData.state == 'play') {
+    } else if (newSongTimeData.state == 'play') {
         counterTime++;
-        event.reply('send-song-time-data',{elapsed:songTimeData.elapsed+(counterTime/20.0), total:songTimeData.total, song:songTimeData.song, state:songTimeData.state});
-    }
-    else {
-        event.reply('send-song-time-data',{elapsed:songTimeData.elapsed+(counterTime/20.0), total:songTimeData.total, song:songTimeData.song, state:songTimeData.state})
+        event.reply('send-song-time-data', {
+            elapsed: songTimeData.elapsed + counterTime / 20.0,
+            total: songTimeData.total,
+            song: songTimeData.song,
+            state: songTimeData.state,
+        });
+    } else {
+        event.reply('send-song-time-data', {
+            elapsed: songTimeData.elapsed + counterTime / 20.0,
+            total: songTimeData.total,
+            song: songTimeData.song,
+            state: songTimeData.state,
+        });
     }
 });
-- 
GitLab