Feat: crop queue (MPD_API_QUEUE_CROP)

Fix: rename MPD_API_RM_ALL to MPD_API_QUEUE_CLEAR
This commit is contained in:
jcorporation
2018-08-05 23:02:29 +01:00
parent e5a3115190
commit 1993ba73d3
5 changed files with 80 additions and 37 deletions
+36 -5
View File
@@ -162,10 +162,13 @@ void callback_mympd(struct mg_connection *nc, const struct mg_str msg)
mpd_run_stop(mpd.conn);
n = snprintf(mpd.buf, MAX_SIZE, "{\"type\": \"result\", \"data\": \"ok\"}");
break;
case MPD_API_RM_ALL:
case MPD_API_QUEUE_CLEAR:
mpd_run_clear(mpd.conn);
n = snprintf(mpd.buf, MAX_SIZE, "{\"type\": \"result\", \"data\": \"ok\"}");
break;
case MPD_API_QUEUE_CROP:
n = mympd_queue_crop(mpd.buf);
break;
case MPD_API_RM_TRACK:
je = json_scanf(msg.p, msg.len, "{ data: { track:%u } }", &uint_buf1);
if (je == 1) {
@@ -410,7 +413,7 @@ void callback_mympd(struct mg_connection *nc, const struct mg_str msg)
case MPD_API_SEARCH_ADD_PLIST:
je = json_scanf(msg.p, msg.len, "{ data: { plist:%Q, filter:%Q, searchstr:%Q } }", &p_charbuf1, &p_charbuf2, &p_charbuf3);
if (je == 3) {
n = mympd_search_add_plist(mpd.buf, p_charbuf1, p_charbuf2, p_charbuf3);
n = mympd_search_add_plist(p_charbuf1, p_charbuf2, p_charbuf3);
free(p_charbuf1);
free(p_charbuf2);
free(p_charbuf3);
@@ -1307,9 +1310,8 @@ int mympd_search_add(char *buffer, char *mpdtagtype, char *searchstr) {
return len;
}
int mympd_search_add_plist(char *buffer, char *plist, char *mpdtagtype, char *searchstr) {
int mympd_search_add_plist(char *plist, char *mpdtagtype, char *searchstr) {
int len = 0;
struct json_out out = JSON_OUT_BUF(buffer, MAX_SIZE);
struct mpd_pair *pair;
mpd_send_command(mpd.conn, "searchaddpl", plist, mpdtagtype, searchstr, NULL);
@@ -1323,12 +1325,41 @@ int mympd_search_add_plist(char *buffer, char *plist, char *mpdtagtype, char *se
return len;
}
int mympd_queue_crop(char *buffer) {
int len = 0;
struct json_out out = JSON_OUT_BUF(buffer, MAX_SIZE);
struct mpd_status *status = mpd_run_status(mpd.conn);
int length = mpd_status_get_queue_length(status) - 1;
int playing_song_pos = mpd_status_get_song_pos(status);
mpd_status_free(status);
if (length < 0) {
len = json_printf(&out, "{ type: error, data: %Q }", "A playlist longer than 1 song in length is required to crop.");
}
else if (mpd_status_get_state(status) == MPD_STATE_PLAY || mpd_status_get_state(status) == MPD_STATE_PAUSE) {
playing_song_pos++;
if (playing_song_pos < length)
mpd_run_delete_range(mpd.conn, playing_song_pos, -1);
playing_song_pos--;
if (playing_song_pos > 0 )
mpd_run_delete_range(mpd.conn, 0, playing_song_pos--);
len = json_printf(&out, "{ type: result, data: ok }");
} else {
len = json_printf(&out, "{ type: error, data: %Q }", "You need to be playing to crop the playlist");
}
if (len > MAX_SIZE)
fprintf(stderr,"Buffer truncated\n");
return len;
}
int mympd_search_queue(char *buffer, char *mpdtagtype, unsigned int offset, char *searchstr) {
struct mpd_song *song;
unsigned long entity_count = 0;
unsigned long entities_returned = 0;
int len;
struct json_out out = JSON_OUT_BUF(buffer, MAX_SIZE);
struct json_out out = JSON_OUT_BUF(buffer, MAX_SIZE);
if (mpd_search_queue_songs(mpd.conn, false) == false) {
RETURN_ERROR_AND_RECOVER("mpd_search_queue_songs");
+4 -2
View File
@@ -61,7 +61,8 @@
X(MPD_API_SAVE_QUEUE) \
X(MPD_API_RM_TRACK) \
X(MPD_API_RM_RANGE) \
X(MPD_API_RM_ALL) \
X(MPD_API_QUEUE_CLEAR) \
X(MPD_API_QUEUE_CROP) \
X(MPD_API_MOVE_TRACK) \
X(MPD_API_SEARCH_QUEUE) \
X(MPD_API_SEARCH_ADD_PLIST) \
@@ -146,7 +147,7 @@ int mympd_put_queue(char *buffer, unsigned int offset);
int mympd_put_browse(char *buffer, char *path, unsigned int offset, char *filter);
int mympd_search(char *buffer, char *mpdtagtype, unsigned int offset, char *searchstr);
int mympd_search_add(char *buffer, char *mpdtagtype, char *searchstr);
int mympd_search_add_plist(char *buffer, char *plist, char *mpdtagtype, char *searchstr);
int mympd_search_add_plist(char *plist, char *mpdtagtype, char *searchstr);
int mympd_search_queue(char *buffer, char *mpdtagtype, unsigned int offset, char *searchstr);
int mympd_put_welcome(char *buffer);
int mympd_get_stats(char *buffer);
@@ -156,6 +157,7 @@ int mympd_put_songs_in_album(char *buffer, char *albumartist, char *album);
int mympd_put_playlists(char *buffer, unsigned int offset, char *filter);
int mympd_put_playlist_list(char *buffer, char *uri, unsigned int offset, char *filter);
int mympd_put_songdetails(char *buffer, char *uri);
int mympd_queue_crop(char *buffer);
void mympd_disconnect();
#endif