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
|
- send song modification time to client
|
||||||
- added "update" idle event
|
- added "update" idle event
|
||||||
- removed the deprecated "volume" command
|
- removed the deprecated "volume" command
|
||||||
|
- added the "findadd" command
|
||||||
* input:
|
* input:
|
||||||
- lastfm: use metadata
|
- lastfm: use metadata
|
||||||
* tags:
|
* tags:
|
||||||
|
|
|
@ -1100,6 +1100,23 @@ OK
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</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">
|
<varlistentry id="command_list">
|
||||||
<term>
|
<term>
|
||||||
<cmdsynopsis>
|
<cmdsynopsis>
|
||||||
|
|
|
@ -869,6 +869,30 @@ handle_find(struct client *client, int argc, char *argv[])
|
||||||
return ret;
|
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
|
static enum command_return
|
||||||
handle_search(struct client *client, int argc, char *argv[])
|
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 },
|
{ "disableoutput", PERMISSION_ADMIN, 1, 1, handle_disableoutput },
|
||||||
{ "enableoutput", PERMISSION_ADMIN, 1, 1, handle_enableoutput },
|
{ "enableoutput", PERMISSION_ADMIN, 1, 1, handle_enableoutput },
|
||||||
{ "find", PERMISSION_READ, 2, -1, handle_find },
|
{ "find", PERMISSION_READ, 2, -1, handle_find },
|
||||||
|
{ "findadd", PERMISSION_READ, 2, -1, handle_findadd},
|
||||||
{ "idle", PERMISSION_READ, 0, -1, handle_idle },
|
{ "idle", PERMISSION_READ, 0, -1, handle_idle },
|
||||||
{ "kill", PERMISSION_ADMIN, -1, -1, handle_kill },
|
{ "kill", PERMISSION_ADMIN, -1, -1, handle_kill },
|
||||||
{ "list", PERMISSION_READ, 1, -1, handle_list },
|
{ "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);
|
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
|
static int
|
||||||
directoryPrintSongInfo(struct song *song, void *data)
|
directoryPrintSongInfo(struct song *song, void *data)
|
||||||
{
|
{
|
||||||
|
|
|
@ -39,6 +39,10 @@ int
|
||||||
findSongsIn(struct client *client, const char *name,
|
findSongsIn(struct client *client, const char *name,
|
||||||
const struct locate_item_list *criteria);
|
const struct locate_item_list *criteria);
|
||||||
|
|
||||||
|
int
|
||||||
|
findAddIn(struct client *client, const char *name,
|
||||||
|
const struct locate_item_list *criteria);
|
||||||
|
|
||||||
int
|
int
|
||||||
searchStatsForSongsIn(struct client *client, const char *name,
|
searchStatsForSongsIn(struct client *client, const char *name,
|
||||||
const struct locate_item_list *criteria);
|
const struct locate_item_list *criteria);
|
||||||
|
|
Loading…
Reference in New Issue