From 8d2725234e6271434d87ecaac23ef882850e649a Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 8 Aug 2012 00:44:58 +0200 Subject: DatabaseCommands: merge duplicate search/find code --- src/DatabaseCommands.cxx | 61 +++++++++++++++++------------------------------- src/command.c | 25 ++++++++------------ 2 files changed, 31 insertions(+), 55 deletions(-) diff --git a/src/DatabaseCommands.cxx b/src/DatabaseCommands.cxx index f54f0498d..e0449e9c8 100644 --- a/src/DatabaseCommands.cxx +++ b/src/DatabaseCommands.cxx @@ -56,11 +56,11 @@ handle_lsinfo2(struct client *client, int argc, char *argv[]) return COMMAND_RETURN_OK; } -enum command_return -handle_find(struct client *client, int argc, char *argv[]) +static enum command_return +handle_match(struct client *client, int argc, char *argv[], bool fold_case) { struct locate_item_list *list = - locate_item_list_parse(argv + 1, argc - 1, false); + locate_item_list_parse(argv + 1, argc - 1, fold_case); if (list == NULL) { command_error(client, ACK_ERROR_ARG, "incorrect arguments"); @@ -78,53 +78,22 @@ handle_find(struct client *client, int argc, char *argv[]) } enum command_return -handle_findadd(struct client *client, int argc, char *argv[]) +handle_find(struct client *client, int argc, char *argv[]) { - struct locate_item_list *list = - locate_item_list_parse(argv + 1, argc - 1, false); - if (list == NULL) { - command_error(client, ACK_ERROR_ARG, "incorrect arguments"); - return COMMAND_RETURN_ERROR; - } - - GError *error = NULL; - enum command_return ret = - findAddIn(client->player_control, "", list, &error) - ? COMMAND_RETURN_OK - : print_error(client, error); - - locate_item_list_free(list); - - return ret; + return handle_match(client, argc, argv, false); } enum command_return handle_search(struct client *client, int argc, char *argv[]) { - struct locate_item_list *list = - locate_item_list_parse(argv + 1, argc - 1, true); - - if (list == NULL) { - command_error(client, ACK_ERROR_ARG, "incorrect arguments"); - return COMMAND_RETURN_ERROR; - } - - GError *error = NULL; - enum command_return ret = findSongsIn(client, "", list, &error) - ? COMMAND_RETURN_OK - : print_error(client, error); - - locate_item_list_free(list); - - return ret; + return handle_match(client, argc, argv, true); } -enum command_return -handle_searchadd(struct client *client, int argc, char *argv[]) +static enum command_return +handle_match_add(struct client *client, int argc, char *argv[], bool fold_case) { struct locate_item_list *list = - locate_item_list_parse(argv + 1, argc - 1, true); - + locate_item_list_parse(argv + 1, argc - 1, fold_case); if (list == NULL) { command_error(client, ACK_ERROR_ARG, "incorrect arguments"); return COMMAND_RETURN_ERROR; @@ -141,6 +110,18 @@ handle_searchadd(struct client *client, int argc, char *argv[]) return ret; } +enum command_return +handle_findadd(struct client *client, int argc, char *argv[]) +{ + return handle_match_add(client, argc, argv, false); +} + +enum command_return +handle_searchadd(struct client *client, int argc, char *argv[]) +{ + return handle_match_add(client, argc, argv, true); +} + enum command_return handle_searchaddpl(struct client *client, int argc, char *argv[]) { diff --git a/src/command.c b/src/command.c index 8da5c76b9..adda734c9 100644 --- a/src/command.c +++ b/src/command.c @@ -674,10 +674,11 @@ handle_playlistid(struct client *client, int argc, char *argv[]) } static enum command_return -handle_playlistfind(struct client *client, int argc, char *argv[]) +handle_playlist_match(struct client *client, int argc, char *argv[], + bool fold_case) { struct locate_item_list *list = - locate_item_list_parse(argv + 1, argc - 1, false); + locate_item_list_parse(argv + 1, argc - 1, fold_case); if (list == NULL) { command_error(client, ACK_ERROR_ARG, "incorrect arguments"); @@ -692,21 +693,15 @@ handle_playlistfind(struct client *client, int argc, char *argv[]) } static enum command_return -handle_playlistsearch(struct client *client, int argc, char *argv[]) +handle_playlistfind(struct client *client, int argc, char *argv[]) { - struct locate_item_list *list = - locate_item_list_parse(argv + 1, argc - 1, true); - - if (list == NULL) { - command_error(client, ACK_ERROR_ARG, "incorrect arguments"); - return COMMAND_RETURN_ERROR; - } - - playlist_print_find(client, &g_playlist, list); - - locate_item_list_free(list); + return handle_playlist_match(client, argc, argv, false); +} - return COMMAND_RETURN_OK; +static enum command_return +handle_playlistsearch(struct client *client, int argc, char *argv[]) +{ + return handle_playlist_match(client, argc, argv, true); } static enum command_return -- cgit v1.2.3