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);
}