boost::shared_ptr<Artist> Album::GetArtist() { sp_artist* pArtist = sp_album_artist( m_pAlbum ); boost::shared_ptr<Artist> artist = m_session->CreateArtist(); artist->Load( pArtist ); return artist; }
static PyObject * Album_artist(Album * self) { sp_artist *spa; spa = sp_album_artist(self->_album); if (!spa) Py_RETURN_NONE; PyObject *artist = Artist_FromSpotify(spa); return artist; }
bool QSpotifyAlbum::updateData() { bool updated = false; bool isAvailable = sp_album_is_available(m_sp_album); sp_artist *a = sp_album_artist((m_sp_album)); QString artist; if (a) artist = QString::fromUtf8(sp_artist_name(a)); QString name = QString::fromUtf8(sp_album_name(m_sp_album)); int year = sp_album_year(m_sp_album); Type type = Type(sp_album_type(m_sp_album)); // Get cover const byte *album_cover_id = sp_album_cover(m_sp_album, SP_IMAGE_SIZE_NORMAL); if (album_cover_id != 0 && m_coverId.isEmpty()) { sp_link *link = sp_link_create_from_album_cover(m_sp_album, SP_IMAGE_SIZE_NORMAL); if (link) { char buffer[200]; int uriSize = sp_link_as_string(link, &buffer[0], 200); m_coverId = QString::fromUtf8(&buffer[0], uriSize); sp_link_release(link); updated = true; } } if (isAvailable != m_isAvailable) { m_isAvailable = isAvailable; updated = true; } if (artist != m_artist) { m_artist = artist; updated = true; } if (name != m_name) { m_name = name; updated = true; } if (year != m_year) { m_year = year; updated = true; } if (type != m_type) { m_type = type; updated = true; } return updated; }
static sp_playlist *find_album_playlist(sp_playlistcontainer *list_container, int *spiffify_start_index, int spiffify_end_index, sp_album *al) { if (al == NULL) { return NULL; } int j=*spiffify_start_index; sp_artist *a = sp_album_artist(al); const char *artist = sp_artist_name(a); int artist_end = 0; sp_uint64 artist_folder_id = 0; for(; j < spiffify_end_index; j++) { sp_playlist *p = sp_playlistcontainer_playlist(list_container, j); if (p == NULL) { continue; } sp_playlist_type type = sp_playlistcontainer_playlist_type(list_container,j); if (type == SP_PLAYLIST_TYPE_START_FOLDER) { char folder_name[256]; sp_error error = sp_playlistcontainer_playlist_folder_name(list_container, j, folder_name, 255); if (strcmp(folder_name, artist) == 0) { artist_folder_id = sp_playlistcontainer_playlist_folder_id(list_container, j); } } else if (type == SP_PLAYLIST_TYPE_END_FOLDER) { if (artist_folder_id == sp_playlistcontainer_playlist_folder_id(list_container, j)) { artist_end = j; } } const char *plname = sp_playlist_name(p); if (plname != NULL) { const char *alname = sp_album_name(al); if (strcmp(plname, alname) == 0) { return p; } } } // in the case where we don't yet have the playlist for this album and we are about to create it, send back the end of this artist folder if (artist_end != 0) { *spiffify_start_index = artist_end-1; } return NULL; }
jobject createJAlbumInstance(JNIEnv *env, sp_album *album) { jclass albumJClass; jobject albumInstance; albumJClass = (*env)->FindClass(env, "jahspotify/media/Album"); if (albumJClass == NULL) { fprintf(stderr,"jahspotify::createJAlbumInstance: could not load jahnotify.media.Album\n"); return NULL; } albumInstance = (*env)->AllocObject(env,albumJClass); if (!albumInstance) { fprintf(stderr,"jahspotify::createJAlbumInstance: could not create instance of jahspotify.media.Album\n"); return NULL; } sp_albumbrowse *albumBrowse = sp_albumbrowse_create(g_sess,album,albumBrowseCompleteCallback,NULL); if (albumBrowse) { sp_albumbrowse_add_ref(albumBrowse); int count = 0; while (!sp_albumbrowse_is_loaded(albumBrowse) && count < 5) { fprintf(stderr,"jahspotify::createJAlbumInstance: waiting for album browse load to complete\n"); sleep(1); count++; } if (count == 5) { sp_albumbrowse_release(albumBrowse); return NULL; } // By now it looks like the album will also be loaded sp_link *albumLink = sp_link_create_from_album(album); if (albumLink) { sp_link_add_ref(albumLink); jobject albumJLink = createJLinkInstance(env, albumLink); setObjectObjectField(env,albumInstance,"id","Ljahspotify/media/Link;",albumJLink); setObjectStringField(env,albumInstance,"name",sp_album_name(album)); setObjectIntField(env,albumInstance,"year",sp_album_year(album)); sp_albumtype albumType = sp_album_type(album); jclass albumTypeJClass = (*env)->FindClass(env, "jahspotify/media/AlbumType"); jmethodID jMethod = (*env)->GetStaticMethodID(env,albumTypeJClass,"fromOrdinal","(I)Ljahspotify/media/AlbumType;"); jobject albumTypeEnum = (jobjectArray)(*env)->CallStaticObjectMethod(env, albumTypeJClass, jMethod,(int)albumType); setObjectObjectField(env,albumInstance,"type","Ljahspotify/media/AlbumType;",albumTypeEnum); sp_link *albumCoverLink = sp_link_create_from_album_cover(album); if (albumCoverLink) { sp_link_add_ref(albumCoverLink); jobject albumCoverJLink = createJLinkInstance(env, albumCoverLink); setObjectObjectField(env,albumInstance,"cover","Ljahspotify/media/Link;",albumCoverJLink); sp_image *albumCoverImage = sp_image_create_from_link(g_sess,albumCoverLink); if (albumCoverImage) { sp_image_add_ref(albumCoverImage); sp_image_add_load_callback(albumCoverImage,imageLoadedCallback,NULL); } sp_link_release(albumCoverLink); } sp_artist *artist = sp_album_artist(album); if (artist) { sp_artist_add_ref(artist); sp_link *artistLink = sp_link_create_from_artist(artist); if (artistLink) { sp_link_add_ref(artistLink); jobject artistJLink = createJLinkInstance(env,artistLink); setObjectObjectField(env,albumInstance,"artist","Ljahspotify/media/Link;",artistJLink); sp_link_release(artistLink); } sp_artist_release(artist); } sp_link_release(albumLink); } int numTracks = sp_albumbrowse_num_tracks(albumBrowse); if (numTracks > 0) { // Add each track to the album - also pass in the disk as need be jmethodID addTrackJMethodID = (*env)->GetMethodID(env,albumJClass,"addTrack","(ILjahspotify/media/Link;)V"); int i = 0; for (i = 0; i < numTracks; i++) { sp_track *track = sp_albumbrowse_track(albumBrowse,i); if (track) { sp_track_add_ref(track); sp_link *trackLink = sp_link_create_from_track(track,0); if (trackLink) { sp_link_add_ref(trackLink); jobject trackJLink = createJLinkInstance(env,trackLink); (*env)->CallVoidMethod(env, albumInstance, addTrackJMethodID,sp_track_disc(track),trackJLink); sp_link_release(trackLink); } } } } int numCopyrights = sp_albumbrowse_num_copyrights(albumBrowse); if (numCopyrights > 0) { // Add copyrights to album jmethodID addCopyrightMethodID = (*env)->GetMethodID(env,albumJClass,"addCopyright","(Ljava/lang/String;)V"); int i = 0; for (i = 0; i < numCopyrights; i++) { const char *copyright = sp_albumbrowse_copyright(albumBrowse,i); if (copyright) { jstring str = (*env)->NewStringUTF(env, copyright); (*env)->CallVoidMethod(env, albumInstance, addCopyrightMethodID,str); } } } const char *review = sp_albumbrowse_review(albumBrowse); if (review) { setObjectStringField(env,albumInstance,"review",review); } sp_albumbrowse_release(albumBrowse); } return albumInstance; }
static void print_album(int index, sp_album *album) { printf(" Album %3d: \"%s\" by \"%s\"\n", index, sp_album_name(album), sp_artist_name(sp_album_artist(album))); }