JSONRPC_STATUS CAudioLibrary::GetAlbumDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result) { int albumID = (int)parameterObject["albumid"].asInteger(); CMusicDatabase musicdatabase; if (!musicdatabase.Open()) return InternalError; CAlbum album; if (!musicdatabase.GetAlbumInfo(albumID, album, NULL)) return InvalidParams; CStdString path; if (!musicdatabase.GetAlbumPath(albumID, path)) return InternalError; CFileItemPtr albumItem; FillAlbumItem(album, path, albumItem); CFileItemList items; items.Add(albumItem); JSONRPC_STATUS ret = GetAdditionalAlbumDetails(parameterObject, items, musicdatabase); if (ret != OK) return ret; HandleFileItem("albumid", false, "albumdetails", items[0], parameterObject, parameterObject["properties"], result, false); return OK; }
JSON_STATUS CAudioLibrary::GetAlbumDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const Value ¶meterObject, Value &result) { int albumID = parameterObject["albumid"].asInt(); CMusicDatabase musicdatabase; if (!musicdatabase.Open()) return InternalError; CAlbum album; if (!musicdatabase.GetAlbumInfo(albumID, album, NULL)) { musicdatabase.Close(); return InvalidParams; } Json::Value validFields; MakeFieldsList(parameterObject, validFields); CStdString path; musicdatabase.GetAlbumPath(albumID, path); CFileItemPtr m_albumItem( new CFileItem(path, album) ); m_albumItem->SetLabel(album.strAlbum); CMusicDatabase::SetPropertiesFromAlbum(*m_albumItem, album); m_albumItem->SetMusicThumb(); HandleFileItem("albumid", false, "albumdetails", m_albumItem, parameterObject, validFields, result); musicdatabase.Close(); return OK; }
bool CAudioLibrary::FillFileItem(const CStdString &strFilename, CFileItem &item) { CMusicDatabase musicdatabase; if (strFilename.empty() || !musicdatabase.Open()) return false; if (CDirectory::Exists(strFilename)) { CAlbum album; int albumid = musicdatabase.GetAlbumIdByPath(strFilename); if (!musicdatabase.GetAlbumInfo(albumid, album, NULL)) return false; item = CFileItem(strFilename, album); } else { CSong song; if (!musicdatabase.GetSongByFileName(strFilename, song)) return false; item = CFileItem(song); } return true; }
JSON_STATUS CAudioLibrary::GetAlbumDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result) { int albumID = (int)parameterObject["albumid"].asInteger(); CMusicDatabase musicdatabase; if (!musicdatabase.Open()) return InternalError; CAlbum album; if (!musicdatabase.GetAlbumInfo(albumID, album, NULL)) { musicdatabase.Close(); return InvalidParams; } CStdString path; musicdatabase.GetAlbumPath(albumID, path); CFileItemPtr m_albumItem; FillAlbumItem(album, path, m_albumItem); HandleFileItem("albumid", false, "albumdetails", m_albumItem, parameterObject, parameterObject["properties"], result, false); musicdatabase.Close(); return OK; }
bool CAudioLibrary::FillFileItem(const CStdString &strFilename, CFileItemPtr &item, const CVariant ¶meterObject /* = CVariant(CVariant::VariantTypeArray) */) { CMusicDatabase musicdatabase; if (strFilename.empty()) return false; bool filled = false; if (musicdatabase.Open()) { if (CDirectory::Exists(strFilename)) { CAlbum album; int albumid = musicdatabase.GetAlbumIdByPath(strFilename); if (musicdatabase.GetAlbumInfo(albumid, album, NULL)) { item->SetFromAlbum(album); CFileItemList items; items.Add(item); if (GetAdditionalAlbumDetails(parameterObject, items, musicdatabase) == OK) filled = true; } } else { CSong song; if (musicdatabase.GetSongByFileName(strFilename, song)) { item->SetFromSong(song); CFileItemList items; items.Add(item); if (GetAdditionalSongDetails(parameterObject, items, musicdatabase) == OK) filled = true; } } } if (item->GetLabel().empty()) { item->SetLabel(CUtil::GetTitleFromPath(strFilename, false)); if (item->GetLabel().empty()) item->SetLabel(URIUtils::GetFileName(strFilename)); } return filled; }
void CGUIDialogMusicInfo::OnSearch(const CFileItem* pItem) { CMusicDatabase database; database.Open(); long idAlbum = database.GetAlbumByName(pItem->GetLabel(),m_artist.strArtist); if (idAlbum != -1) { CAlbum album; if (database.GetAlbumInfo(idAlbum,album,&album.songs)) { CStdString strPath; database.GetAlbumPath(idAlbum,strPath); SetAlbum(album,strPath); Update(); } } }
bool CMusicInfoLoader::LoadAdditionalTagInfo(CFileItem* pItem) { if (!pItem || pItem->m_bIsFolder || pItem->IsPlayList() || pItem->IsNFO() || pItem->IsInternetStream()) return false; if (pItem->GetProperty("hasfullmusictag") == "true") return false; // already have the information CStdString path(pItem->GetPath()); if (pItem->IsMusicDb()) { // set the artist / album properties XFILE::MUSICDATABASEDIRECTORY::CQueryParams param; XFILE::MUSICDATABASEDIRECTORY::CDirectoryNode::GetDatabaseInfo(pItem->GetPath(),param); CArtist artist; CMusicDatabase database; database.Open(); if (database.GetArtistInfo(param.GetArtistId(),artist,false)) CMusicDatabase::SetPropertiesFromArtist(*pItem,artist); CAlbum album; if (database.GetAlbumInfo(param.GetAlbumId(),album,NULL)) CMusicDatabase::SetPropertiesFromAlbum(*pItem,album); path = pItem->GetMusicInfoTag()->GetURL(); } CLog::Log(LOGDEBUG, "Loading additional tag info for file %s", path.c_str()); // we load up the actual tag for this file auto_ptr<IMusicInfoTagLoader> pLoader (CMusicInfoTagLoaderFactory::CreateLoader(path)); if (NULL != pLoader.get()) { CMusicInfoTag tag; pLoader->Load(path, tag); // then we set the fields from the file tags to the item pItem->SetProperty("lyrics", tag.GetLyrics()); pItem->SetProperty("hasfullmusictag", "true"); return true; } return false; }
JSONRPC_STATUS CAudioLibrary::SetAlbumDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result) { int id = (int)parameterObject["albumid"].asInteger(); CMusicDatabase musicdatabase; if (!musicdatabase.Open()) return InternalError; CAlbum album; VECSONGS songs; if (!musicdatabase.GetAlbumInfo(id, album, &songs) || album.idAlbum <= 0) return InvalidParams; if (ParameterNotNull(parameterObject, "title")) album.strAlbum = parameterObject["title"].asString(); if (ParameterNotNull(parameterObject, "artist")) CopyStringArray(parameterObject["artist"], album.artist); if (ParameterNotNull(parameterObject, "description")) album.strReview = parameterObject["description"].asString(); if (ParameterNotNull(parameterObject, "genre")) CopyStringArray(parameterObject["genre"], album.genre); if (ParameterNotNull(parameterObject, "theme")) CopyStringArray(parameterObject["theme"], album.themes); if (ParameterNotNull(parameterObject, "mood")) CopyStringArray(parameterObject["mood"], album.moods); if (ParameterNotNull(parameterObject, "style")) CopyStringArray(parameterObject["style"], album.styles); if (ParameterNotNull(parameterObject, "type")) album.strType = parameterObject["type"].asString(); if (ParameterNotNull(parameterObject, "albumlabel")) album.strLabel = parameterObject["albumlabel"].asString(); if (ParameterNotNull(parameterObject, "rating")) album.iRating = (int)parameterObject["rating"].asInteger(); if (ParameterNotNull(parameterObject, "year")) album.iYear = (int)parameterObject["year"].asInteger(); if (musicdatabase.SetAlbumInfo(id, album, songs) <= 0) return InternalError; CJSONRPCUtils::NotifyItemUpdated(); return ACK; }
bool CAudioLibrary::FillFileItem(const CStdString &strFilename, CFileItemPtr &item, const CVariant ¶meterObject /* = CVariant(CVariant::VariantTypeArray) */) { CMusicDatabase musicdatabase; if (strFilename.empty() || !musicdatabase.Open()) return false; if (CDirectory::Exists(strFilename)) { CAlbum album; int albumid = musicdatabase.GetAlbumIdByPath(strFilename); if (!musicdatabase.GetAlbumInfo(albumid, album, NULL)) return false; item->SetFromAlbum(album); CFileItemList items; items.Add(item); if (GetAdditionalAlbumDetails(parameterObject, items, musicdatabase) != OK) return false; } else { CSong song; if (!musicdatabase.GetSongByFileName(strFilename, song)) return false; item->SetFromSong(song); CFileItemList items; items.Add(item); if (GetAdditionalSongDetails(parameterObject, items, musicdatabase) != OK) return false; } return true; }