Adding playlistfind and playlistsearch commands for searching the current
playlist. git-svn-id: https://svn.musicpd.org/mpd/trunk@5420 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
parent
1ae3bdb7e6
commit
6e64bac7b6
@ -28,7 +28,6 @@
|
|||||||
#include "permission.h"
|
#include "permission.h"
|
||||||
#include "buffer2array.h"
|
#include "buffer2array.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "dbUtils.h"
|
|
||||||
#include "tag.h"
|
#include "tag.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
@ -94,6 +93,8 @@
|
|||||||
#define COMMAND_NOTCOMMANDS "notcommands"
|
#define COMMAND_NOTCOMMANDS "notcommands"
|
||||||
#define COMMAND_PLAYLISTCLEAR "playlistclear"
|
#define COMMAND_PLAYLISTCLEAR "playlistclear"
|
||||||
#define COMMAND_PLAYLISTADD "playlistadd"
|
#define COMMAND_PLAYLISTADD "playlistadd"
|
||||||
|
#define COMMAND_PLAYLISTFIND "playlistfind"
|
||||||
|
#define COMMAND_PLAYLISTSEARCH "playlistsearch"
|
||||||
|
|
||||||
#define COMMAND_STATUS_VOLUME "volume"
|
#define COMMAND_STATUS_VOLUME "volume"
|
||||||
#define COMMAND_STATUS_STATE "state"
|
#define COMMAND_STATUS_STATE "state"
|
||||||
@ -510,6 +511,44 @@ static int handleSearch(int fd, int *permission, int argc, char *argv[])
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int handlePlaylistFind(int fd, int *permission, int argc, char *argv[])
|
||||||
|
{
|
||||||
|
LocateTagItem *items;
|
||||||
|
int numItems = newLocateTagItemArrayFromArgArray(argv + 1,
|
||||||
|
argc - 1,
|
||||||
|
&items);
|
||||||
|
|
||||||
|
if (numItems <= 0) {
|
||||||
|
commandError(fd, ACK_ERROR_ARG, "incorrect arguments");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
findSongsInPlaylist(fd, numItems, items);
|
||||||
|
|
||||||
|
freeLocateTagItemArray(numItems, items);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int handlePlaylistSearch(int fd, int *permission, int argc, char *argv[])
|
||||||
|
{
|
||||||
|
LocateTagItem *items;
|
||||||
|
int numItems = newLocateTagItemArrayFromArgArray(argv + 1,
|
||||||
|
argc - 1,
|
||||||
|
&items);
|
||||||
|
|
||||||
|
if (numItems <= 0) {
|
||||||
|
commandError(fd, ACK_ERROR_ARG, "incorrect arguments");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
searchForSongsInPlaylist(fd, numItems, items);
|
||||||
|
|
||||||
|
freeLocateTagItemArray(numItems, items);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int listHandleUpdate(int fd,
|
static int listHandleUpdate(int fd,
|
||||||
int *permission,
|
int *permission,
|
||||||
int argc,
|
int argc,
|
||||||
@ -1002,6 +1041,8 @@ void initCommands(void)
|
|||||||
addCommand(COMMAND_NOTCOMMANDS, PERMISSION_NONE, 0, 0, handleNotcommands, NULL);
|
addCommand(COMMAND_NOTCOMMANDS, PERMISSION_NONE, 0, 0, handleNotcommands, NULL);
|
||||||
addCommand(COMMAND_PLAYLISTCLEAR, PERMISSION_CONTROL, 1, 1, handlePlaylistClear, NULL);
|
addCommand(COMMAND_PLAYLISTCLEAR, PERMISSION_CONTROL, 1, 1, handlePlaylistClear, NULL);
|
||||||
addCommand(COMMAND_PLAYLISTADD, PERMISSION_CONTROL, 2, 2, handlePlaylistAdd, NULL);
|
addCommand(COMMAND_PLAYLISTADD, PERMISSION_CONTROL, 2, 2, handlePlaylistAdd, NULL);
|
||||||
|
addCommand(COMMAND_PLAYLISTFIND, PERMISSION_READ, 2, -1, handlePlaylistFind, NULL);
|
||||||
|
addCommand(COMMAND_PLAYLISTSEARCH, PERMISSION_READ, 2, -1, handlePlaylistSearch, NULL);
|
||||||
|
|
||||||
sortList(commandList);
|
sortList(commandList);
|
||||||
}
|
}
|
||||||
|
@ -1679,3 +1679,36 @@ int loadPlaylist(int fd, char *utf8file)
|
|||||||
{
|
{
|
||||||
return PlaylistIterFunc(fd, utf8file, PlaylistLoadIterFunc);
|
return PlaylistIterFunc(fd, utf8file, PlaylistLoadIterFunc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void searchForSongsInPlaylist(int fd, int numItems, LocateTagItem * items)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
char **originalNeedles = xmalloc(numItems * sizeof(char *));
|
||||||
|
|
||||||
|
for (i = 0; i < numItems; i++) {
|
||||||
|
originalNeedles[i] = items[i].needle;
|
||||||
|
items[i].needle = strDupToUpper(originalNeedles[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < playlist.length; i++) {
|
||||||
|
if (strstrSearchTags(playlist.songs[i], numItems, items))
|
||||||
|
printPlaylistSongInfo(fd, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < numItems; i++) {
|
||||||
|
free(items[i].needle);
|
||||||
|
items[i].needle = originalNeedles[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
free(originalNeedles);
|
||||||
|
}
|
||||||
|
|
||||||
|
void findSongsInPlaylist(int fd, int numItems, LocateTagItem * items)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < playlist.length; i++) {
|
||||||
|
if (tagItemsFoundAndMatches(playlist.songs[i], numItems, items))
|
||||||
|
printPlaylistSongInfo(fd, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -21,8 +21,7 @@
|
|||||||
|
|
||||||
#include "../config.h"
|
#include "../config.h"
|
||||||
|
|
||||||
#include "song.h"
|
#include "dbUtils.h"
|
||||||
#include "mpd_types.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -122,4 +121,8 @@ int playlistChangesPosId(int fd, mpd_uint32 version);
|
|||||||
|
|
||||||
int PlaylistInfo(int fd, char *utf8file, int detail);
|
int PlaylistInfo(int fd, char *utf8file, int detail);
|
||||||
|
|
||||||
|
void searchForSongsInPlaylist(int fd, int numItems, LocateTagItem * items);
|
||||||
|
|
||||||
|
void findSongsInPlaylist(int fd, int numItems, LocateTagItem * items);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user