aboutsummaryrefslogtreecommitdiffstats
path: root/src/command.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/command.c')
-rw-r--r--src/command.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/command.c b/src/command.c
index 84a30db2b..83a8d3a2d 100644
--- a/src/command.c
+++ b/src/command.c
@@ -98,6 +98,9 @@
#define COMMAND_PLAYLISTSEARCH "playlistsearch"
#define COMMAND_PLAYLISTMOVE "playlistmove"
#define COMMAND_PLAYLISTDELETE "playlistdelete"
+#define COMMAND_QUEUEID "queueid"
+#define COMMAND_DEQUEUE "dequeue"
+#define COMMAND_QUEUEINFO "queueinfo"
#define COMMAND_TAGTYPES "tagtypes"
#define COMMAND_COUNT "count"
#define COMMAND_RENAME "rename"
@@ -107,6 +110,7 @@
#define COMMAND_STATUS_REPEAT "repeat"
#define COMMAND_STATUS_RANDOM "random"
#define COMMAND_STATUS_PLAYLIST "playlist"
+#define COMMAND_STATUS_PLAYLIST_QUEUE "playlistqueue"
#define COMMAND_STATUS_PLAYLIST_LENGTH "playlistlength"
#define COMMAND_STATUS_SONG "song"
#define COMMAND_STATUS_SONGID "songid"
@@ -278,6 +282,8 @@ static int commandStatus(int fd, int *permission, int argc, char *argv[])
getPlaylistRandomStatus());
fdprintf(fd, "%s: %li\n", COMMAND_STATUS_PLAYLIST,
getPlaylistVersion());
+ fdprintf(fd, "%s: %li\n", COMMAND_STATUS_PLAYLIST_QUEUE,
+ getPlaylistQueueVersion());
fdprintf(fd, "%s: %i\n", COMMAND_STATUS_PLAYLIST_LENGTH,
getPlaylistLength());
fdprintf(fd, "%s: %i\n", COMMAND_STATUS_CROSSFADE,
@@ -625,6 +631,47 @@ static int handlePlaylistMove(int fd, int *permission, int argc, char *argv[])
return moveSongInStoredPlaylistByPath(fd, playlist, from, to);
}
+static int handleQueueInfo(int fd, int *permission, int argc, char *argv[])
+{
+ return playlistQueueInfo(fd);
+}
+
+static int handleQueueId(int fd, int *permission, int argc, char *argv[])
+{
+ int id, position = -1;
+ char *test;
+
+ id = strtol(argv[1], &test, 10);
+ if (*test != '\0') {
+ commandError(fd, ACK_ERROR_ARG,
+ "\"%s\" is not a integer", argv[1]);
+ return -1;
+ }
+ if (argc == 3) {
+ position = strtol(argv[2], &test, 10);
+ if (*test != '\0') {
+ commandError(fd, ACK_ERROR_ARG,
+ "\"%s\" is not a integer", argv[2]);
+ return -1;
+ }
+ }
+ return addToPlaylistQueueById(fd, id, position);
+}
+
+static int handleDequeue(int fd, int *permission, int argc, char *argv[])
+{
+ int pos;
+ char *test;
+
+ pos = strtol(argv[1], &test, 10);
+ if (*test != '\0') {
+ commandError(fd, ACK_ERROR_ARG,
+ "\"%s\" is not a integer", argv[1]);
+ return -1;
+ }
+ return deleteFromPlaylistQueue(fd, pos);
+}
+
static int listHandleUpdate(int fd,
int *permission,
int argc,
@@ -1121,6 +1168,9 @@ void initCommands(void)
addCommand(COMMAND_PLAYLISTSEARCH, PERMISSION_READ, 2, -1, handlePlaylistSearch, NULL);
addCommand(COMMAND_PLAYLISTMOVE, PERMISSION_CONTROL, 3, 3, handlePlaylistMove, NULL);
addCommand(COMMAND_PLAYLISTDELETE, PERMISSION_CONTROL, 2, 2, handlePlaylistDelete, NULL);
+ addCommand(COMMAND_QUEUEINFO, PERMISSION_CONTROL, 0, 0, handleQueueInfo, NULL);
+ addCommand(COMMAND_QUEUEID, PERMISSION_CONTROL, 1, 2, handleQueueId, NULL);
+ addCommand(COMMAND_DEQUEUE, PERMISSION_CONTROL, 1, 1, handleDequeue, NULL);
addCommand(COMMAND_TAGTYPES, PERMISSION_READ, 0, 0, handleTagTypes, NULL);
addCommand(COMMAND_COUNT, PERMISSION_READ, 2, -1, handleCount, NULL);
addCommand(COMMAND_RENAME, PERMISSION_CONTROL, 2, 2, handleRename, NULL);