int cmd_playlists(int argc, char **argv) { sp_playlistcontainer *pc = sp_session_playlistcontainer(g_session); int i, j, level = 0; sp_playlist *pl; char name[200]; printf("%d entries in the container\n", sp_playlistcontainer_num_playlists(pc)); for (i = 0; i < sp_playlistcontainer_num_playlists(pc); ++i) { switch (sp_playlistcontainer_playlist_type(pc, i)) { case SP_PLAYLIST_TYPE_PLAYLIST: printf("%d. ", i); for (j = level; j; --j) printf("\t"); pl = sp_playlistcontainer_playlist(pc, i); printf("%s", sp_playlist_name(pl)); if(subscriptions_updated) printf(" (%d subscribers)", sp_playlist_num_subscribers(pl)); printf("\n"); break; case SP_PLAYLIST_TYPE_START_FOLDER: printf("%d. ", i); for (j = level; j; --j) printf("\t"); sp_playlistcontainer_playlist_folder_name(pc, i, name, sizeof(name)); printf("Folder: %s with id %llu\n", name, sp_playlistcontainer_playlist_folder_id(pc, i)); level++; break; case SP_PLAYLIST_TYPE_END_FOLDER: level--; printf("%d. ", i); for (j = level; j; --j) printf("\t"); printf("End folder with id %llu\n", sp_playlistcontainer_playlist_folder_id(pc, i)); break; case SP_PLAYLIST_TYPE_PLACEHOLDER: printf("%d. Placeholder", i); break; } } return 1; }
json_t *playlist_to_json(sp_playlist *playlist, json_t *object) { assert(sp_playlist_is_loaded(playlist)); // Owner sp_user *owner = sp_playlist_owner(playlist); const char *username = sp_user_display_name(owner); sp_user_release(owner); json_object_set_new_nocheck(object, "creator", json_string_nocheck(username)); // URI size_t playlist_uri_len = strlen("spotify:user:"******":playlist:") + strlen("284on3DVWeAxWkgVuzZKGt"); char *playlist_uri = malloc(playlist_uri_len); if (playlist_uri == NULL) { return NULL; } sp_link *playlist_link = sp_link_create_from_playlist(playlist); sp_link_as_string(playlist_link, playlist_uri, playlist_uri_len); sp_link_release(playlist_link); json_object_set_new(object, "uri", json_string_nocheck(playlist_uri)); free(playlist_uri); // Title const char *title = sp_playlist_name(playlist); json_object_set_new(object, "title", json_string_nocheck(title)); // Collaborative playlist_to_json_set_collaborative(playlist, object); // Description const char *description = sp_playlist_get_description(playlist); if (description != NULL) { json_object_set_new(object, "description", json_string_nocheck(description)); } // Number of subscribers int num_subscribers = sp_playlist_num_subscribers(playlist); json_object_set_new(object, "subscriberCount", json_integer(num_subscribers)); // Tracks json_t *tracks = json_array(); json_object_set_new(object, "tracks", tracks); char track_uri[kTrackLinkLength]; for (int i = 0; i < sp_playlist_num_tracks(playlist); i++) { sp_track *track = sp_playlist_track(playlist, i); sp_link *track_link = sp_link_create_from_track(track, 0); sp_link_as_string(track_link, track_uri, kTrackLinkLength); json_array_append(tracks, json_string_nocheck(track_uri)); sp_link_release(track_link); } return object; }