bool CPlaylistDirectory::GetDirectory(const CURL& url, CFileItemList &items) { int playlistTyp=PLAYLIST_NONE; if (url.IsProtocol("playlistmusic")) playlistTyp=PLAYLIST_MUSIC; else if (url.IsProtocol("playlistvideo")) playlistTyp=PLAYLIST_VIDEO; if (playlistTyp==PLAYLIST_NONE) return false; CPlayList& playlist = CServiceBroker::GetPlaylistPlayer().GetPlaylist(playlistTyp); items.Reserve(playlist.size()); for (int i = 0; i < playlist.size(); ++i) { CFileItemPtr item = playlist[i]; item->SetProperty("playlistposition", i); item->SetProperty("playlisttype", playlistTyp); //item->m_iprogramCount = i; // the programCount is set as items are added! items.Add(item); } return true; }
JSONRPC_STATUS CAudioLibrary::GetAlbums(const std::string &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result) { CMusicDatabase musicdatabase; if (!musicdatabase.Open()) return InternalError; CMusicDbUrl musicUrl; if (!musicUrl.FromString("musicdb://albums/")) return InternalError; if (parameterObject["includesingles"].asBoolean()) musicUrl.AddOption("show_singles", true); const CVariant &filter = parameterObject["filter"]; if (filter.isMember("artistid")) musicUrl.AddOption("artistid", (int)filter["artistid"].asInteger()); else if (filter.isMember("artist")) musicUrl.AddOption("artist", filter["artist"].asString()); else if (filter.isMember("genreid")) musicUrl.AddOption("genreid", (int)filter["genreid"].asInteger()); else if (filter.isMember("genre")) musicUrl.AddOption("genre", filter["genre"].asString()); else if (filter.isObject()) { std::string xsp; if (!GetXspFiltering("albums", filter, xsp)) return InvalidParams; musicUrl.AddOption("xsp", xsp); } SortDescription sorting; ParseLimits(parameterObject, sorting.limitStart, sorting.limitEnd); if (!ParseSorting(parameterObject, sorting.sortBy, sorting.sortOrder, sorting.sortAttributes)) return InvalidParams; int total; VECALBUMS albums; if (!musicdatabase.GetAlbumsByWhere(musicUrl.ToString(), CDatabase::Filter(), albums, total, sorting)) return InternalError; CFileItemList items; items.Reserve(albums.size()); for (unsigned int index = 0; index < albums.size(); index++) { CMusicDbUrl itemUrl = musicUrl; std::string path = StringUtils::Format("%i/", albums[index].idAlbum); itemUrl.AppendPath(path); CFileItemPtr pItem; FillAlbumItem(albums[index], itemUrl.ToString(), pItem); items.Add(pItem); } //Get Genre IDs JSONRPC_STATUS ret = GetAdditionalAlbumDetails(parameterObject, items, musicdatabase); if (ret != OK) return ret; int size = items.Size(); if (total > size) size = total; HandleFileItemList("albumid", false, "albums", items, parameterObject, result, size, false); return OK; }