enum mpd_tag_type get_search_type(const char *name) { if (strcasecmp(name, "any") == 0) return SEARCH_TAG_ANY; if (strcasecmp(name, "filename") == 0) return SEARCH_TAG_URI; #if LIBMPDCLIENT_CHECK_VERSION(2,9,0) if (strcasecmp(name, "base") == 0) return SEARCH_TAG_BASE; #endif enum mpd_tag_type type = mpd_tag_name_iparse(name); if (type != MPD_TAG_UNKNOWN) return type; fprintf(stderr, "\"%s\" is not a valid search type: <any", name); for (unsigned i = 0; i < MPD_TAG_COUNT; i++) { name = mpd_tag_name(i); if (name == NULL) continue; fputc('|', stderr); fputs(name, stderr); } fputs(">\n", stderr); return MPD_TAG_UNKNOWN; }
struct mpd_pair * mpd_recv_pair_tag(struct mpd_connection *connection, enum mpd_tag_type type) { const char *name; assert(connection != NULL); name = mpd_tag_name(type); if (name == NULL) return NULL; return mpd_recv_pair_named(connection, name); }
void print_extra_info(void) { WINDOW *win = specific_win(EXTRA_INFO); if (basic_info->volume >= 0) wprintw(win, "Volume:%3i%c ", basic_info->volume, '%'); else { wprintw(win, "Volume: n/a "); } mvwprintw(win, 0, 14, "Search: "); color_print(win, 6, mpd_tag_name(songlist->tags [songlist->crt_tag_id])); wprintw(win, " "); }
bool mpd_search_add_tag_constraint(struct mpd_connection *connection, enum mpd_operator oper, enum mpd_tag_type type, const char *value) { const char *strtype; assert(connection != NULL); assert(value != NULL); strtype = mpd_tag_name(type); if (strtype == NULL) { mpd_error_code(&connection->error, MPD_ERROR_ARGUMENT); mpd_error_message(&connection->error, "invalid type specified"); return false; } return mpd_search_add_constraint(connection, oper, strtype, value); }
bool mpd_search_db_tags(struct mpd_connection *connection, enum mpd_tag_type type) { const char *strtype; int len; assert(connection != NULL); if (mpd_error_is_defined(&connection->error)) return false; if (connection->request) { mpd_error_code(&connection->error, MPD_ERROR_STATE); mpd_error_message(&connection->error, "search already in progress"); return false; } strtype = mpd_tag_name(type); if (strtype == NULL) { mpd_error_code(&connection->error, MPD_ERROR_ARGUMENT); mpd_error_message(&connection->error, "invalid type specified"); return false; } len = 5+strlen(strtype)+1; connection->request = malloc(len); if (connection->request == NULL) { mpd_error_code(&connection->error, MPD_ERROR_OOM); return false; } snprintf(connection->request, len, "list %s", strtype); return true; }