bool CPlaylistOperations::FillFileItemList(const Value ¶meterObject, CFileItemList &list) { bool found = false; if (parameterObject["playlist"].isMember(PLAYLIST_MEMBER_FILE) && parameterObject["playlist"][PLAYLIST_MEMBER_FILE].isString()) { CStdString file = parameterObject["playlist"][PLAYLIST_MEMBER_FILE].asString(); CPlayListPtr playlist = CPlayListPtr(CPlayListFactory::Create(file)); if (playlist && playlist->Load(file)) { for (int i = 0; i < playlist->size(); i++) list.Add((*playlist)[i]); found = true; } } CSingleLock lock(VirtualCriticalSection); if (parameterObject["playlist"].isMember(PLAYLIST_MEMBER_VIRTUAL) && parameterObject["playlist"][PLAYLIST_MEMBER_VIRTUAL].isString()) { CStdString id = parameterObject["playlist"][PLAYLIST_MEMBER_VIRTUAL].asString(); CPlayListPtr playlist = VirtualPlaylists[id]; if (playlist) { for (int i = 0; i < playlist->size(); i++) list.Add((*playlist)[i]); found = true; } } return found; }
JSON_STATUS CPlaylistOperations::Swap(const CStdString &method, ITransportLayer *transport, IClient *client, const Value ¶meterObject, Value &result) { CSingleLock lock(VirtualCriticalSection); CPlayListPtr playlist = GetPlaylist(parameterObject); if (playlist && playlist->Swap(parameterObject["item1"].asInt(), parameterObject["item2"].asInt())) return ACK; return InvalidParams; }
JSON_STATUS CPlaylistOperations::UnShuffle(const CStdString &method, ITransportLayer *transport, IClient *client, const Value ¶meterObject, Value &result) { CSingleLock lock(VirtualCriticalSection); CPlayListPtr playlist = GetPlaylist(parameterObject); if (playlist) { playlist->UnShuffle(); return ACK; } return InvalidParams; }
CPlayListPtr CPlaylistOperations::GetPlaylist(const Value ¶meterObject) { if (parameterObject["playlist"].isMember(PLAYLIST_MEMBER_VIRTUAL) && parameterObject["playlist"][PLAYLIST_MEMBER_VIRTUAL].isString()) { CStdString id = parameterObject["playlist"][PLAYLIST_MEMBER_VIRTUAL].asString(); return VirtualPlaylists[id]; } else if (parameterObject["playlist"].isMember(PLAYLIST_MEMBER_FILE) && parameterObject["playlist"][PLAYLIST_MEMBER_FILE].isString()) { CStdString file = parameterObject["playlist"][PLAYLIST_MEMBER_FILE].asString(); CPlayListPtr playlist = CPlayListPtr(CPlayListFactory::Create(file)); if (playlist && playlist->Load(file)) return playlist; } return CPlayListPtr(); }
JSON_STATUS CPlaylistOperations::Remove(const CStdString &method, ITransportLayer *transport, IClient *client, const Value ¶meterObject, Value &result) { CSingleLock lock(VirtualCriticalSection); CPlayListPtr playlist = GetPlaylist(parameterObject); if (playlist) { if (parameterObject["item"].isInt()) playlist->Remove(parameterObject["item"].asInt()); else if (parameterObject["item"].isString()) playlist->Remove(parameterObject["item"].asString()); return ACK; } return InvalidParams; }
JSON_STATUS CPlaylistOperations::Add(const CStdString &method, ITransportLayer *transport, IClient *client, const Value ¶meterObject, Value &result) { CSingleLock lock(VirtualCriticalSection); CPlayListPtr playlist = GetPlaylist(parameterObject); //parameterObject.removeMember(PLAYLIST_MEMBER_VIRTUAL); if (playlist) { CFileItemList list; if (CFileItemHandler::FillFileItemList(parameterObject, list) && list.Size() > 0) playlist->Add(list); return ACK; } return InvalidParams; }
JSON_STATUS CPlaylistOperations::Create(const CStdString &method, ITransportLayer *transport, IClient *client, const Value ¶meterObject, Value &result) { if (!(parameterObject.isString() || parameterObject.isNull() || parameterObject.isObject())) return InvalidParams; CStdString file = ""; CStdString id = ""; if (parameterObject.isObject()) { if (parameterObject.isMember(PLAYLIST_MEMBER_FILE) && parameterObject[PLAYLIST_MEMBER_FILE].isString()) file = parameterObject[PLAYLIST_MEMBER_FILE].asString(); if (parameterObject.isMember(PLAYLIST_MEMBER_VIRTUAL) && parameterObject[PLAYLIST_MEMBER_VIRTUAL].isString()) id = parameterObject[PLAYLIST_MEMBER_VIRTUAL].asString(); } CPlayListPtr playlist; if (file.size() > 0) { CPlayListPtr playlist = CPlayListPtr(CPlayListFactory::Create(file)); if (playlist == NULL || !playlist->Load(file)) return playlist == NULL ? InvalidParams : InternalError; } else playlist = CPlayListPtr(new CPlayList()); if (id.size() == 0) { do { id = StringUtils::CreateUUID(); } while (VirtualPlaylists.find(id) != VirtualPlaylists.end()); } CSingleLock lock(VirtualCriticalSection); VirtualPlaylists[id] = playlist; result[PLAYLIST_MEMBER_VIRTUAL] = id; return OK; }
JSON_STATUS CPlaylistOperations::GetItems(const CStdString &method, ITransportLayer *transport, IClient *client, const Value ¶meterObject, Value &result) { CSingleLock lock(VirtualCriticalSection); CPlayListPtr playlist = GetPlaylist(parameterObject); if (playlist) { CFileItemList items; for (int i = 0; i < playlist->size(); i++) items.Add((*playlist)[i]); CStdString name = playlist->GetName(); if (!name.IsEmpty()) result["name"] = playlist->GetName(); HandleFileItemList(NULL, true, "items", items, parameterObject, result); return OK; } return InvalidParams; }