Skip to content
Extraits de code Groupes Projets
Valider 639842ca rédigé par Deurstann's avatar Deurstann
Parcourir les fichiers

Added the ability to drag and drop item in queue

parent 16543a0a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!5Drag and drop in queue
......@@ -143,46 +143,41 @@ class LktClient {
}
return __getResult(client);
}
static idleActualisation()
{
static idleActualisation() {
var client = new this();
client.m_socket.setTimeout(0);
function __getResult(client) {
return new Promise((resolve,reject) => {
client.m_socket.on('data',data => {
if(String(data).includes("playlist")) {
return new Promise((resolve, reject) => {
client.m_socket.on('data', data => {
if (String(data).includes('playlist')) {
LktClient.setQueueUpdated(true);
}
client.m_socket.write(`idle\n`);
return null;
});
});
}
return __getResult(client);
}
static commandPlay() {
var status= LktClient.commandStatus();
return status.then(LktClient.changePlayStatus,LktClient.errorStatus);
}
static changePlayStatus(status)
{
switch(status.state)
{
case "play":
return LktClient.__execSimple("pause 1");
var status = LktClient.commandStatus();
return status.then(LktClient.changePlayStatus, LktClient.errorStatus);
}
static changePlayStatus(status) {
switch (status.state) {
case 'play':
return LktClient.__execSimple('pause 1');
break;
case "pause":
return LktClient.__execSimple("pause 0");
case 'pause':
return LktClient.__execSimple('pause 0');
break;
case "stop":
return LktClient.__execSimple("play");
case 'stop':
return LktClient.__execSimple('play');
break;
default:
logger.info("Unknown play state"+status.state);
logger.info('Unknown play state' + status.state);
}
}
static commandStop() {
......@@ -198,9 +193,14 @@ class LktClient {
static commandShuffle() {
return LktClient.__execSimple('shuffle');
}
static commandClear(){
static commandClear() {
return LktClient.__execSimple('clear');
}
static commandMove(from, to) {
var request = 'move ' + from + ' ' + to;
logger.info(request);
return LktClient.__execSimple('move ' + from + ' ' + to);
}
static commandQueueAddId(id) {
return LktClient.__execSimple(`add id ${id}`);
......@@ -208,9 +208,8 @@ class LktClient {
static commandQueueDelId(id) {
return LktClient.__execSimple(`deleteid ${id}`);
}
static errorStatus(error)
{
logger.error("Unable to access lektor status:" + error);
static errorStatus(error) {
logger.error('Unable to access lektor status:' + error);
}
static queue_updated = false;
......@@ -238,7 +237,6 @@ function __mpdStatusToBool(string) {
string = string.split('\n');
string = string[string.length - 1];
return string.split(/ /) == 'OK' ? true : false;
}
module.exports = LktClient;
const { ipcRenderer } = require('electron');
const ejs = require('ejs');
const logger = require('../common/logger.js');
const e = require('express');
/* prettier-ignore */
const buttonList = [
......@@ -49,9 +50,8 @@ window.onload = () => {
addIpcToButton('reloadQueue', ['reload-queue-request']);
addIpcToButton('reloadDb', ['reload-db-request', 'reload-queue-request']);
logger.debug('Window loaded');
setTimeout(()=>ipcRenderer.send('reload-queue-request'),500);
setInterval(()=>ipcRenderer.send('verify-queue-reloaded-request'),1000);
setTimeout(() => ipcRenderer.send('reload-queue-request'), 500);
setInterval(() => ipcRenderer.send('verify-queue-reloaded-request'), 50);
logger.debug('instance', 'Window loaded');
$('#filterInput').on('keypress', e => {
......@@ -140,6 +140,7 @@ ipcRenderer.on('reload-db-responce', (event, arg) => {
}
);
});
[].forEach.call(document.querySelectorAll('#panelLeft .karaCard'), a);
});
/* Create the right panel: the queue */
......@@ -158,6 +159,85 @@ ipcRenderer.on('reload-queue-responce', (event, arg) => {
}
);
});
logger.info('Time', new Date().getTime() - time);
[].forEach.call(
document.querySelectorAll('#panelRight .karaCard'),
addQueueDragAndDropHandlers
);
});
ipcRenderer.on('queue-moved-responce', (event, arg) => {
logger.info('Time', new Date().getTime() - time);
ipcRenderer.send('reload-queue-request');
});
var isDnDFromDB = false;
var date = new Date();
var time = 0;
function addDBDragAndDropHandlers(element) {
isDnDFromDB = true;
}
function addQueueDragAndDropHandlers(element) {
element.addEventListener('dragstart', onDragStart, false);
element.addEventListener('dragenter', onDragEnter, false);
element.addEventListener('dragover', onDragOver, false);
element.addEventListener('dragleave', ondragLeave, false);
element.addEventListener('drop', onDrop, false);
element.addEventListener('dragend', onDragEnd, false);
}
var dragCounter = 0;
var leavedElement;
function onDragStart(event) {
event.dataTransfer.effectAllowed = 'move';
event.currentTarget.style.opacity = 0.4;
//logger.debug(event.currentTarget.childElementCount+"\n");
event.dataTransfer.setData(
'text/plain',
event.currentTarget.getElementsByClassName('karaPosition')[0].innerText
);
}
function onDragEnter(event) {
if (leavedElement != event.currentTarget) {
leavedElement.style.borderTop = '';
}
event.currentTarget.style.borderTop = '3px solid grey';
dragCounter++;
}
function onDragOver(event) {
if (event.preventDefault) {
event.preventDefault();
}
event.dataTransfer.dropEffect = 'move';
}
function ondragLeave(event) {
dragCounter--;
leavedElement = event.currentTarget;
if (dragCounter == 0) {
event.currentTarget.style.borderTop = '';
}
//logger.debug("dragCount", dragCounter)
}
function onDrop(event) {
//logger.debug("salut", "salut");
event.currentTarget.style.borderTop = '';
time = new Date().getTime();
ipcRenderer.send('queue-moved-kara', {
from: event.dataTransfer.getData('text/plain'),
to: event.currentTarget.getElementsByClassName('karaPosition')[0]
.innerText,
});
return false;
}
function onDragEnd(event) {
event.currentTarget.style.opacity = 1;
dragCounter = 0;
}
<%# 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">
<li class="card p-2 bd-highlight shadow-none d-flex flex-row bd-highlight mb-3 karaCard" draggable="true">
<span hidden class = "karaID"><%= kara.id %></span>
<span class="karaElement text-uppercase p-2 bd-highlight badge badge-light"><b><%= kara.language %></b></span>
<span class="karaElement text-uppercase p-2 bd-highlight badge badge-light"><b><%= kara.cat %></b></span>
<span class="karaElement text-uppercase p-2 bd-highlight badge badge-light"><b><%= kara.type %></b></span>
<span class="karaElement p-2 bd-highlight mr-auto"><b><%= kara.source %><br> <%= kara.title %></b> <i>[<%= kara.author %>]</i></span>
<% if (kara.hasOwnProperty('position')) { %>
<span class="karaElement p-3 bd-highlight"><b><%= kara.position %></b></span>
<span class="karaElement p-3 bd-highlight karaPosition"><b><%= kara.position %></b></span>
<% } %>
<div class="karaElement p-2 bd-highlight">
<div class="d-flex flex-row bd-highlight mb-3 btn-group karaActionBtnGroup" role="group">
......
......@@ -144,7 +144,9 @@ app.on('ready', () => {
}
});
});
setTimeout(() => {lkt.idleActualisation();},500);
setTimeout(() => {
lkt.idleActualisation();
}, 500);
lektor.on('close', code => {
logger.warn('main', `Lektor exited with code ${code}`);
lektor_closed = true;
......@@ -205,10 +207,19 @@ ipcMain.on('reload-queue-request', (event, arg) => {
});
ipcMain.on('verify-queue-reloaded-request', (event, arg) => {
if(lkt.isQueueUpdated()) {
if (lkt.isQueueUpdated()) {
lkt.setQueueUpdated(false);
myDb.queue(0, 100).then(karas => {
event.reply('reload-queue-responce', karas);
});
}
});
ipcMain.on('queue-moved-kara', (event, movement) => {
logger.debug('bonjour', 'bonjour');
if (movement.to != movement.from) {
lkt.commandMove(movement.from, movement.to).then(arg => {
event.reply('queue-moved-responce');
});
}
});
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter