From c9689f08269ddff5e41a16d035c060eef0348e4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anton=20Luka=20=C5=A0ijanec?= Date: Wed, 22 Sep 2021 21:29:28 +0200 Subject: grem spat. se ne kompajla. bom popravil ju3. zrihtal DM --- src/h.c | 47 +++++++++++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 16 deletions(-) (limited to 'src/h.c') diff --git a/src/h.c b/src/h.c index 1a0988b..fd0d40a 100644 --- a/src/h.c +++ b/src/h.c @@ -17,6 +17,11 @@ #define DC_LWS_MAX_FD 64 /* max file descriptors LWS will have open. if unset, LWS acquires all unused */ #define DC_LWS_MAX_HEADER_LENGTH 64 /* _MAX_HEADER_LENGTH*_HEADERS_LENGTH is allocated for every reque */ #define DC_WS_PING_FORMAT "{\"op\":1,\"d\":%lld}" +#ifdef DC_UI_GTK +#define DC_IF_UI_GTK(...) __VA_ARGS__ +#else +#define DC_IF_UI_GTK(...) +#endif /* it's strongly recommended to calloc structs during initialization. */ enum dc_status { /* theese are flags and should be and-checked */ DC_UNSET = 0, /* default value when enum is calloced */ @@ -48,12 +53,13 @@ enum dc_status { /* theese are flags and should be and-checked */ DC_INTERNAL = DC_FROM_LWS | DC_FROM_API, /* call originates from an internal function */ }; /* note: when checking status, first check for DC_OK, if it's set then disregard errors! */ enum dc_permissions { /* other permissions exist, but are not implemented/understood */ - DC_ALL_PERMISSIONS = 1 << 3, /* this is incredibly retarded, why is this SEPARATE?!? - admins */ + DC_ADMIN = 1 << 3, /* this is incredibly retarded, why is this SEPARATE?!? - admins */ DC_CHANNEL_VIEW = 1 << 10, /* all enum fields here have values same as the server values */ DC_MESSAGE_SEND = 1 << 11, DC_MESSAGE_READ = 1 << 16, /* na tistem vegova serverju sem lahko pošiljal ne pa bral sporočil */ DC_VOICE_LISTEN = 1 << 20, - DC_VOICE_SPEAK = 1 << 21 + DC_VOICE_SPEAK = 1 << 21, + DC_ALL_PERMISSIONS = DC_ADMIN | DC_CHANNEL_VIEW | DC_MESSAGE_SEND | DC_MESSAGE_READ | DC_VOICE_LISTEN | DC_VOICE_SPEAK /* admins get this@parsing, UI need not check admin separatly */ }; /* all enum fields here have values same as the values that the server sends */ enum dc_channel_type { /* other types exist, but are not implemented/understood */ DC_GC = 0, /* guild channel */ @@ -187,10 +193,15 @@ enum dc_json_paths { /* lws reduces the following char array to uint8_t, so we c DC_JSON_DM, DC_JSON_DM_TYPE, DC_JSON_DM_ID, + DC_JSON_DM_NAME, /* yes, some do have names. */ DC_JSON_DM_USER, /* this is the ID */ DC_JSON_GUILD, DC_JSON_GUILD_NAME, DC_JSON_GUILD_ID, + DC_JSON_GUILD_ROLE, + DC_JSON_GUILD_ROLE_PERMISSION, + DC_JSON_GUILD_ROLE_NAME, + DC_JSON_GUILD_ROLE_ID, DC_JSON_GUILD_CHANNEL, DC_JSON_GUILD_CHANNEL_TYPE, DC_JSON_GUILD_CHANNEL_NAME, @@ -201,10 +212,6 @@ enum dc_json_paths { /* lws reduces the following char array to uint8_t, so we c DC_JSON_GUILD_CHANNEL_PERMISSION_ID, DC_JSON_GUILD_CHANNEL_PERMISSION_DENY, DC_JSON_GUILD_CHANNEL_PERMISSION_ALLOW, - DC_JSON_GUILD_ROLE, - DC_JSON_GUILD_ROLE_PERMISSION, - DC_JSON_GUILD_ROLE_NAME, - DC_JSON_GUILD_ROLE_ID, DC_JSON_MESSAGE, DC_JSON_MESSAGE_ATTACHMENTS, DC_JSON_MESSAGE_ID, @@ -268,10 +275,15 @@ char * dc_json_paths[] = { /* array of paths we are interested in */ "d.private_channels[]", "d.private_channels[].type", "d.private_channels[].id", - "d.private_channels[].recipients_ids[]", + "d.private_channels[].name", + "d.private_channels[].recipient_ids", "d.guilds[]", "d.guilds[].name", "d.guilds[].id", + "d.guilds[].roles[]", + "d.guilds[].roles[].permissions", + "d.guilds[].roles[].name", + "d.guilds[].roles[].id", "d.guilds[].channels[]", "d.guilds[].channels[].type", "d.guilds[].channels[].name", @@ -282,10 +294,6 @@ char * dc_json_paths[] = { /* array of paths we are interested in */ "d.guilds[].channels[].permission_overwrites.id", "d.guilds[].channels[].permission_overwrites.deny", "d.guilds[].channels[].permission_overwrites.allow", - "d.guilds[].roles[]", - "d.guilds[].roles[].permissions", - "d.guilds[].roles[].name", - "d.guilds[].roles[].id", "d", "d.attachments[]", "d.id", @@ -396,8 +404,7 @@ struct dc_guild { struct dc_client * client; /* nofree */ struct dc_channel * channel; /* nofree - first channel */ struct dc_role * role; /* nofree - first role. NOTE: role->id == guild->id => @everyone role */ - enum dc_permissions permissions; - enum dc_status status; + enum dc_status status; /* /\ if NULL then assume all permissions - a DM guild */ #ifdef DC_UI_GTK GtkTreeIter iter; /* NOTE: only works when GtkTreeModel has a flag GTK_TREE_MODEL_ITERS_PERSIST; see paragraph 8 of description of file:///usr/share/doc/libgtk-3-doc/gtk3/GtkTreeModel.html */ gboolean is_iter; @@ -458,7 +465,7 @@ struct dc_channel { unsigned long long int id; enum dc_channel_type type; struct dc_guild * guild; /* nofree */ - struct dc_channel * next; /* nofree - next channel (linked list of all guilds of dc_guild) */ + struct dc_channel * next; /* nofree - next channel (linked list of all channel of dc_guild) */ struct dc_message * message; /* nofree - first message (ordered by time) */ struct dc_permission * permission; /* nofree - first permission */ enum dc_status status; @@ -510,7 +517,7 @@ struct dc_role { DC_STRUCT_PREFIX char * name; /* yesfree */ unsigned long long int id; - enum dc_permissions permissions; + enum dc_permissions permissions; /* this are guild permission */ struct dc_guild * guild; /* nofree - owner of the role */ struct dc_role * next; /* nofree - next role (linked list of all roles of dc_guild) */ struct dc_role_membership * role_membership; /* nofree - first role membership ll) */ @@ -563,7 +570,7 @@ void dc_user_free (struct dc_user * s, enum dc_status t) { free(s); } struct dc_permission { /* permissions can be individual on a per-channel basis */ - DC_STRUCT_PREFIX + DC_STRUCT_PREFIX /* assume all permissions */ enum dc_permissions allow; enum dc_permissions deny; unsigned long long int id; /* to whom does this permission apply */ @@ -771,3 +778,11 @@ DC_FIND_LL_X(channel) DC_GEN_X(guild, GUILD) #define DC_ISAE(a) &a, &a##_sizeof, &a##_length /* ISA Expand */ #define DC_ISAN NULL, NULL, NULL /* ISA NULL */ +#define DC_TRANSFER_CHANNEL(n, o) do { /* n is going to DC_REPLACE o, transfer important data */ \ + n->message = o->message; \ + n->next = o->next; \ + DC_IF_UI_GTK( \ + memcpy(pass->api_io.channel->iter, ch->iter, sizeof(GtkTreeIter)); \ + pass->api_io.channel->is_iter = ch->is_iter; \ + ) \ + } while(0) -- cgit v1.2.3