From 4b056a414f9eec40a4fb6517c45337a2016544dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anton=20Luka=20=C5=A0ijanec?= Date: Wed, 16 Feb 2022 08:40:26 +0100 Subject: =?UTF-8?q?nekaj=20sem=20delal=20v=20=C5=A1oli?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api.c | 43 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) (limited to 'src/api.c') diff --git a/src/api.c b/src/api.c index 0edbcdb..4520888 100644 --- a/src/api.c +++ b/src/api.c @@ -54,6 +54,20 @@ unsigned long long int dc_calculate_permissions (struct dc_user * u, struct dc_c } return p; } +struct dc_user * dc_parse_user (struct dc_user * dst, const cJSON * src) { + char * cp; + if (!dst) + dst = dc_user_init(); + if ((cp = cJSON_GetStringValue(cJSON_GetObjectItem(src, "username")))) + dst->user = strdup(cp); + if ((cp = cJSON_GetStringValue(cJSON_GetObjectItem(src, "discriminator")))) + dst->discriminator = atoi(cp); + else + dst->discriminator = -1; + if ((cp = cJSON_GetStringValue(cJSON_GetObjectItem(src, "id")))) + dst->id = strtoull(cp, NULL, 10); + return dst; +} static int dc_lws_cb (struct lws * wsi, enum lws_callback_reasons rs, void * us, void * in, size_t len) { struct dc_lws_pass * pass = (struct dc_lws_pass *) us; unsigned char buf[LWS_PRE+DC_LWS_BUF+1]; /* whooh, boy, this is more than a meg of stack! */ @@ -194,7 +208,7 @@ static int dc_lws_cb (struct lws * wsi, enum lws_callback_reasons rs, void * us, char * serialized = dc_json(pass->json, in, len); while (serialized) { serialized = dc_json(handler, NULL, 0); - cJSON json = cJSON_Parse(serialized); + cJSON * json = cJSON_Parse(serialized); pass->api_io.client->last_packet = cJSON_GetNumberValue(cJSON_GetObjectItem(json, "s")); switch (cJSON_GetNumberValue(cJSON_GetObjectItem(json, "op"))) { @@ -204,10 +218,29 @@ static int dc_lws_cb (struct lws * wsi, enum lws_callback_reasons rs, void * us, default: break; } - double pi; - if ((pi = cJSON_GetNumberValue(cJSON_GetObjectItem2(json, - "d", "heartbeat_interval")) != NAN)) - pass->api_io.client->ping_interval = pi; + double db; + if ((db = cJSON_GetNumberValue(cJSON_GetObjectItem2(json, + "d", "heartbeat_interval")) != NAN)) { + pass->api_io.client->ping_interval = pi/1000-1; + pass->api_io.client->last_ping = time(NULL); + } + cJSON * obj; + if ((obj = cJSON_GetObjectItem(json, "d", "user"))) { /* parsing */ + struct dc_user * user; /* single */ + user = dc_parse_user(NULL, obj); /* user */ + user = dc_addr_user(program, NULL, user, + DC_MAY_FREE | DC_REPLACE); + if (!pass->api_io.client->user) /* 1. user is us in d.user */ + pass->api_io.client->user = user; + } + cJSON_ArrayForEach(user, cJSON_GetObjectItem(json, "users")) { + struct dc_user * user = dc_parse_user(NULL, obj); + if (user) /* parsing an array of users */ + dc_addr_user(program, NULL, user, + DC_MAY_FREE | DC_REPLACE); + } +#define DC_PTYP(t) (!strcmp(cJSON_GetStringValue(cJSON_GetObjectItem(json, "t")), t)) + if (DC_PTYP("MESSAGE_CREATE")); cJSON_Delete(json); json = NULL; } -- cgit v1.2.3