diff --git a/src/screen_search.c b/src/screen_search.c
index 9742410d9b610277a2b0a6c97a64694f46b53a81..86c2bb171a74df7d335908e4325878146e77b60c 100644 (file)
--- a/src/screen_search.c
+++ b/src/screen_search.c
/* ncmpc (Ncurses MPD Client)
- * (c) 2004-2009 The Music Player Daemon Project
+ * (c) 2004-2010 The Music Player Daemon Project
* Project homepage: http://musicpd.org
* This program is free software; you can redistribute it and/or modify
enum {
SEARCH_URI = MPD_TAG_COUNT + 100,
+ SEARCH_ARTIST_TITLE
};
static const struct {
return -1;
}
-#define SEARCH_ARTIST_TITLE 999
-
typedef struct {
enum mpd_tag_type table;
const char *label;
{ MPD_TAG_TITLE, N_("Title") },
{ MPD_TAG_ARTIST, N_("Artist") },
{ MPD_TAG_ALBUM, N_("Album") },
- { SEARCH_URI, N_("file") },
+ { SEARCH_URI, N_("Filename") },
{ SEARCH_ARTIST_TITLE, N_("Artist + Title") },
{ 0, NULL }
};
static struct screen_browser browser;
+static const char *const help_text[] = {
+ "Quick - Enter a string and ncmpc will search according",
+ " to the current search mode (displayed above).",
+ "",
+ "Advanced - <tag>:<search term> [<tag>:<search term>...]",
+ " Example: artist:radiohead album:pablo honey",
+ "",
+ " Available tags: artist, album, title, track,",
+ " name, genre, date composer, performer, comment, file",
+ "",
+};
/* search info */
static const char *
-lw_search_help_callback(unsigned idx, G_GNUC_UNUSED bool *highlight,
- G_GNUC_UNUSED char** sc, G_GNUC_UNUSED void *data)
+lw_search_help_callback(unsigned idx, G_GNUC_UNUSED void *data)
{
- unsigned text_rows;
- static const char *text[] = {
- "Quick - Enter a string and ncmpc will search according",
- " to the current search mode (displayed above).",
- "",
- "Advanced - <tag>:<search term> [<tag>:<search term>...]",
- " Example: artist:radiohead album:pablo honey",
- "",
- " Available tags: artist, album, title, track,",
- " name, genre, date composer, performer, comment, file",
- "",
- NULL
- };
-
- text_rows=0;
- while (text[text_rows])
- text_rows++;
-
- if (idx < text_rows)
- return text[idx];
- return NULL;
+ assert(idx < G_N_ELEMENTS(help_text));
+
+ return help_text[idx];
}
static void
if (browser.filelist) {
filelist_free(browser.filelist);
browser.filelist = filelist_new();
+ list_window_set_length(browser.lw, 0);
}
if (clear_pattern && pattern) {
g_free(pattern);
mpd_command_list_end(connection);
list = filelist_new_recv(connection);
-
- if (list != NULL)
- filelist_sort_all(list, compare_filelistentry_format);
+ filelist_no_duplicates(list);
} else if (table == SEARCH_URI) {
mpd_search_db_songs(connection, exact_match);
mpd_search_add_uri_constraint(connection, MPD_OPERATOR_DEFAULT,
static struct filelist *
do_search(struct mpdclient *c, char *query)
{
+ struct mpd_connection *connection = mpdclient_get_connection(c);
struct filelist *fl;
- fl = search_advanced_query(c->connection, query);
+ fl = search_advanced_query(connection, query);
if (fl != NULL)
return fl;
- if (mpd_connection_get_error(c->connection) != MPD_ERROR_SUCCESS) {
+ if (mpd_connection_get_error(connection) != MPD_ERROR_SUCCESS) {
mpdclient_handle_error(c);
return NULL;
}
- fl = search_simple_query(c->connection, FALSE,
+ fl = search_simple_query(connection, FALSE,
mode[options.search_mode].table,
query);
if (fl == NULL)
browser.filelist = do_search(c, pattern);
if (browser.filelist == NULL)
browser.filelist = filelist_new();
+ list_window_set_length(browser.lw, filelist_length(browser.filelist));
screen_browser_sync_highlights(browser.filelist, &c->playlist);
- list_window_check_selected(browser.lw,
- filelist_length(browser.filelist));
}
static void
screen_search_init(WINDOW *w, int cols, int rows)
{
browser.lw = list_window_init(w, cols, rows);
+ list_window_set_length(browser.lw, G_N_ELEMENTS(help_text));
}
static void
static void
screen_search_resize(int cols, int rows)
{
- browser.lw->cols = cols;
- browser.lw->rows = rows;
+ list_window_resize(browser.lw, cols, rows);
}
static void
{
if (browser.filelist) {
browser.lw->hide_cursor = false;
- list_window_paint(browser.lw, browser_lw_callback, browser.filelist);
+ screen_browser_paint(&browser);
} else {
browser.lw->hide_cursor = true;
list_window_paint(browser.lw, lw_search_help_callback, NULL);
static void
screen_search_update(struct mpdclient *c)
{
- if (browser.filelist != NULL && c->events & MPD_IDLE_PLAYLIST) {
+ if (browser.filelist != NULL && c->events & MPD_IDLE_QUEUE) {
screen_browser_sync_highlights(browser.filelist, &c->playlist);
search_repaint();
}