From 7de84a48dd5f0cff110dc9ff17627c5aad4c7c90 Mon Sep 17 00:00:00 2001 From: Torsten Stauder Date: Fri, 6 Aug 2021 00:23:09 +0200 Subject: [PATCH] Show current track played in webGUI --- html/management_DE.html | 21 +++++++++++++++++++-- html/management_EN.html | 37 +++++++++++++++++++++++++++---------- src/AudioPlayer.cpp | 4 ++++ src/HTMLmanagement_DE.h | 21 +++++++++++++++++++-- src/HTMLmanagement_EN.h | 37 +++++++++++++++++++++++++++---------- src/LogMessages_DE.cpp | 2 +- src/LogMessages_EN.cpp | 1 + src/Web.cpp | 20 ++++++++++++++++---- src/logmessages.h | 1 + src/revision.h | 2 +- 10 files changed, 116 insertions(+), 30 deletions(-) diff --git a/html/management_DE.html b/html/management_DE.html index cce23d6..7f058e5 100644 --- a/html/management_DE.html +++ b/html/management_DE.html @@ -208,6 +208,10 @@ data-slider-value="%CURRENT_VOLUME%" value="%CURRENT_VOLUME%" onchange="sendVolume(this.value)">
+
+ Aktueller Titel +
+

