mirror of
https://github.com/SuperBFG7/ympd
synced 2026-09-21 00:28:48 +00:00
Feat: crop queue (MPD_API_QUEUE_CROP)
Fix: rename MPD_API_RM_ALL to MPD_API_QUEUE_CLEAR
This commit is contained in:
+36
-5
@@ -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
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user