int mpd_search(char *buffer, char *searchstr) { int i = 0; char *cur = buffer; const char *end = buffer + MAX_SIZE; struct mpd_song *song; if(mpd_search_db_songs(mpd.conn, false) == false) RETURN_ERROR_AND_RECOVER("mpd_search_db_songs"); else if(mpd_search_add_any_tag_constraint(mpd.conn, MPD_OPERATOR_DEFAULT, searchstr) == false) RETURN_ERROR_AND_RECOVER("mpd_search_add_any_tag_constraint"); else if(mpd_search_commit(mpd.conn) == false) RETURN_ERROR_AND_RECOVER("mpd_search_commit"); else { cur += json_emit_raw_str(cur, end - cur, "{\"type\":\"search\",\"data\":[ "); while((song = mpd_recv_song(mpd.conn)) != NULL) { cur += json_emit_raw_str(cur, end - cur, "{\"type\":\"song\",\"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, ",\"artist\":"); cur += json_emit_quoted_str(cur, end - cur, mpd_get_artist(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_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, "},"); mpd_song_free(song); /* Maximum results */ if(i++ >= 300) { cur += json_emit_raw_str(cur, end - cur, "{\"type\":\"wrap\"},"); break; } } /* remove last ',' */ cur--; cur += json_emit_raw_str(cur, end - cur, "]}"); } return cur - buffer; }
static void add_constraint(struct mpd_connection *conn, const struct constraint *constraint) { if (constraint->type == (enum mpd_tag_type)SEARCH_TAG_ANY) mpd_search_add_any_tag_constraint(conn, MPD_OPERATOR_DEFAULT, charset_to_utf8(constraint->query)); else if (constraint->type == (enum mpd_tag_type)SEARCH_TAG_URI) mpd_search_add_uri_constraint(conn, MPD_OPERATOR_DEFAULT, charset_to_utf8(constraint->query)); #if LIBMPDCLIENT_CHECK_VERSION(2,9,0) else if (constraint->type == (enum mpd_tag_type)SEARCH_TAG_BASE) mpd_search_add_base_constraint(conn, MPD_OPERATOR_DEFAULT, charset_to_utf8(constraint->query)); #endif else mpd_search_add_tag_constraint(conn, MPD_OPERATOR_DEFAULT, constraint->type, charset_to_utf8(constraint->query)); }
static int find_songname_id(struct mpd_connection *conn, const char *s) { int res = -1; mpd_search_queue_songs(conn, false); const char *pattern = s; //charset_to_utf8(s); mpd_search_add_any_tag_constraint(conn, MPD_OPERATOR_DEFAULT, pattern); mpd_search_commit(conn); struct mpd_song *song = mpd_recv_song(conn); if (song != NULL) { res = mpd_song_get_id(song); mpd_song_free(song); } my_finishCommand(conn); return res; }
void Connection::AddSearchAny(const std::string &str) const { checkConnection(); mpd_search_add_any_tag_constraint(m_connection.get(), MPD_OPERATOR_DEFAULT, str.c_str()); }