static void schedule_meeting_cb()

in chime/chime-meeting.c [644:682]


static void schedule_meeting_cb(ChimeConnection *cxn, SoupMessage *msg,
				JsonNode *node, gpointer user_data)
{
	GTask *task = G_TASK(user_data);

	if (SOUP_STATUS_IS_SUCCESSFUL(msg->status_code) && node) {
		GError *error = NULL;
		ChimeScheduledMeeting *mtg = parse_scheduled_meeting(node, &error);
		if (mtg)
			g_task_return_pointer(task, mtg, (GDestroyNotify)chime_scheduled_meeting_free);
		else
			g_task_return_error(task, error);
	} else {
		const gchar *reason = msg->reason_phrase;

		if (node && !parse_string(node, "Message", &reason)) {
			JsonObject *obj = json_node_get_object(node);
			node = json_object_get_member(obj, "errors");
			if (node) {
				obj = json_node_get_object(node);
				node = json_object_get_member(obj, "attendees");
			}
			if (node) {
				JsonArray *arr = json_node_get_array(node);
				if (arr && json_array_get_length(arr) > 0) {
					node = json_array_get_element(arr, 0);
					parse_string(node, "message", &reason);
				}
			}
		}

		g_task_return_new_error(task, CHIME_ERROR,
					CHIME_ERROR_NETWORK,
					_("Failed to obtain meeting PIN info: %s"),
					reason);
	}

	g_object_unref(task);
}