+
+ Current track +
+
\
\ +
\ + Aktueller Titel\ +
\ +
\ \ \
\ @@ -961,10 +965,11 @@ static const char management_HTML[] PROGMEM = "\ \ socket.onopen = function () {\ setInterval(ping, 15000);\ + getTrack();\ };\ \ socket.onclose = function (e) {\ - console.log('Socket is closed. Reconnect will be attempted in 1 second.', e.reason);\ + console.log('Socket is geschlossen. Neuer Versuch in fuenf Sekunden.', e.reason);\ socket = null;\ setTimeout(function () {\ connect();\ @@ -972,7 +977,7 @@ static const char management_HTML[] PROGMEM = "\ };\ \ socket.onerror = function (err) {\ - console.error('Socket encountered error: ', err.message, 'Closing socket');\ + console.error('Socket-Fehler: ', err.message, 'Socket wird geschlossen');\ };\ \ socket.onmessage = function(event) {\ @@ -990,6 +995,8 @@ static const char management_HTML[] PROGMEM = "\ if (socketMsg.pong == 'pong') {\ pong();\ }\ + } if (\"track\" in socketMsg) {\ + document.getElementById('track').innerHTML = socketMsg.track;\ }\ };\ }\ @@ -1010,6 +1017,16 @@ static const char management_HTML[] PROGMEM = "\ function pong() {\ clearTimeout(tm);\ }\ +\ + function getTrack() {\ + var myObj = {\ + \"getTrack\": {\ + getTrack: 'getTrack'\ + }\ + };\ + var myJSON = JSON.stringify(myObj);\ + socket.send(myJSON);\ + }\ \ function genSettings(clickedId) {\ lastIdclicked = clickedId;\ diff --git a/src/HTMLmanagement_EN.h b/src/HTMLmanagement_EN.h index 46a4f21..5d91b0e 100644 --- a/src/HTMLmanagement_EN.h +++ b/src/HTMLmanagement_EN.h @@ -208,6 +208,10 @@ static const char management_HTML[] PROGMEM = "\ data-slider-value=\"%CURRENT_VOLUME%\" value=\"%CURRENT_VOLUME%\" onchange=\"sendVolume(this.value)\"> \
\
\ +
\ + Current track\ +
\ +
\ \ \
\ @@ -865,9 +869,9 @@ static const char management_HTML[] PROGMEM = "\ \ if (node.data.directory) {\ items.createDir = {\ - label: \"Neuer Ordner\",\ + label: \"New folder\",\ action: function(x) {\ - var childNode = ref.create_node(nodeId, {text: \"Neuer Ordner\", type: \"folder\"});\ + var childNode = ref.create_node(nodeId, {text: \"New folder\", type: \"folder\"});\ if(childNode) {\ ref.edit(childNode, null, function(childNode, status){\ putData(\"/explorer?path=\" + node.data.path + \"/\" + childNode.text);\ @@ -880,7 +884,7 @@ static const char management_HTML[] PROGMEM = "\ \ /* Play */\ items.play = {\ - label: \"Abspielen\",\ + label: \"Play\",\ action: function(x) {\ var playMode = node.data.directory?\"5\":\"1\";\ postData(\"/exploreraudio?path=\" + node.data.path + \"&playmode=\" + playMode);\ @@ -889,7 +893,7 @@ static const char management_HTML[] PROGMEM = "\ \ /* Refresh */\ items.refresh = {\ - label: \"Aktualisieren\",\ + label: \"Refresh\",\ action: function(x) {\ refreshNode(nodeId);\ }\ @@ -897,7 +901,7 @@ static const char management_HTML[] PROGMEM = "\ \ /* Delete */\ items.delete = {\ - label: \"Löschen\",\ + label: \"Delete\",\ action: function(x) {\ handleDeleteData(nodeId);\ refreshNode(ref.get_parent(nodeId));\ @@ -906,7 +910,7 @@ static const char management_HTML[] PROGMEM = "\ \ /* Rename */\ items.rename = {\ - label: \"Umbenennen\",\ + label: \"Rename\",\ action: function(x) {\ var srcPath = node.data.path;\ ref.edit(nodeId, null, function(node, status){\ @@ -961,10 +965,11 @@ static const char management_HTML[] PROGMEM = "\ \ socket.onopen = function () {\ setInterval(ping, 15000);\ + getTrack();\ };\ \ socket.onclose = function (e) {\ - console.log('Socket is closed. Reconnect will be attempted in 1 second.', e.reason);\ + console.log('Socket is closed. Reconnect will be attempted in 5 seconds.', e.reason);\ socket = null;\ setTimeout(function () {\ connect();\ @@ -980,16 +985,18 @@ static const char management_HTML[] PROGMEM = "\ var socketMsg = JSON.parse(event.data);\ if (socketMsg.rfidId != null) {\ document.getElementById('rfidIdMusic').value = socketMsg.rfidId;\ - toastr.info(\"RFID Tag mit \"+ socketMsg.rfidId + \" erkannt.\" );\ + toastr.info(\"RFID-tag \"+ socketMsg.rfidId + \" detected.\" );\ $(\"#rfidIdMusic\").effect(\"highlight\", {color:\"#abf5af\"}, 3000);\ } if (\"status\" in socketMsg) {\ if (socketMsg.status == \"ok\") {\ - toastr.success(\"Aktion erfolgreich ausgeführt.\" );\ + toastr.success(\"Action performed successfully.\" );\ }\ } if (\"pong\" in socketMsg) {\ if (socketMsg.pong == 'pong') {\ pong();\ }\ + } if (\"track\" in socketMsg) {\ + document.getElementById('track').innerHTML = socketMsg.track;\ }\ };\ }\ @@ -1003,13 +1010,23 @@ static const char management_HTML[] PROGMEM = "\ var myJSON = JSON.stringify(myObj);\ socket.send(myJSON);\ tm = setTimeout(function () {\ - toastr.warning('Die Verbindung zum ESPuino ist unterbrochen! Bitte Seite neu laden.');\ + toastr.warning('Connection to ESPuino broken! Please reload website.');\ }, 5000);\ }\ \ function pong() {\ clearTimeout(tm);\ }\ +\ + function getTrack() {\ + var myObj = {\ + \"getTrack\": {\ + getTrack: 'getTrack'\ + }\ + };\ + var myJSON = JSON.stringify(myObj);\ + socket.send(myJSON);\ + }\ \ function genSettings(clickedId) {\ lastIdclicked = clickedId;\ diff --git a/src/LogMessages_DE.cpp b/src/LogMessages_DE.cpp index 9d2561e..5811e1a 100644 --- a/src/LogMessages_DE.cpp +++ b/src/LogMessages_DE.cpp @@ -205,5 +205,5 @@ const char fwEnd[] PROGMEM = "Firmware-update beendet"; const char otaNotSupported[] PROGMEM = "Firmware-update wird von diesem ESPuino nicht unterstuetzt!"; const char otaNotSupportedWebsite[] PROGMEM = "

Firmware-update wird von diesem ESPuino nicht unterstuetzt!
Zur letzten Seite zurückkehren.

"; - + const char noPlaylist[] PROGMEM = "Keine Playlist aktiv."; #endif diff --git a/src/LogMessages_EN.cpp b/src/LogMessages_EN.cpp index 459c6d5..7fbd807 100644 --- a/src/LogMessages_EN.cpp +++ b/src/LogMessages_EN.cpp @@ -205,5 +205,6 @@ const char fwEnd[] PROGMEM = "Firmware-update finished"; const char otaNotSupported[] PROGMEM = "Firmware-update isn't supported by this ESPuino!"; const char otaNotSupportedWebsite[] PROGMEM = "

FFirmware-update isn't supported by this ESPuino!
Back to last page.

"; + const char noPlaylist[] PROGMEM = "No active playlist."; #endif diff --git a/src/Web.cpp b/src/Web.cpp index 822b344..900b5f2 100644 --- a/src/Web.cpp +++ b/src/Web.cpp @@ -489,6 +489,8 @@ bool processJsonRequest(char *_serialJson) { uint8_t cmd = doc["controls"]["action"].as(); Cmd_Action(cmd); } + } else if (doc.containsKey("getTrack")) { + Web_SendWebsocketData(0, 30); } return true; @@ -496,10 +498,9 @@ bool processJsonRequest(char *_serialJson) { // Sends JSON-answers via websocket void Web_SendWebsocketData(uint32_t client, uint8_t code) { - char *jBuf; - jBuf = (char *)x_calloc(255, sizeof(char)); + char *jBuf = (char *) x_calloc(255, sizeof(char)); - const size_t CAPACITY = JSON_OBJECT_SIZE(1) + 20; + const size_t CAPACITY = JSON_OBJECT_SIZE(1) + 200; StaticJsonDocument doc; JsonObject object = doc.to(); @@ -511,6 +512,15 @@ void Web_SendWebsocketData(uint32_t client, uint8_t code) { object["rfidId"] = gCurrentRfidTagId; } else if (code == 20) { object["pong"] = "pong"; + } else if (code == 30) { + if (gPlayProperties.playMode == NO_PLAYLIST) { + object["track"] = (char *)FPSTR (noPlaylist); + } else { + snprintf(Log_Buffer, Log_BufferLength, "(%u / %u): %s", gPlayProperties.currentTrackNumber+1, gPlayProperties.numberOfTracks, *(gPlayProperties.playlist + gPlayProperties.currentTrackNumber)); + char utf8Buffer[200]; + convertAsciiToUtf8(Log_Buffer, utf8Buffer); + object["track"] = utf8Buffer; + } } serializeJson(doc, jBuf, 255); @@ -547,7 +557,9 @@ void onWebsocketEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsE Serial.printf("ws[%s][%u] %s-message[%llu]: ", server->url(), client->id(), (info->opcode == WS_TEXT) ? "text" : "binary", info->len); if (processJsonRequest((char *)data)) { - Web_SendWebsocketData(client->id(), 1); + if (strncmp((char *)data, "getTrack", 8)) { // Don't send back ok-feedback if track's name is requested in background + Web_SendWebsocketData(client->id(), 1); + } } if (info->opcode == WS_TEXT) { diff --git a/src/logmessages.h b/src/logmessages.h index bd8cdee..57b4764 100644 --- a/src/logmessages.h +++ b/src/logmessages.h @@ -201,3 +201,4 @@ extern const char fwStart[]; extern const char fwEnd[]; extern const char otaNotSupported[]; extern const char otaNotSupportedWebsite[]; +extern const char noPlaylist[]; diff --git a/src/revision.h b/src/revision.h index eaf46e8..657675d 100644 --- a/src/revision.h +++ b/src/revision.h @@ -1,4 +1,4 @@ #ifndef __REVISION_H__ #define __REVISION_H__ - constexpr const char softwareRevision[] PROGMEM = "Software-revision: 20210731-1"; + constexpr const char softwareRevision[] PROGMEM = "Software-revision: 20210806-1"; #endif \ No newline at end of file