command: add "findadd" command.
This commit is contained in:
parent
1e56c7b862
commit
df0c26a394
1
NEWS
1
NEWS
|
@ -3,6 +3,7 @@ ver 0.16 (20??/??/??)
|
|||
- send song modification time to client
|
||||
- added "update" idle event
|
||||
- removed the deprecated "volume" command
|
||||
- added the "findadd" command
|
||||
* input:
|
||||
- lastfm: use metadata
|
||||
* tags:
|
||||
|
|
|
@ -1100,6 +1100,23 @@ OK
|
|||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry id="command_findadd">
|
||||
<term>
|
||||
<cmdsynopsis>
|
||||
<command>findadd</command>
|
||||
<arg choice="req"><replaceable>TYPE</replaceable></arg>
|
||||
<arg choice="req"><replaceable>WHAT</replaceable></arg>
|
||||
</cmdsynopsis>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Finds songs in the db that are exactly
|
||||
<varname>WHAT</varname> and adds them to current playlist.
|
||||
<varname>TYPE</varname> can be any tag supported by MPD.
|
||||
<varname>WHAT</varname> is what to find.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry id="command_list">
|
||||
<term>
|
||||
<cmdsynopsis>
|
||||
|
|
|
@ -869,6 +869,30 @@ handle_find(struct client *client, int argc, char *argv[])
|
|||
return ret;
|
||||
}
|
||||
|
||||
static enum command_return
|
||||
handle_findadd(struct client *client, int argc, char *argv[])
|
||||
{
|
||||
int ret;
|
||||
struct locate_item_list *list =
|
||||
locate_item_list_parse(argv + 1, argc - 1);
|
||||
if (list == NULL || list->length == 0) {
|
||||
if (list != NULL)
|
||||
locate_item_list_free(list);
|
||||
|
||||
command_error(client, ACK_ERROR_ARG, "incorrect arguments");
|
||||
return COMMAND_RETURN_ERROR;
|
||||
}
|
||||
|
||||
ret = findAddIn(client, NULL, list);
|
||||
if (ret == -1)
|
||||
command_error(client, ACK_ERROR_NO_EXIST,
|
||||
"directory or file not found");
|
||||
|
||||
locate_item_list_free(list);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static enum command_return
|
||||
handle_search(struct client *client, int argc, char *argv[])
|
||||
{
|
||||
|
@ -1671,6 +1695,7 @@ static const struct command commands[] = {
|
|||
{ "disableoutput", PERMISSION_ADMIN, 1, 1, handle_disableoutput },
|
||||
{ "enableoutput", PERMISSION_ADMIN, 1, 1, handle_enableoutput },
|
||||
{ "find", PERMISSION_READ, 2, -1, handle_find },
|
||||
{ "findadd", PERMISSION_READ, 2, -1, handle_findadd},
|
||||
{ "idle", PERMISSION_READ, 0, -1, handle_idle },
|
||||
{ "kill", PERMISSION_ADMIN, -1, -1, handle_kill },
|
||||
{ "list", PERMISSION_READ, 1, -1, handle_list },
|
||||
|
|
|
@ -199,6 +199,28 @@ int addAllInToStoredPlaylist(const char *name, const char *utf8file)
|
|||
return db_walk(name, directoryAddSongToStoredPlaylist, NULL, &data);
|
||||
}
|
||||
|
||||
static int
|
||||
findAddInDirectory(struct song *song, void *_data)
|
||||
{
|
||||
struct search_data *data = _data;
|
||||
|
||||
if (locate_song_match(song, data->criteria))
|
||||
return directoryAddSongToPlaylist(song, data);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int findAddIn(struct client *client, const char *name,
|
||||
const struct locate_item_list *criteria)
|
||||
{
|
||||
struct search_data data;
|
||||
|
||||
data.client = client;
|
||||
data.criteria = criteria;
|
||||
|
||||
return db_walk(name, findAddInDirectory, NULL, &data);
|
||||
}
|
||||
|
||||
static int
|
||||
directoryPrintSongInfo(struct song *song, void *data)
|
||||
{
|
||||
|
|
|
@ -39,6 +39,10 @@ int
|
|||
findSongsIn(struct client *client, const char *name,
|
||||
const struct locate_item_list *criteria);
|
||||
|
||||
int
|
||||
findAddIn(struct client *client, const char *name,
|
||||
const struct locate_item_list *criteria);
|
||||
|
||||
int
|
||||
searchStatsForSongsIn(struct client *client, const char *name,
|
||||
const struct locate_item_list *criteria);
|
||||
|
|
Loading…
Reference in New Issue