From 994f6d2daa14875d8fb74742287d26cd7c40bb8b Mon Sep 17 00:00:00 2001 From: jcorporation Date: Tue, 29 May 2018 23:55:24 +0200 Subject: [PATCH] Get MAX_ELEMENTS_PER_PAGE from central config (Settings API) --- htdocs/js/mpd.js | 9 ++++--- src/mpd_client.c | 70 ++++++++++++++++++++++++++++++------------------ 2 files changed, 50 insertions(+), 29 deletions(-) diff --git a/htdocs/js/mpd.js b/htdocs/js/mpd.js index a55f6ed..95d8dba 100644 --- a/htdocs/js/mpd.js +++ b/htdocs/js/mpd.js @@ -278,8 +278,8 @@ function webSocketConnect() { break; $('#panel-heading-queue').empty(); - if (obj.totalSongs > 0) { - $('#panel-heading-queue').text(obj.totalSongs+' Songs'); + if (obj.totalEntities > 0) { + $('#panel-heading-queue').text(obj.totalEntities+' Songs'); } if (typeof(obj.totalTime) != undefined && obj.totalTime > 0 ) { $('#panel-heading-queue').append(' – ' + beautifyDuration(obj.totalTime)); @@ -307,7 +307,7 @@ function webSocketConnect() { "" ); } - setPagination(obj.totalSongs); + setPagination(obj.totalEntities); if ( isTouch ) { $('#queueList > tbody > tr > td:last-child').append( @@ -580,6 +580,9 @@ function webSocketConnect() { songChange(obj.data.title, obj.data.artist, obj.data.album, obj.data.uri); break; case 'settings': + if (!isNaN(obj.data.max_elements_per_page)) { + MAX_ELEMENTS_PER_PAGE=obj.data.max_elements_per_page; + } if(obj.data.random) $('#btnrandom').removeClass('btn-secondary').addClass("btn-success") else diff --git a/src/mpd_client.c b/src/mpd_client.c index b89bada..ed2c085 100644 --- a/src/mpd_client.c +++ b/src/mpd_client.c @@ -598,7 +598,7 @@ int mympd_put_settings(char *buffer) "{\"type\":\"settings\", \"data\":{" "\"repeat\":%d, \"single\":%d, \"crossfade\":%d, \"consume\":%d, \"random\":%d, " "\"mixrampdb\": %lf, \"mixrampdelay\": %lf, \"mpdhost\" : \"%s\", \"mpdport\": \"%d\", \"passwort_set\": %s, " - "\"streamport\": \"%d\",\"coverimage\": \"%s\"" + "\"streamport\": \"%d\",\"coverimage\": \"%s\", \"max_elements_per_page\": %d" "}}", mpd_status_get_repeat(status), mpd_status_get_single(status), @@ -607,7 +607,10 @@ int mympd_put_settings(char *buffer) mpd_status_get_random(status), mpd_status_get_mixrampdb(status), mpd_status_get_mixrampdelay(status), - mpd.host, mpd.port, mpd.password ? "true" : "false", streamport, coverimage + mpd.host, mpd.port, + mpd.password ? "true" : "false", + streamport, coverimage, + MAX_ELEMENTS_PER_PAGE ); mpd_status_free(status); return len; @@ -661,17 +664,14 @@ int mpd_put_current_song(char *buffer) cur += json_emit_int(cur, end - cur, mpd_song_get_pos(song)); cur += json_emit_raw_str(cur, end - cur, ",\"title\":"); cur += json_emit_quoted_str(cur, end - cur, mpd_get_title(song)); -// cur += json_emit_raw_str(cur, end - cur, ",\"album_artist\":"); -// cur += json_emit_quoted_str(cur, end - cur, mpd_get_album_artist(song)); 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\":"); cur += json_emit_quoted_str(cur, end - cur, mpd_get_album(song)); - cur += json_emit_raw_str(cur, end - cur, ",\"uri\":"); cur += json_emit_quoted_str(cur, end - cur, mpd_song_get_uri(song)); - cur += json_emit_raw_str(cur, end - cur, "}}"); + mpd_song_free(song); mpd_response_finish(mpd.conn); @@ -684,9 +684,9 @@ int mpd_put_queue(char *buffer, unsigned int offset) const char *end = buffer + MAX_SIZE; struct mpd_entity *entity; unsigned long totalTime = 0; - unsigned long totalSongs = 0; + unsigned long entity_count = 0; + unsigned long entities_returned = 0; - /*get complete queue for total songs*/ if (!mpd_send_list_queue_range_meta(mpd.conn, 0, -1)) RETURN_ERROR_AND_RECOVER("mpd_send_list_queue_meta"); @@ -700,9 +700,9 @@ int mpd_put_queue(char *buffer, unsigned int offset) song = mpd_entity_get_song(entity); drtn = mpd_song_get_duration(song); totalTime += drtn; - totalSongs ++; - if(totalSongs > offset && totalSongs <= offset+MAX_ELEMENTS_PER_PAGE) { - /*Pagination*/ + entity_count ++; + if(entity_count > offset && entity_count <= offset+MAX_ELEMENTS_PER_PAGE) { + entities_returned ++; 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\":"); @@ -711,10 +711,6 @@ int mpd_put_queue(char *buffer, unsigned int offset) cur += json_emit_int(cur, end - cur, mpd_song_get_duration(song)); 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_artist\":"); -// cur += json_emit_quoted_str(cur, end - cur, mpd_get_album_artist(song)); -// cur += json_emit_raw_str(cur, end - cur, ",\"uri\":"); -// cur += json_emit_quoted_str(cur, end - cur, mpd_song_get_uri(song)); 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, ",\"title\":"); @@ -731,8 +727,12 @@ int mpd_put_queue(char *buffer, unsigned int offset) 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, ",\"totalSongs\":"); - cur += json_emit_int(cur, end - cur, totalSongs); + cur += json_emit_raw_str(cur, end - cur, ",\"totalEntities\":"); + cur += json_emit_int(cur, end - cur, entity_count); + cur += json_emit_raw_str(cur, end - cur, ",\"offset\":"); + cur += json_emit_int(cur, end - cur, offset); + cur += json_emit_raw_str(cur, end - cur, ",\"returnedEntities\":"); + cur += json_emit_int(cur, end - cur, entities_returned); cur += json_emit_raw_str(cur, end - cur, "}"); return cur - buffer; } @@ -743,6 +743,7 @@ int mpd_put_browse(char *buffer, char *path, unsigned int offset) const char *end = buffer + MAX_SIZE; struct mpd_entity *entity; unsigned int entity_count = 0; + unsigned int entities_returned = 0; if (!mpd_send_list_meta(mpd.conn, path)) RETURN_ERROR_AND_RECOVER("mpd_send_list_meta"); @@ -752,14 +753,14 @@ int mpd_put_browse(char *buffer, char *path, unsigned int offset) while((entity = mpd_recv_entity(mpd.conn)) != NULL) { const struct mpd_song *song; const struct mpd_directory *dir; - entity_count++; + entity_count ++; if(entity_count > offset && entity_count <= offset+MAX_ELEMENTS_PER_PAGE) { switch (mpd_entity_get_type(entity)) { case MPD_ENTITY_TYPE_UNKNOWN: break; - case MPD_ENTITY_TYPE_SONG: + entities_returned ++; song = mpd_entity_get_song(entity); cur += json_emit_raw_str(cur, end - cur, "{\"type\":\"song\",\"uri\":"); cur += json_emit_quoted_str(cur, end - cur, mpd_song_get_uri(song)); @@ -775,6 +776,7 @@ int mpd_put_browse(char *buffer, char *path, unsigned int offset) break; case MPD_ENTITY_TYPE_DIRECTORY: + entities_returned ++; dir = mpd_entity_get_directory(entity); cur += json_emit_raw_str(cur, end - cur, "{\"type\":\"directory\",\"dir\":"); cur += json_emit_quoted_str(cur, end - cur, mpd_directory_get_path(dir)); @@ -799,6 +801,10 @@ int mpd_put_browse(char *buffer, char *path, unsigned int offset) cur--; cur += json_emit_raw_str(cur, end - cur, "],\"totalEntities\":"); cur += json_emit_int(cur, end - cur, entity_count); + cur += json_emit_raw_str(cur, end - cur, ",\"offset\":"); + cur += json_emit_int(cur, end - cur, offset); + cur += json_emit_raw_str(cur, end - cur, ",\"returnedEntities\":"); + cur += json_emit_int(cur, end - cur, entities_returned); cur += json_emit_raw_str(cur, end - cur, "}"); return cur - buffer; } @@ -809,6 +815,7 @@ int mpd_put_playlists(char *buffer, unsigned int offset) const char *end = buffer + MAX_SIZE; struct mpd_playlist *pl; unsigned int entity_count = 0; + unsigned int entities_returned = 0; if (!mpd_send_list_playlists(mpd.conn)) RETURN_ERROR_AND_RECOVER("mpd_send_lists_playlists"); @@ -816,8 +823,9 @@ int mpd_put_playlists(char *buffer, unsigned int offset) cur += json_emit_raw_str(cur, end - cur, "{\"type\":\"playlists\",\"data\":[ "); while((pl = mpd_recv_playlist(mpd.conn)) != NULL) { - entity_count++; + entity_count ++; if(entity_count > offset && entity_count <= offset+MAX_ELEMENTS_PER_PAGE) { + entities_returned ++; cur += json_emit_raw_str(cur, end - cur, "{\"type\":\"playlist\",\"plist\":"); cur += json_emit_quoted_str(cur, end - cur, mpd_playlist_get_path(pl)); cur += json_emit_raw_str(cur, end - cur, ",\"last_modified\":"); @@ -837,7 +845,11 @@ int mpd_put_playlists(char *buffer, unsigned int offset) cur--; cur += json_emit_raw_str(cur, end - cur, "],\"totalEntities\":"); - cur += json_emit_int(cur, end - cur, entity_count); + cur += json_emit_int(cur, end - cur, entity_count); + cur += json_emit_raw_str(cur, end - cur, ",\"offset\":"); + cur += json_emit_int(cur, end - cur, offset); + cur += json_emit_raw_str(cur, end - cur, ",\"returnedEntities\":"); + cur += json_emit_int(cur, end - cur, entities_returned); cur += json_emit_raw_str(cur, end - cur, "}"); return cur - buffer; } @@ -910,7 +922,8 @@ int mpd_search_queue(char *buffer, char *mpdtagtype, unsigned int offset, char * char *cur = buffer; const char *end = buffer + MAX_SIZE; struct mpd_song *song; - unsigned long totalSongs = 0; + unsigned long entity_count = 0; + unsigned long entities_returned = 0; if(mpd_search_queue_songs(mpd.conn, false) == false) { RETURN_ERROR_AND_RECOVER("mpd_search_queue_songs"); @@ -931,8 +944,9 @@ int mpd_search_queue(char *buffer, char *mpdtagtype, unsigned int offset, char * cur += json_emit_raw_str(cur, end - cur, "{\"type\":\"queuesearch\",\"data\":[ "); while((song = mpd_recv_song(mpd.conn)) != NULL) { - totalSongs ++; - if(totalSongs > offset && totalSongs <= offset+MAX_ELEMENTS_PER_PAGE) { + entity_count ++; + if(entity_count > offset && entity_count <= offset+MAX_ELEMENTS_PER_PAGE) { + entities_returned ++; cur += json_emit_raw_str(cur, end - cur, "{\"type\":\"song\""); cur += json_emit_raw_str(cur, end - cur, ",\"id\":"); cur += json_emit_int(cur, end - cur, mpd_song_get_id(song)); @@ -954,8 +968,12 @@ int mpd_search_queue(char *buffer, char *mpdtagtype, unsigned int offset, char * cur--; cur += json_emit_raw_str(cur, end - cur, "]"); - cur += json_emit_raw_str(cur, end - cur, ",\"totalSongs\":"); - cur += json_emit_int(cur, end - cur, totalSongs); + cur += json_emit_raw_str(cur, end - cur, ",\"totalEntities\":"); + cur += json_emit_int(cur, end - cur, entity_count); + cur += json_emit_raw_str(cur, end - cur, ",\"offset\":"); + cur += json_emit_int(cur, end - cur, offset); + cur += json_emit_raw_str(cur, end - cur, ",\"returnedEntities\":"); + cur += json_emit_int(cur, end - cur, entities_returned); cur += json_emit_raw_str(cur, end - cur, ",\"mpdtagtype\":"); cur += json_emit_quoted_str(cur, end - cur, mpdtagtype); cur += json_emit_raw_str(cur, end - cur, "}");