static void playlist_browse_try(void) { int i, tracks; metadata_updated_fn = playlist_browse_try; if(!sp_playlist_is_loaded(playlist_browse)) return; tracks = sp_playlist_num_tracks(playlist_browse); for(i = 0; i < tracks; i++) { sp_track *t = sp_playlist_track(playlist_browse, i); if (!sp_track_is_loaded(t)) return; } printf("\tPlaylist and metadata loaded\n"); for(i = 0; i < tracks; i++) { sp_track *t = sp_playlist_track(playlist_browse, i); printf(" %5d: ", i + 1); print_track(t); } sp_playlist_remove_callbacks(playlist_browse, &pl_callbacks, NULL); sp_playlist_release(playlist_browse); playlist_browse = NULL; metadata_updated_fn = NULL; cmd_done(); }
JNIEXPORT jobject JNICALL Java_jahspotify_impl_JahSpotifyImpl_retrievePlaylist ( JNIEnv *env, jobject obj, jstring uri) { jobject playlistInstance; uint8_t *nativeUri = NULL; nativeUri = ( uint8_t * ) ( *env )->GetStringUTFChars ( env, uri, NULL ); sp_link *link = sp_link_create_from_string(nativeUri); if (!link) { // hmm fprintf ( stderr, "jahspotify::Java_jahspotify_impl_JahSpotifyImpl_retrievePlaylist: Could not create link!\n" ); return JNI_FALSE; } sp_playlist *playlist = sp_playlist_create(g_sess,link); while (!sp_playlist_is_loaded(playlist)) { fprintf ( stderr, "jahspotify::Java_jahspotify_impl_JahSpotifyImpl_retrievePlaylist: Waiting for playlist to be loaded ...\n" ); sleep(1); } playlistInstance = createJPlaylist(env, playlist); if (playlist) sp_playlist_release(playlist); if (link) sp_link_release(link); if (nativeUri) free(nativeUri); return playlistInstance; }
int cmd_playlist_add_track(int argc, char **argv) { sp_link *plink, *tlink; sp_track *t; sp_playlist *pl; int i; struct pl_update_work *puw; if(argc < 4) { printf("add [playlist uri] [position] [track uri] <[track uri]>...\n"); return 1; } plink = sp_link_create_from_string(argv[1]); if (!plink) { fprintf(stderr, "%s is not a spotify link\n", argv[1]); return -1; } if(sp_link_type(plink) != SP_LINKTYPE_PLAYLIST) { fprintf(stderr, "%s is not a playlist link\n", argv[1]); sp_link_release(plink); return -1; } puw = malloc(sizeof(struct pl_update_work)); puw->position = atoi(argv[2]); puw->tracks = malloc(sizeof(sp_track *) * argc - 3); puw->num_tracks = 0; for(i = 0; i < argc - 3; i++) { tlink = sp_link_create_from_string(argv[i + 3]); if(tlink == NULL) { fprintf(stderr, "%s is not a spotify link, skipping\n", argv[i + 3]); continue; } if(sp_link_type(tlink) != SP_LINKTYPE_TRACK) { fprintf(stderr, "%s is not a track link, skipping\n", argv[i + 3]); continue; } t = sp_link_as_track(tlink); sp_track_add_ref(t); puw->tracks[puw->num_tracks++] = t; sp_link_release(tlink); } pl = sp_playlist_create(g_session, plink); if(!apply_changes(pl, puw)) { // Changes applied directly, we're done sp_playlist_release(pl); sp_link_release(plink); return 1; } fprintf(stderr, "Playlist not yet loaded, waiting...\n"); sp_playlist_add_callbacks(pl, &pl_update_callbacks, puw); sp_link_release(plink); return 0; }
static void pl_state_change(sp_playlist *pl, void *userdata) { struct pl_update_work *puw = userdata; if(apply_changes(pl, puw)) return; sp_playlist_remove_callbacks(pl, &pl_update_callbacks, puw); sp_playlist_release(pl); cmd_done(); }
void Spotify::changeCurrentPlaylist() { sp_error err; sp_playlist * playlist; if (currentPlaylistIdx < 0) { return; } sp_playlistcontainer * pc = sp_session_playlistcontainer(sp); if (currentPlaylistIdx >= sp_playlistcontainer_num_playlists(pc)) { return; } switch (sp_playlistcontainer_playlist_type(pc, currentPlaylistIdx)) { case SP_PLAYLIST_TYPE_PLAYLIST: playlist = sp_playlistcontainer_playlist(pc, currentPlaylistIdx); if (!playlist) { fprintf(stderr, "Spotify: failed to get playlist\n"); break; } err = sp_playlist_add_callbacks(playlist, Spotify_Wrapper::playlistCallbacks(), NULL); if (err != SP_ERROR_OK) { fprintf(stderr, "Spotify: failed to add callbacks to playlist: %s\n", sp_error_message(err)); } if (currentPlaylist) { sp_playlist_remove_callbacks(currentPlaylist, Spotify_Wrapper::playlistCallbacks(), NULL); sp_playlist_release(currentPlaylist); } currentPlaylist = playlist; sp_playlist_add_ref(currentPlaylist); fprintf(stderr, "Spotify: switched to playlist %s\n", sp_playlist_name(currentPlaylist)); tryLoadPlaylist(); break; default: fprintf(stderr, "Spotify: Tried to load a playlist that wasn't a playlist\n"); currentPlaylistIdx = -1; break; } }
svn_error_t *diff_playlist_tracks(svn_diff_t **diff, sp_playlist *playlist, sp_track **tracks, int num_tracks, apr_pool_t *pool) { sp_playlist_add_ref(playlist); struct track_tokens_t sources[2]; fill_track_tokens_from_playlist(&sources[0], playlist); fill_track_tokens_from_tracks(&sources[1], tracks, num_tracks); // Run through SVN diff apr_pool_t *local_pool = svn_pool_create(pool); svn_error_t *result = svn_diff_diff(diff, &sources, &diff_playlist_search_vtable, local_pool); svn_pool_destroy(local_pool); sp_playlist_release(playlist); return result; }
svn_error_t *diff_playlist_tracks_apply(svn_diff_t *diff, sp_playlist *playlist, sp_track **tracks, int num_tracks, sp_session *session) { sp_playlist_add_ref(playlist); struct output_baton_t *baton = malloc(sizeof (struct output_baton_t)); baton->playlist = playlist; baton->tracks = tracks; baton->num_tracks = num_tracks; baton->session = session; svn_error_t *result = svn_diff_output(diff, baton, &output_fns_vtable); free(baton); sp_playlist_release(playlist); return result; }
QSpotifyPlaylistSearchEntry::~QSpotifyPlaylistSearchEntry() { if(m_sp_playlist) sp_playlist_release(m_sp_playlist); }
PHP_METHOD(SpotifyPlaylist, __destruct) { spotifyplaylist_object *p = (spotifyplaylist_object*)zend_object_store_get_object(getThis() TSRMLS_CC); sp_playlist_release(p->playlist); }
int cmd_playlist_offline(int argc, char **argv) { sp_link *plink; sp_playlist *pl; int on; if (argc == 2 && !strcmp(argv[1], "status")) { printf("Offline status\n"); printf(" %d tracks to sync\n", sp_offline_tracks_to_sync(g_session)); printf(" %d offline playlists in total\n", sp_offline_num_playlists(g_session)); return 1; } if (argc != 3) { printf("offline status | <playlist uri> <on|off>\n"); return 1; } plink = sp_link_create_from_string(argv[1]); if (!plink) { fprintf(stderr, "%s is not a spotify link\n", argv[1]); return -1; } if (sp_link_type(plink) != SP_LINKTYPE_PLAYLIST) { fprintf(stderr, "%s is not a playlist link\n", argv[1]); sp_link_release(plink); return -1; } pl = sp_playlist_create(g_session, plink); if (argc == 3) { if (!strcasecmp(argv[2], "on")) on = 1; else if (!strcasecmp(argv[2], "off")) on = 0; else { fprintf(stderr, "Invalid mode: %s\n", argv[2]); return -1; } sp_playlist_set_offline_mode(g_session, pl, on); } else { sp_playlist_offline_status s; s = sp_playlist_get_offline_status(g_session, pl); printf("Offline status for %s (%s)\n", argv[1], sp_playlist_name(pl)); printf(" Status: %s\n", offlinestatus[s]); if (s == SP_PLAYLIST_OFFLINE_STATUS_DOWNLOADING) printf(" %d%% Complete\n", sp_playlist_get_offline_download_completed(g_session, pl)); } sp_playlist_release(pl); sp_link_release(plink); return 1; }