bool Addon_music_spotify::getAlbumTracksFromTrack(CFileItemList& items, CStdString& uri) { if (isReady()) { sp_link *spLink = sp_link_create_from_string(uri.Left(uri.Find('.'))); if (!spLink) return false; sp_track *spTrack = sp_link_as_track(spLink); if (spTrack) { sp_album* spAlbum = sp_track_album(spTrack); if (spAlbum) { // TODO find out on what disc the track is if its a multidisc SxAlbum* album = AlbumStore::getInstance()->getAlbum(spAlbum, true); // this is NOT nice, might result in a race condition... fix later while (!album->isLoaded()) { Session::getInstance()->processEvents(); } vector<SxTrack*> tracks = album->getTracks(); for (int i = 0; i < tracks.size(); i++) { items.Add(Utils::SxTrackToItem(tracks[i])); } } sp_track_release(spTrack); } sp_link_release(spLink); } }
bool Addon_music_spotify::getAlbumTracks(CFileItemList& items, CStdString& path) { if (isReady()) { //lets split the string to get the album uri and the disc number CStdString uri = path.Left(path.Find('#')); CStdString discStr = path.Right(path.GetLength() - path.Find('#') - 1); //Logger::printOut(discStr.c_str()); int disc = atoi(discStr.c_str()); //0 means its not a multidisc, so we need to change it to 1 if (disc == 0) disc = 1; sp_link *spLink = sp_link_create_from_string(uri); sp_album *spAlbum = sp_link_as_album(spLink); SxAlbum* salbum = AlbumStore::getInstance()->getAlbum(spAlbum, true); vector<SxTrack*> tracks = salbum->getTracks(); for (int i = 0; i < tracks.size(); i++) { if (disc == tracks[i]->getDisc()) items.Add(Utils::SxTrackToItem(tracks[i])); } } return true; }