static void put_playlist_remove_tracks(sp_playlist *playlist, struct evhttp_request *request, void *userdata) { // sp_session *session = userdata; const char *uri = evhttp_request_get_uri(request); struct evkeyvalq query_fields; evhttp_parse_query(uri, &query_fields); // Parse index const char *index_field = evhttp_find_header(&query_fields, "index"); int index; if (index_field == NULL || sscanf(index_field, "%d", &index) <= 0 || index < 0) { send_error(request, HTTP_BADREQUEST, "Bad parameter: index must be numeric"); return; } const char *count_field = evhttp_find_header(&query_fields, "count"); int count; if (count_field == NULL || sscanf(count_field, "%d", &count) <= 0 || count < 1) { send_error(request, HTTP_BADREQUEST, "Bad parameter: count must be numeric and positive"); return; } int *tracks = calloc(count, sizeof(int)); for (int i = 0; i < count; i++) tracks[i] = index + i; struct playlist_handler *handler = register_playlist_callbacks( playlist, request, &get_playlist, &playlist_update_in_progress_callbacks, NULL); sp_error remove_tracks_error = sp_playlist_remove_tracks(playlist, tracks, count); if (remove_tracks_error != SP_ERROR_OK) { sp_playlist_remove_callbacks(playlist, handler->playlist_callbacks, handler); free(handler); send_error_sp(request, HTTP_BADREQUEST, remove_tracks_error); } free(tracks); }
/** * A track has ended. Remove it from the playlist. * * Called from the main loop when the music_delivery() callback has set g_playback_done. */ static void track_ended(void) { int tracks = 0; if (g_currenttrack) { g_currenttrack = NULL; sp_session_player_unload(g_sess); if (g_remove_tracks) { sp_playlist_remove_tracks(g_jukeboxlist, &tracks, 1); } else { ++g_track_index; try_jukebox_start(); } } }
svn_error_t *output_diff_modified(void *output_baton, apr_off_t original_start, apr_off_t original_length, apr_off_t modified_start, apr_off_t modified_length, apr_off_t latest_start, apr_off_t latest_length) { struct output_baton_t *baton = (struct output_baton_t *) output_baton; if (original_length > 0) { int tracks[original_length]; for (int i = 0; i < original_length; i++) tracks[i] = modified_start + i; sp_error remove_tracks_error = sp_playlist_remove_tracks(baton->playlist, tracks, original_length); if (remove_tracks_error != SP_ERROR_OK) return wrap_spotify_error(remove_tracks_error); } if (modified_length > 0) { const sp_track *tracks[modified_length]; for (int i = 0; i < modified_length; i++) tracks[i] = baton->tracks[modified_start + i]; sp_error add_tracks_error = sp_playlist_add_tracks(baton->playlist, tracks, modified_length, modified_start, baton->session); if (add_tracks_error != SP_ERROR_OK) return wrap_spotify_error(add_tracks_error); } return SVN_NO_ERROR; }
PHP_METHOD(SpotifyPlaylist, removeTrack) { zval *z_index; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &z_index) == FAILURE) { return; } int *tracks = (int*)emalloc(sizeof(int) * 1); tracks[0] = Z_LVAL_P(z_index); spotifyplaylist_object *p = (spotifyplaylist_object*)zend_object_store_get_object(getThis() TSRMLS_CC); sp_error error = sp_playlist_remove_tracks(p->playlist, tracks, 1); efree(tracks); if (SP_ERROR_OK == error) { RETURN_TRUE; } else { RETURN_FALSE; } }
static PyObject *Playlist_remove_tracks(Playlist *self, PyObject *args) { PyObject *py_tracks; PyObject *item; sp_error err; int *tracks; int num_tracks; int playlist_length; int i; if(!PyArg_ParseTuple(args, "O", &py_tracks)) return NULL; if (!PySequence_Check(py_tracks)) { PyErr_SetString(PyExc_TypeError, "expected sequence"); return NULL; } num_tracks = PySequence_Size(py_tracks); tracks = (int *) malloc(sizeof(tracks)*num_tracks); playlist_length = sp_playlist_num_tracks(self->_playlist); for (i = 0; i < num_tracks; i++) { item = PySequence_GetItem(py_tracks, i); if (!PyInt_Check(item)) { free(tracks); PyErr_SetString(PyExc_TypeError, "expected sequence of integers"); return NULL; } tracks[i] = (int)PyInt_AsLong(item); if (tracks[i] > playlist_length) { PyErr_SetString(PyExc_IndexError, "specified track does not exist"); return NULL; } Py_DECREF(item); } Py_BEGIN_ALLOW_THREADS err = sp_playlist_remove_tracks(self->_playlist, tracks, num_tracks); Py_END_ALLOW_THREADS return handle_error(err); }