return OK;
}
-bool CPlaylistOperations::CheckMediaParameter(int playlist, const CVariant ¶meterObject)
+bool CPlaylistOperations::CheckMediaParameter(int playlist, const CVariant &itemObject)
{
- if (parameterObject["item"].isMember("media") && parameterObject["item"]["media"].asString().compare("files") != 0)
+ if (itemObject.isMember("media") && itemObject["media"].asString().compare("files") != 0)
{
- if (playlist == PLAYLIST_VIDEO && parameterObject["item"]["media"].asString().compare("video") != 0)
+ if (playlist == PLAYLIST_VIDEO && itemObject["media"].asString().compare("video") != 0)
return false;
- if (playlist == PLAYLIST_MUSIC && parameterObject["item"]["media"].asString().compare("music") != 0)
+ if (playlist == PLAYLIST_MUSIC && itemObject["media"].asString().compare("music") != 0)
return false;
- if (playlist == PLAYLIST_PICTURE && parameterObject["item"]["media"].asString().compare("video") != 0 && parameterObject["item"]["media"].asString().compare("pictures") != 0)
+ if (playlist == PLAYLIST_PICTURE && itemObject["media"].asString().compare("video") != 0 && itemObject["media"].asString().compare("pictures") != 0)
return false;
}
return true;
JSONRPC_STATUS CPlaylistOperations::Add(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result)
{
int playlist = GetPlaylist(parameterObject["playlistid"]);
- CFileItemList list;
- CVariant params = parameterObject;
- if (!CheckMediaParameter(playlist, parameterObject))
+ CGUIWindowSlideShow *slideshow = NULL;
+ if (playlist == PLAYLIST_PICTURE)
+ {
+ slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW);
+ if (slideshow == NULL)
+ return FailedToExecute;
+ }
+
+ CFileItemList list;
+ if (!HandleItemsParameter(playlist, parameterObject["item"], list))
return InvalidParams;
- CGUIWindowSlideShow *slideshow = NULL;
switch (playlist)
{
case PLAYLIST_VIDEO:
case PLAYLIST_MUSIC:
- if (playlist == PLAYLIST_VIDEO)
- params["item"]["media"] = "video";
- else if (playlist == PLAYLIST_MUSIC)
- params["item"]["media"] = "music";
-
- if (!FillFileItemList(params["item"], list))
- return InvalidParams;
-
CApplicationMessenger::Get().PlayListPlayerAdd(playlist, list);
-
break;
case PLAYLIST_PICTURE:
- slideshow = (CGUIWindowSlideShow*)g_windowManager.GetWindow(WINDOW_SLIDESHOW);
- if (!slideshow)
- return FailedToExecute;
- if (!parameterObject["item"].isMember("media"))
- params["item"]["media"] = "pictures";
- if (!FillFileItemList(params["item"], list))
- return InvalidParams;
-
for (int index = 0; index < list.Size(); index++)
{
CPictureInfoTag picture = CPictureInfoTag();
slideshow->Add(list[index].get());
}
break;
+
+ default:
+ return InvalidParams;
}
NotifyAll();
if (playlist == PLAYLIST_PICTURE)
return FailedToExecute;
- if (!CheckMediaParameter(playlist, parameterObject))
- return InvalidParams;
-
CFileItemList list;
- CVariant params = parameterObject;
- if (playlist == PLAYLIST_VIDEO)
- params["item"]["media"] = "video";
- else if (playlist == PLAYLIST_MUSIC)
- params["item"]["media"] = "music";
- else
- return FailedToExecute;
-
- if (!FillFileItemList(params["item"], list))
+ if (!HandleItemsParameter(playlist, parameterObject["item"], list))
return InvalidParams;
CApplicationMessenger::Get().PlayListPlayerInsert(GetPlaylist(parameterObject["playlistid"]), list, (int)parameterObject["position"].asInteger());
return OK;
}
+
+bool CPlaylistOperations::HandleItemsParameter(int playlistid, const CVariant &itemParam, CFileItemList &items)
+{
+ vector<CVariant> vecItems;
+ if (itemParam.isArray())
+ vecItems.assign(itemParam.begin_array(), itemParam.end_array());
+ else
+ vecItems.push_back(itemParam);
+
+ bool success = false;
+ for (vector<CVariant>::iterator itemIt = vecItems.begin(); itemIt != vecItems.end(); ++itemIt)
+ {
+ if (!CheckMediaParameter(playlistid, *itemIt))
+ continue;
+
+ switch (playlistid)
+ {
+ case PLAYLIST_VIDEO:
+ (*itemIt)["media"] = "video";
+ break;
+ case PLAYLIST_MUSIC:
+ (*itemIt)["media"] = "music";
+ break;
+ case PLAYLIST_PICTURE:
+ (*itemIt)["media"] = "pictures";
+ break;
+ }
+
+ success |= FillFileItemList(*itemIt, items);
+ }
+
+ return success;
+}
namespace JSONRPC
{
const char* const JSONRPC_SERVICE_ID = "http://xbmc.org/jsonrpc/ServiceDescription.json";
- const char* const JSONRPC_SERVICE_VERSION = "6.10.0";
+ const char* const JSONRPC_SERVICE_VERSION = "6.11.0";
const char* const JSONRPC_SERVICE_DESCRIPTION = "JSON-RPC API of XBMC";
const char* const JSONRPC_SERVICE_TYPES[] = {
"\"permission\": \"ControlPlayback\","
"\"params\": ["
"{ \"name\": \"playlistid\", \"$ref\": \"Playlist.Id\", \"required\": true },"
- "{ \"name\": \"item\", \"$ref\": \"Playlist.Item\", \"required\": true }"
+ "{ \"name\": \"item\","
+ "\"type\": ["
+ "{ \"$ref\": \"Playlist.Item\", \"required\": true },"
+ "{ \"type\": \"array\", \"items\": { \"$ref\": \"Playlist.Item\" }, \"required\": true }"
+ "],"
+ "\"required\": true }"
"],"
"\"returns\": \"string\""
"}",
"\"params\": ["
"{ \"name\": \"playlistid\", \"$ref\": \"Playlist.Id\", \"required\": true },"
"{ \"name\": \"position\", \"$ref\": \"Playlist.Position\", \"required\": true },"
- "{ \"name\": \"item\", \"$ref\": \"Playlist.Item\", \"required\": true }"
+ "{ \"name\": \"item\","
+ "\"type\": ["
+ "{ \"$ref\": \"Playlist.Item\", \"required\": true },"
+ "{ \"type\": \"array\", \"items\": { \"$ref\": \"Playlist.Item\" }, \"required\": true }"
+ "],"
+ "\"required\": true }"
"],"
"\"returns\": \"string\""
"}",
"permission": "ControlPlayback",
"params": [
{ "name": "playlistid", "$ref": "Playlist.Id", "required": true },
- { "name": "item", "$ref": "Playlist.Item", "required": true }
+ { "name": "item",
+ "type": [
+ { "$ref": "Playlist.Item", "required": true },
+ { "type": "array", "items": { "$ref": "Playlist.Item" }, "required": true }
+ ],
+ "required": true }
],
"returns": "string"
},
"params": [
{ "name": "playlistid", "$ref": "Playlist.Id", "required": true },
{ "name": "position", "$ref": "Playlist.Position", "required": true },
- { "name": "item", "$ref": "Playlist.Item", "required": true }
+ { "name": "item",
+ "type": [
+ { "$ref": "Playlist.Item", "required": true },
+ { "type": "array", "items": { "$ref": "Playlist.Item" }, "required": true }
+ ],
+ "required": true }
],
"returns": "string"
},