Пример #1
0
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();
}
Пример #2
0
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;

}
Пример #3
0
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;
}
Пример #4
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();
}
Пример #5
0
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;
    }
}
Пример #6
0
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;
}
Пример #7
0
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);
}
Пример #9
0
PHP_METHOD(SpotifyPlaylist, __destruct)
{
	spotifyplaylist_object *p = (spotifyplaylist_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
	sp_playlist_release(p->playlist);
}
Пример #10
0
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;
}