diff --git a/htdocs/js/mpd.js b/htdocs/js/mpd.js
index db738d1..aa56611 100644
--- a/htdocs/js/mpd.js
+++ b/htdocs/js/mpd.js
@@ -47,6 +47,8 @@ var app = $.sammy(function() {
socket.send('MPD_API_GET_QUEUE,'+pagination);
$('#panel-heading').text("Queue");
+ $('#panel-heading-info').empty();
+
$('#queue').addClass('active');
}
@@ -126,6 +128,8 @@ var app = $.sammy(function() {
$('#dirble_right').find("tr:gt(0)").remove();
$('#panel-heading').text("Dirble");
+ $('#panel-heading-info').empty();
+
$('#dirble').addClass('active');
$('#next').addClass('hide');
@@ -155,6 +159,8 @@ var app = $.sammy(function() {
$('#dirble_right').find("tr:gt(0)").remove();
$('#panel-heading').text("Dirble");
+ $('#panel-heading-info').empty();
+
$('#dirble').addClass('active');
dirble_stations = false;
@@ -292,6 +298,18 @@ function webSocketConnect() {
if(current_app !== 'queue')
break;
+ if (obj.totalTime > 0) {
+ var hours = Math.floor(obj.totalTime / 3600);
+ var minutes = Math.floor(obj.totalTime / 60) - hours * 60;
+ var seconds = obj.totalTime - hours * 3600 - minutes * 60;
+
+ $('#panel-heading-info').text('Total: ' +
+ (hours > 0 ? hours + '\u2009h ' + (minutes < 10 ? '0' : '') : '') +
+ minutes + '\u2009m ' + (seconds < 10 ? '0' : '') + seconds + '\u2009s');
+ } else {
+ $('#panel-heading-info').empty();
+ }
+
$('#salamisandwich > tbody').empty();
for (var song in obj.data) {
var minutes = Math.floor(obj.data[song].duration / 60);
@@ -417,13 +435,14 @@ function webSocketConnect() {
var minutes = Math.floor(obj.data[item].duration / 60);
var seconds = obj.data[item].duration - minutes * 60;
- if (typeof obj.data[item].artist === 'undefined') {
- var details = "
" + obj.data[item].title + " | ";
+ if (obj.data[item].artist == null) {
+ var artist = "";
} else {
- var details = " | " + obj.data[item].artist + " " + obj.data[item].album + " | " + obj.data[item].title + " | ";
+ var artist = "" + obj.data[item].artist +
+ "" + obj.data[item].album + " | ";
}
- $('#salamisandwich > tbody').append(
+ $('#salamisandwich > tbody').append(
" | " +
" | " +
"" + obj.data[item].title + " | " +
diff --git a/src/mpd_client.c b/src/mpd_client.c
index a5ebf28..f01ff16 100644
--- a/src/mpd_client.c
+++ b/src/mpd_client.c
@@ -612,6 +612,7 @@ int mpd_put_queue(char *buffer, unsigned int offset)
char *cur = buffer;
const char *end = buffer + MAX_SIZE;
struct mpd_entity *entity;
+ unsigned long totalTime = 0;
if (!mpd_send_list_queue_range_meta(mpd.conn, offset, offset+MAX_ELEMENTS_PER_PAGE))
RETURN_ERROR_AND_RECOVER("mpd_send_list_queue_meta");
@@ -620,16 +621,18 @@ int mpd_put_queue(char *buffer, unsigned int offset)
while((entity = mpd_recv_entity(mpd.conn)) != NULL) {
const struct mpd_song *song;
+ unsigned int drtn;
if(mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG) {
song = mpd_entity_get_song(entity);
+ drtn = mpd_song_get_duration(song);
cur += json_emit_raw_str(cur, end - cur, "{\"id\":");
cur += json_emit_int(cur, end - cur, mpd_song_get_id(song));
cur += json_emit_raw_str(cur, end - cur, ",\"pos\":");
cur += json_emit_int(cur, end - cur, mpd_song_get_pos(song));
cur += json_emit_raw_str(cur, end - cur, ",\"duration\":");
- cur += json_emit_int(cur, end - cur, mpd_song_get_duration(song));
+ cur += json_emit_int(cur, end - cur, drtn);
cur += json_emit_raw_str(cur, end - cur, ",\"artist\":");
cur += json_emit_quoted_str(cur, end - cur, mpd_get_artist(song));
cur += json_emit_raw_str(cur, end - cur, ",\"album\":");
@@ -641,6 +644,8 @@ int mpd_put_queue(char *buffer, unsigned int offset)
cur += json_emit_raw_str(cur, end - cur, ",\"album\":");
cur += json_emit_quoted_str(cur, end - cur, mpd_get_album(song));
cur += json_emit_raw_str(cur, end - cur, "},");
+
+ totalTime += drtn;
}
mpd_entity_free(entity);
}
@@ -648,7 +653,9 @@ int mpd_put_queue(char *buffer, unsigned int offset)
/* remove last ',' */
cur--;
- cur += json_emit_raw_str(cur, end - cur, "]}");
+ cur += json_emit_raw_str(cur, end - cur, "],\"totalTime\":");
+ cur += json_emit_int(cur, end - cur, totalTime);
+ cur += json_emit_raw_str(cur, end - cur, "}");
return cur - buffer;
}