1
0
mirror of https://github.com/SuperBFG7/ympd synced 2025-11-18 06:05:14 +00:00

New layout for browse card

First steps for playlist view
This commit is contained in:
jcorporation
2018-05-29 00:05:56 +02:00
parent 9d1d406026
commit 6bb24e72f8
5 changed files with 256 additions and 66 deletions

View File

@@ -170,6 +170,10 @@ int callback_mpd(struct mg_connection *c)
if(sscanf(c->content, "MPD_API_GET_QUEUE,%u", &uint_buf))
n = mpd_put_queue(mpd.buf, uint_buf);
break;
case MPD_API_GET_PLAYLISTS:
if(sscanf(c->content, "MPD_API_GET_PLAYLISTS,%u", &uint_buf))
n = mpd_put_playlists(mpd.buf, uint_buf);
break;
case MPD_API_GET_BROWSE:
p_charbuf = strdup(c->content);
if(strcmp(strtok(p_charbuf, ","), "MPD_API_GET_BROWSE"))
@@ -779,6 +783,45 @@ int mpd_put_browse(char *buffer, char *path, unsigned int offset)
return cur - buffer;
}
int mpd_put_playlists(char *buffer, unsigned int offset)
{
char *cur = buffer;
const char *end = buffer + MAX_SIZE;
struct mpd_playlist *pl;
unsigned int entity_count = 0;
if (!mpd_send_list_playlists(mpd.conn))
RETURN_ERROR_AND_RECOVER("mpd_send_lists_playlists");
cur += json_emit_raw_str(cur, end - cur, "{\"type\":\"playlists\",\"data\":[ ");
while((pl = mpd_recv_playlist(mpd.conn)) != NULL) {
entity_count++;
if(entity_count > offset && entity_count <= offset+MAX_ELEMENTS_PER_PAGE) {
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\":");
cur += json_emit_int(cur, end - cur, mpd_playlist_get_last_modified(pl));
cur += json_emit_raw_str(cur, end - cur, "},");
}
mpd_playlist_free(pl);
}
if (mpd_connection_get_error(mpd.conn) != MPD_ERROR_SUCCESS || !mpd_response_finish(mpd.conn)) {
fprintf(stderr, "MPD mpd_send_list_playlists: %s\n", mpd_connection_get_error_message(mpd.conn));
mpd.conn_state = MPD_FAILURE;
return 0;
}
/* remove last ',' */
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, "}");
return cur - buffer;
}
int mpd_search(char *buffer, char *searchstr)
{
char *cur = buffer;

View File

@@ -76,7 +76,8 @@
X(MPD_API_SEND_SHUFFLE) \
X(MPD_API_GET_STATS) \
X(MPD_API_SET_MIXRAMPDB) \
X(MPD_API_SET_MIXRAMPDELAY)
X(MPD_API_SET_MIXRAMPDELAY) \
X(MPD_API_GET_PLAYLISTS)
enum mpd_cmd_ids {
MPD_CMDS(GEN_ENUM)
@@ -125,6 +126,7 @@ int mpd_put_state(char *buffer, int *current_song_id, int *next_song_id, unsigne
int mpd_put_outputs(char *buffer, int putnames);
int mpd_put_current_song(char *buffer);
int mpd_put_queue(char *buffer, unsigned int offset);
int mpd_put_playlists(char *buffer, unsigned int offset);
int mpd_put_browse(char *buffer, char *path, unsigned int offset);
int mpd_search(char *buffer, char *searchstr);
int mpd_search_queue(char *buffer, char *mpdtagtype, unsigned int offset, char *searchstr);