ListResponse<PlaylistInfo*>* SpotifyPlaylistContainer::listPlaylists( PlaylistTask* task) { ListResponse<PlaylistInfo*>* response = new ListResponse<PlaylistInfo*>(); response->setListType(ListTypePlaylist); CommandInfo info = task->getCommandInfo(); bool sendName = ((info.ListFlags & Name) == Name); bool sendNumTracks = ((info.ListFlags & NumTracks) == NumTracks); bool sendDescription = ((info.ListFlags & Description) == Description); int numPlaylists = sp_playlistcontainer_num_playlists(playlistContainer); for (int i = 0; i < numPlaylists; i++) { if (sp_playlistcontainer_playlist_type(playlistContainer, i) == SP_PLAYLIST_TYPE_PLAYLIST) { sp_playlist* playlist = sp_playlistcontainer_playlist( playlistContainer, i); const char* name = sp_playlist_name(playlist); if (!(name[0] == '_' && name[1] == '_')) { PlaylistInfo* playlistInfo = new PlaylistInfo(); playlistInfo->id = i; if (sendName) { playlistInfo->name = name; } if (sendNumTracks) { playlistInfo->numTracks = sp_playlist_num_tracks(playlist); } if (sendDescription) { playlistInfo->description = sp_playlist_get_description( playlist); } response->addMember(playlistInfo); } } } return response; }
PHP_METHOD(SpotifyPlaylist, getDescription) { spotifyplaylist_object *p = (spotifyplaylist_object*)zend_object_store_get_object(getThis() TSRMLS_CC); RETURN_STRING(sp_playlist_get_description(p->playlist), 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; }