void CGUIDialogSongInfo::SetSong(CFileItem *item) { *m_song = *item; m_song->LoadMusicTag(); m_startUserrating = m_song->GetMusicInfoTag()->GetUserrating(); MUSIC_INFO::CMusicInfoLoader::LoadAdditionalTagInfo(m_song.get()); // set artist thumb as well CMusicDatabase db; db.Open(); if (item->IsMusicDb()) { std::vector<int> artists; CVariant artistthumbs; db.GetArtistsBySong(item->GetMusicInfoTag()->GetDatabaseId(), true, artists); for (std::vector<int>::const_iterator artistId = artists.begin(); artistId != artists.end(); ++artistId) { std::string thumb = db.GetArtForItem(*artistId, MediaTypeArtist, "thumb"); if (!thumb.empty()) artistthumbs.push_back(thumb); } if (artistthumbs.size()) { m_song->SetProperty("artistthumbs", artistthumbs); m_song->SetProperty("artistthumb", artistthumbs[0]); } } else if (m_song->HasMusicInfoTag() && !m_song->GetMusicInfoTag()->GetArtist().empty()) { int idArtist = db.GetArtistByName(m_song->GetMusicInfoTag()->GetArtist()[0]); std::string thumb = db.GetArtForItem(idArtist, MediaTypeArtist, "thumb"); if (!thumb.empty()) m_song->SetProperty("artistthumb", thumb); } m_needsUpdate = false; }
JSONRPC_STATUS CAudioLibrary::GetAdditionalSongDetails(const CVariant ¶meterObject, CFileItemList &items, CMusicDatabase &musicdatabase) { if (!musicdatabase.Open()) return InternalError; std::set<std::string> checkProperties; checkProperties.insert("genreid"); checkProperties.insert("artistid"); checkProperties.insert("albumartistid"); std::set<std::string> additionalProperties; if (!CheckForAdditionalProperties(parameterObject["properties"], checkProperties, additionalProperties)) return OK; for (int i = 0; i < items.Size(); i++) { CFileItemPtr item = items[i]; if (additionalProperties.find("genreid") != additionalProperties.end()) { std::vector<int> genreids; if (musicdatabase.GetGenresBySong(item->GetMusicInfoTag()->GetDatabaseId(), genreids)) { CVariant genreidObj(CVariant::VariantTypeArray); for (std::vector<int>::const_iterator genreid = genreids.begin(); genreid != genreids.end(); genreid++) genreidObj.push_back(*genreid); item->SetProperty("genreid", genreidObj); } } if (additionalProperties.find("artistid") != additionalProperties.end()) { std::vector<int> artistids; if (musicdatabase.GetArtistsBySong(item->GetMusicInfoTag()->GetDatabaseId(), true, artistids)) { CVariant artistidObj(CVariant::VariantTypeArray); for (std::vector<int>::const_iterator artistid = artistids.begin(); artistid != artistids.end(); artistid++) artistidObj.push_back(*artistid); item->SetProperty("artistid", artistidObj); } } if (additionalProperties.find("albumartistid") != additionalProperties.end() && item->GetMusicInfoTag()->GetAlbumId() > 0) { std::vector<int> albumartistids; if (musicdatabase.GetArtistsByAlbum(item->GetMusicInfoTag()->GetAlbumId(), true, albumartistids)) { CVariant albumartistidObj(CVariant::VariantTypeArray); for (std::vector<int>::const_iterator albumartistid = albumartistids.begin(); albumartistid != albumartistids.end(); albumartistid++) albumartistidObj.push_back(*albumartistid); item->SetProperty("albumartistid", albumartistidObj); } } } return OK; }