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;
}
JSON_STATUS CPlaylistOperations::GetItems(const CStdString &method, ITransportLayer *transport, IClient *client, const Value &parameterObject, 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;
}