From 4f29839de59113909564cca465426891f3e69937 Mon Sep 17 00:00:00 2001 From: evgeny Date: Tue, 22 Sep 2026 18:26:44 +0300 Subject: [PATCH] =?UTF-8?q?chat:=20=D0=B8=D0=BD=D0=B2=D0=B0=D0=B9=D1=82?= =?UTF-8?q?=D0=B5=D1=80=20=D1=88=D0=BB=D1=91=D1=82=20CONNECT=5FRESULT(0)?= =?UTF-8?q?=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BF=D1=80=D0=B8=D1=91?= =?UTF-8?q?=D0=BC=D0=B0=20=D0=B4=D0=B6=D0=BE=D0=B9=D0=BD=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - chat_join_process_request: постить CHAT_EVT_CONNECT_RESULT(result=0) в GUI инвайтера (иначе диалог «Пригласить в канал» висел на «ожидание ответа») - cs_handle_join_request: снять pending_invite_* и погасить invite_send_timer после join --- src/chat/chat_join.c | 6 ++++++ src/chat/chat_sync.c | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/src/chat/chat_join.c b/src/chat/chat_join.c index f2c3b2e5..3259d079 100644 --- a/src/chat/chat_join.c +++ b/src/chat/chat_join.c @@ -7,6 +7,7 @@ #include "chat_join.h" #include "member_sync.h" +#include "chat_event.h" #include "../utun_instance.h" #include "../routing_layer/topo_node_sqlite.h" @@ -196,6 +197,11 @@ void chat_join_process_request(struct UTUN_INSTANCE* inst, uint64_t group_id, CJ_ID, (unsigned long long)m.node_id, ch_id); } } + /* уведомить GUI инвайтера об успешном присоединении джойнера */ + uint8_t cevt[20]; memcpy(cevt, &m.node_id, 8); + int r = 0; memcpy(cevt + 8, &r, 4); + memcpy(cevt + 12, &group_id, 8); + chat_event_post(inst, CHAT_EVT_CONNECT_RESULT, cevt, 20); } DEBUG_INFO(DEBUG_CATEGORY_CHAT_SYNC, "%s: process_request accepted joiner=0x%016llx ch=%s via=0x%016llx key=%016llx — signed by me", diff --git a/src/chat/chat_sync.c b/src/chat/chat_sync.c index f9b9787c..7773e694 100644 --- a/src/chat/chat_sync.c +++ b/src/chat/chat_sync.c @@ -1335,6 +1335,13 @@ static void cs_handle_join_request(struct chat_sync* cs, uint64_t peer, отправляем JOIN_READY напрямую, если мембер реально добавлен. */ if (topo_node_sqlite_member_in_channel(cs->inst->topo_sqlite_db, ch_id, m.node_id)) cs_send_join_ready(cs, ch_id, m.node_id); + /* join завершён — снять pending-состояние инвайтера и таймер ожидания */ + if (cs->pending_invite_ch_id == channel_id && cs->pending_invite_node_id == m.node_id) { + if (cs->invite_send_timer) { uasync_cancel_timeout(cs->inst->ua, cs->invite_send_timer); cs->invite_send_timer = NULL; } + cs->pending_invite_ch_id = 0; + cs->pending_invite_node_id = 0; + cs->pending_invite_is_inviter = 0; + } } else { chat_join_forward_request(cs->inst, channel_id, inviter, join_key, &m); }