From 44926c26d190ab8616a792c10417d6240f50b87f Mon Sep 17 00:00:00 2001 From: deurstann <tristan.derouet@gmail.com> Date: Wed, 1 Dec 2021 17:10:32 +0100 Subject: [PATCH] Added compatibility with dry update and improved the addition of the search result --- common/db.js | 4 +- common/lkt.js | 20 ++++- instance/index.js | 92 ++++++++++++-------- instance/views/karaDBUnavailableListItem.ejs | 11 +++ instance/views/menubar.ejs | 3 +- instance/views/menubar/buttons.ejs | 2 +- main.js | 8 ++ 7 files changed, 101 insertions(+), 39 deletions(-) create mode 100644 instance/views/karaDBUnavailableListItem.ejs diff --git a/common/db.js b/common/db.js index 07f555d..c45da3e 100644 --- a/common/db.js +++ b/common/db.js @@ -69,7 +69,7 @@ class KaraDatabase { category AS cat, (song_type || song_number) AS type, language, author_name AS author, - song_name AS title, source_name AS source + song_name AS title, source_name AS source, available FROM kara WHERE string LIKE ? OR author_name COLLATE nocase = ?`; if (offset != null && limit != null) __sqlQuery += ` LIMIT ${offset}, ${limit}`; @@ -102,7 +102,7 @@ class KaraDatabase { category AS cat, (song_type || song_number) AS type, language, author_name AS author, - song_name AS title, source_name AS source + song_name AS title, source_name AS source, available FROM kara`; if (offset != null && limit != null) __sqlQuery += ` LIMIT ${offset}, ${limit}`; diff --git a/common/lkt.js b/common/lkt.js index a1fc6a3..3ab1e38 100644 --- a/common/lkt.js +++ b/common/lkt.js @@ -176,6 +176,9 @@ class LktClient { if (String(data).includes('player')) { LktClient.reloadState(); } + if(String(data).includes('database')) { + LktClient.setDBUpdated(true) + } client.m_socket.write(`idle\n`); return null; }); @@ -394,9 +397,16 @@ class LktClient { static commandUpdateDatabase() { return LktClient.__execSimple(`password hashire\nupdate`) } + static commandDryUpdateDatabase(){ + return LktClient.__execSimple('password hashire\n__dry_update') + } + static commandDownloadId(id){ + logger.info(`password hashire\nupdate id://${id}`); + return LktClient.__execSimple(`password hashire\nupdate id://${id}`); + } static commandQueueAddSearch(search) { - search = search.replace(/ /g,"%"); + //search = search.replace(/ /g,"%"); return LktClient.__execSimple(`add query://%${search}%`); } @@ -446,6 +456,7 @@ class LktClient { return this.__current; } + static getStatus() { LktClient.status_updated = false; return this.__status; @@ -463,6 +474,13 @@ class LktClient { static getSongTimeData() { return this.timeData; } + static DBUpdated = false + static setDBUpdated(state){ + this.DBUpdated = state + } + static isDBUpdated(){ + return this.DBUpdated + } static ping() { var socket = new net.Socket(); diff --git a/instance/index.js b/instance/index.js index a737e69..1df2781 100644 --- a/instance/index.js +++ b/instance/index.js @@ -16,7 +16,6 @@ var currentPlaylist = ""; var isQueueView = true var clearMenuQueue; var clearMenuPlaylist; -var karaDBIDList = []; function updatePlayPauseButton(state) { logger.debug('instance', `State was ${state}`); @@ -99,6 +98,7 @@ window.onload = () => { addIpcToButton('selectDatabase', ['select-database', 'reload-db-request']); addIpcToButton('selectPlaylist', ['select-playlist']); addIpcToButton('updateDB', ['update-database']); + addIpcToButton('dryUpdate',['dry-update-database']); addIpcToButton('open-kurisu-view', ['toggle-kurisu']); addIpcToButton('open-user-view', ['toggle-client-view']); @@ -252,20 +252,28 @@ window.onload = () => { ipcRenderer.on('reload-db-responce', (event, arg) => { logger.debug('instance', `Web page got reload-db`); document.getElementById('panelLeft').innerHTML = ''; - karaDBIDList = []; arg.forEach(kara => { - karaDBIDList.push(kara.id); - ejs.renderFile(__dirname + '/views/karaDBListItem.ejs', { kara: kara }, (err, data) => { - if (err) logger.error('instance', err); - $('#panelLeft').append(data); - }); + if(kara.available==1){ + ejs.renderFile(__dirname + '/views/karaDBListItem.ejs', { kara: kara }, (err, data) => { + if (err) logger.error('instance', err); + $('#panelLeft').append(data); + }); + } + else{ + ejs.renderFile(__dirname + '/views/karaDBUnavailableListItem.ejs', { kara: kara }, (err, data) => { + if (err) logger.error('instance', err); + $('#panelLeft').append(data); + }); + } }); [].forEach.call(document.querySelectorAll('#panelLeft .karaCard'), addDBKaraEventHandlers); if(!isQueueView) { [].forEach.call(document.querySelectorAll('#panelLeft .karaCard'), (element)=>{ - element.getElementsByClassName('karaAddBtn')[0].hidden = true; - element.getElementsByClassName('karaInsertBtn')[0].hidden = true; - element.getElementsByClassName('karaAddPlaylistBtn')[0].hidden = false; + if(element.getElementsByClassName('unavailable').length==0){ + element.getElementsByClassName('karaAddBtn')[0].hidden = true; + element.getElementsByClassName('karaInsertBtn')[0].hidden = true; + element.getElementsByClassName('karaAddPlaylistBtn')[0].hidden = false; + } }); } }); @@ -364,28 +372,41 @@ ipcRenderer.on('send-lektord-is-attached', (event, arg) => { logger.debug('instance', `Lektord is in attached mode? ${arg}`); }); +ipcRenderer.on('check-db-updated',(event,arg) => { + ipcRenderer.send('reload-db-request') +}); + /* * Drag'n'drop functions */ 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('karaAddPlaylistBtn')[0].addEventListener('click', () => - ipcRenderer.send('add-kara-playlist-id', { - id: element.getElementsByClassName('karaID')[0].innerText, - }) - ); + if(element.getElementsByClassName('karaDownloadBtn').length==0){ + 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('karaAddPlaylistBtn')[0].addEventListener('click', () => + ipcRenderer.send('add-kara-playlist-id', { + id: element.getElementsByClassName('karaID')[0].innerText, + }) + ); + } + else{ + element.getElementsByClassName('karaDownloadBtn')[0].addEventListener('click', () => + ipcRenderer.send('download-kara-id', { + id: element.getElementsByClassName('karaID')[0].innerText, + }) + ); + } } function addQueueKaraEventHandlers(element) { @@ -486,10 +507,11 @@ function switchQueuePlaylist() { if(isQueueView){ switchQP.innerText = "View playlist"; [].forEach.call(document.querySelectorAll('#panelLeft .karaCard'), (element)=>{ - - element.getElementsByClassName('karaAddBtn')[0].hidden = false; - element.getElementsByClassName('karaInsertBtn')[0].hidden = false; - element.getElementsByClassName('karaAddPlaylistBtn')[0].hidden = true; + if(element.getElementsByClassName('unavailable').length==0){ + element.getElementsByClassName('karaAddBtn')[0].hidden = false; + element.getElementsByClassName('karaInsertBtn')[0].hidden = false; + element.getElementsByClassName('karaAddPlaylistBtn')[0].hidden = true; + } }); [].forEach.call(document.querySelectorAll('#panelRight .karaCard'), addQueueKaraEventHandlers); clearMenuPlaylist(); @@ -497,9 +519,11 @@ function switchQueuePlaylist() { else { switchQP.innerText = "View queue"; [].forEach.call(document.querySelectorAll('#panelLeft .karaCard'), (element)=>{ - element.getElementsByClassName('karaAddBtn')[0].hidden = true; - element.getElementsByClassName('karaInsertBtn')[0].hidden = true; - element.getElementsByClassName('karaAddPlaylistBtn')[0].hidden = false; + if(element.getElementsByClassName('unavailable').length==0){ + element.getElementsByClassName('karaAddBtn')[0].hidden = true; + element.getElementsByClassName('karaInsertBtn')[0].hidden = true; + element.getElementsByClassName('karaAddPlaylistBtn')[0].hidden = false; + } }); [].forEach.call(document.querySelectorAll('#panelRight .karaCard'), addPlayListKaraEventHandlers); clearMenuQueue(); diff --git a/instance/views/karaDBUnavailableListItem.ejs b/instance/views/karaDBUnavailableListItem.ejs new file mode 100644 index 0000000..b7f5fca --- /dev/null +++ b/instance/views/karaDBUnavailableListItem.ejs @@ -0,0 +1,11 @@ +<%# vim: ts=4 syntax=html + The template for the kara card in lists %> +<li class="card p-2 bd-highlight shadow-none d-flex flex-row bd-highlight mb-3 karaCard bg-dark" draggable="false"> + <%- include('kara.ejs'); %> + <div class="karaElement p-2 bd-highlight"> + <div class="d-flex flex-row bd-highlight mb-3 btn-group karaActionBtnGroup" role="group"> + <button class="btn btn-outline-light karaActionBtn karaDownloadBtn" title="Download"><i class="fas fa-upload"></i></button> + </div> + <div hidden class="unaivailable"></div> + </div> +</li> diff --git a/instance/views/menubar.ejs b/instance/views/menubar.ejs index 242e6c7..1af7991 100644 --- a/instance/views/menubar.ejs +++ b/instance/views/menubar.ejs @@ -10,7 +10,8 @@ {id: 'selectAdvence', tooltip: 'Advence search', name: 'search'}, {id: 'selectDatabase', tooltip: 'Database search', name: 'database'}, {id: 'selectPlaylist', tooltip: 'Playlist search', name: 'tag'}, - {id: 'updateDB', tooltip: "Update kara Database", name: 'arrow-circle-down'}, + {id: 'dryUpdate', tooltip: "Update kara Database", name: 'sync'}, + {id: 'updateDB', tooltip: "Update and download kara Database", name: 'arrow-circle-down'}, {id: 'addResearchToQueue', tooltip: "Add research result to queue", name: 'upload'}, ]}); %></div> <div class="p-1 bd-highlight mb-1 mr-auto ml-auto" style="width: 40%;-webkit-app-region: no-drag;"> diff --git a/instance/views/menubar/buttons.ejs b/instance/views/menubar/buttons.ejs index 4c6f60d..484caba 100644 --- a/instance/views/menubar/buttons.ejs +++ b/instance/views/menubar/buttons.ejs @@ -6,6 +6,6 @@ class="btn btn-<%= type %> p-2 bd-highlight" data-toggle="tooltip" data-placement="bottom" title="<%= btn.tooltip %>" style="-webkit-app-region: no-drag"> - <i class="fas fa-<%= btn.name %>"></i> + <i class="fa fa-<%= btn.name %>"></i> </button> <% })%> diff --git a/main.js b/main.js index aba816c..1db7c68 100644 --- a/main.js +++ b/main.js @@ -236,6 +236,7 @@ ipcMain.on('cmd-shuffle', () => lkt.commandShuffle().then(arg => logger.debug('m ipcMain.on('cmd-stop', () => lkt.commandStop().then(arg => logger.debug('main', 'Returned from cmd-stop'))); ipcMain.on('cmd-clear', () => lkt.commandClear().then(arg => logger.debug('main', 'Cleared queue with cmd-clear'))); ipcMain.on('update-database',()=>lkt.commandUpdateDatabase()); +ipcMain.on('dry-update-database',()=>lkt.commandDryUpdateDatabase()); /* Fill the pannel with the content of the DB. * The `arg` is the HTML object of the pannel */ @@ -266,6 +267,9 @@ var currentPlaylist = ""; ipcMain.on('play-kara-queue-pos', (event, arg) => lkt.commandPlayPos(arg.position)); ipcMain.on('add-kara-queue-id', (event, arg) => lkt.commandQueueAddId(arg.id)); ipcMain.on('insert-kara-queue-id', (event, arg) => lkt.commandQueueInsertId(arg.id)); +ipcMain.on('download-kara-id',(event, arg)=>{ + logger.info("download","download"); + lkt.commandDownloadId(arg.id)}); ipcMain.on('delete-kara-queue-pos', (event, arg) => lkt.commandQueueDelPos(arg.position)); ipcMain.on('add-kara-playlist-id', (event,arg) => { if(currentPlaylist != "") { @@ -431,6 +435,10 @@ ipcMain.on('verify-lektord', (event, arg) => { }); } } + if(lkt.isDBUpdated()) { + lkt.setDBUpdated(false); + win.webContents.send('check-db-updated'); + } }, 50); setInterval(() => { -- GitLab