diff --git a/src/screen_search.c b/src/screen_search.c
index 7c35fd2fa44da1c86a0e60e460fadbac7a5956aa..30be533baf66d63875173637ce0f0a5858e8035a 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-2017 The Music Player Daemon Project
* Project homepage: http://musicpd.org
-
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
-
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
-
+ *
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
+ */
#include "screen_search.h"
#include "screen_interface.h"
-#include "screen_message.h"
+#include "screen_status.h"
#include "screen.h"
#include "i18n.h"
#include "options.h"
enum {
SEARCH_URI = MPD_TAG_COUNT + 100,
+ SEARCH_ARTIST_TITLE
};
static const struct {
static int
search_get_tag_id(const char *name)
{
- unsigned i;
-
if (g_ascii_strcasecmp(name, "file") == 0 ||
strcasecmp(name, _("file")) == 0)
return SEARCH_URI;
- for (i = 0; i < MPD_TAG_COUNT; ++i)
+ for (unsigned i = 0; i < MPD_TAG_COUNT; ++i)
if (search_tag[i].name != NULL &&
(strcasecmp(search_tag[i].name, name) == 0 ||
strcasecmp(search_tag[i].localname, name) == 0))
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 }
};
/* 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, gcc_unused void *data)
{
assert(idx < G_N_ELEMENTS(help_text));
return help_text[idx];
}
-static void
-screen_search_paint(void);
-
-static void
-search_repaint(void)
-{
- screen_search_paint();
- wrefresh(browser.lw->w);
-}
-
/* sanity check search mode value */
static void
search_check_mode(void)
static struct filelist *
search_advanced_query(struct mpd_connection *connection, char *query)
{
- int i,j;
- char **strv;
- int table[10];
- char *arg[10];
- struct filelist *fl = NULL;
-
advanced_search_mode = FALSE;
if (strchr(query, ':') == NULL)
return NULL;
- strv = g_strsplit_set(query, ": ", 0);
+ char **strv = g_strsplit_set(query, ": ", 0);
+ int table[10];
memset(table, 0, 10*sizeof(int));
+
+ char *arg[10];
memset(arg, 0, 10*sizeof(char *));
- i=0;
- j=0;
+ int i = 0, j = 0;
while (strv[i] && strlen(strv[i]) > 0 && i < 9) {
int id = search_get_tag_id(strv[i]);
if (id == -1) {
}
mpd_search_commit(connection);
- fl = filelist_new_recv(connection);
+ struct filelist *fl = filelist_new_recv(connection);
if (!mpd_response_finish(connection)) {
filelist_free(fl);
fl = NULL;
do_search(struct mpdclient *c, char *query)
{
struct mpd_connection *connection = mpdclient_get_connection(c);
- struct filelist *fl;
+ if (connection == NULL)
+ return NULL;
- fl = search_advanced_query(connection, query);
+ struct filelist *fl = search_advanced_query(connection, query);
if (fl != NULL)
return fl;
}
static void
-screen_search_init(WINDOW *w, int cols, int rows)
+screen_search_init(WINDOW *w, unsigned cols, unsigned rows)
{
browser.lw = list_window_init(w, cols, rows);
+ if (options.search_format != NULL) {
+ browser.song_format = options.search_format;
+ } else {
+ browser.song_format = options.list_format;
+ }
list_window_set_length(browser.lw, G_N_ELEMENTS(help_text));
}
}
static void
-screen_search_open(G_GNUC_UNUSED struct mpdclient *c)
+screen_search_open(gcc_unused struct mpdclient *c)
{
// if( pattern==NULL )
// search_new(screen, c);
// else
screen_status_printf(_("Press %s for a new search"),
- get_key_names(CMD_SCREEN_SEARCH,0));
+ get_key_names(CMD_SCREEN_SEARCH, false));
search_check_mode();
}
static void
-screen_search_resize(int cols, int rows)
+screen_search_resize(unsigned cols, unsigned rows)
{
list_window_resize(browser.lw, cols, rows);
}
{
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);
_(mode[options.search_mode].label));
else
g_snprintf(str, size, _("Search: Press %s for a new search [%s]"),
- get_key_names(CMD_SCREEN_SEARCH,0),
+ get_key_names(CMD_SCREEN_SEARCH, false),
_(mode[options.search_mode].label));
return str;
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();
+ screen_search_paint();
}
}
options.search_mode = 0;
screen_status_printf(_("Search mode: %s"),
_(mode[options.search_mode].label));
- /* continue and update... */
+ /* fall through */
case CMD_SCREEN_UPDATE:
screen_search_reload(c);
- search_repaint();
+ screen_search_paint();
return true;
case CMD_SCREEN_SEARCH:
search_new(c);
- search_repaint();
+ screen_search_paint();
return true;
case CMD_CLEAR:
search_clear(true);
list_window_reset(browser.lw);
- search_repaint();
+ screen_search_paint();
return true;
default:
if (browser.filelist != NULL &&
browser_cmd(&browser, c, cmd)) {
if (screen_is_visible(&screen_search))
- search_repaint();
+ screen_search_paint();
return true;
}