bool CPlaylistOperations::FillFileItemList(const Value &parameterObject, 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;
}
CPlayListPtr CPlaylistOperations::GetPlaylist(const Value &parameterObject)
{
  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::Create(const CStdString &method, ITransportLayer *transport, IClient *client, const Value &parameterObject, 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;
}