// Will wrap an error message in a JSON object before sending it static void send_error(struct evhttp_request *request, int code, const char *message) { json_t *error_object = json_object(); json_object_set_new(error_object, "message", json_string(message)); send_reply_json(request, code, message, error_object); }
static void get_playlist_collaborative(sp_playlist *playlist, struct evhttp_request *request, void *userdata) { assert(sp_playlist_is_loaded(playlist)); json_t *json = json_object(); playlist_to_json_set_collaborative(playlist, json); send_reply_json(request, HTTP_OK, "OK", json); }
// Responds with an entire playlist static void get_playlist(sp_playlist *playlist, struct evhttp_request *request, void *userdata) { json_t *json = json_object(); if (playlist_to_json(playlist, json) == NULL) { json_decref(json); send_error(request, HTTP_ERROR, ""); return; } send_reply_json(request, HTTP_OK, "OK", json); }
static void get_playlist_subscribers(sp_playlist *playlist, struct evhttp_request *request, void *userdata) { assert(sp_playlist_is_loaded(playlist)); sp_subscribers *subscribers = sp_playlist_subscribers(playlist); json_t *array = json_array(); for (int i = 0; i < subscribers->count; i++) { char *subscriber = subscribers->subscribers[i]; json_array_append_new(array, json_string(subscriber)); } send_reply_json(request, HTTP_OK, "OK", array); }
static void get_user_playlists(sp_playlistcontainer *pc, struct evhttp_request *request, void *userdata) { json_t *json = json_object(); json_t *playlists = json_array(); json_object_set_new(json, "playlists", playlists); for (int i = 0; i < sp_playlistcontainer_num_playlists(pc); i++) { sp_playlist *playlist = sp_playlistcontainer_playlist(pc, i); if (!sp_playlist_is_loaded(playlist)) // TODO(liesen): Wait for it to load? continue; json_t *playlist_json = json_object(); playlist_to_json(playlist, playlist_json); json_array_append_new(playlists, playlist_json); } send_reply_json(request, HTTP_OK, "OK", json); }
static void get_user_playlists(sp_playlistcontainer *pc, struct evhttp_request *request, void *userdata) { json_t *json = json_object(); json_t *playlists = json_array(); json_object_set_new(json, "playlists", playlists); int status = HTTP_OK; for (int i = 0; i < sp_playlistcontainer_num_playlists(pc); i++) { sp_playlist *playlist = sp_playlistcontainer_playlist(pc, i); if (!sp_playlist_is_loaded(playlist)) { status = HTTP_PARTIAL; continue; } json_t *playlist_json = json_object(); playlist_to_json(playlist, playlist_json); json_array_append_new(playlists, playlist_json); } send_reply_json(request, status, status == HTTP_OK ? "OK" : "Partial Content", json); }