Esempio n. 1
0
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;
}
Esempio n. 2
0
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));
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
void Connection::AddSearchAny(const std::string &str) const
{
	checkConnection();
	mpd_search_add_any_tag_constraint(m_connection.get(), MPD_OPERATOR_DEFAULT, str.c_str());
}