From 49e898b6f3f1194dc8689de53118a6677deb3acc Mon Sep 17 00:00:00 2001 From: evgeny Date: Thu, 8 Oct 2026 00:24:35 +0200 Subject: [PATCH] Deliver channel submission acknowledgements to the desktop composer --- tools/chatgui/src/mainwindow.cpp | 4 ++++ tools/chatgui/transport/gui_bridge.h | 1 + tools/chatgui/transport/gui_bridge_impl.cpp | 6 ++++++ 3 files changed, 11 insertions(+) diff --git a/tools/chatgui/src/mainwindow.cpp b/tools/chatgui/src/mainwindow.cpp index 77fa8444..6ed54ff4 100644 --- a/tools/chatgui/src/mainwindow.cpp +++ b/tools/chatgui/src/mainwindow.cpp @@ -190,6 +190,7 @@ MainWindow::~MainWindow() { gui_bridge_set_group_avatar_result_cb(nullptr); gui_bridge_set_feedback_changed_cb(nullptr); gui_bridge_set_feedback_result_cb(nullptr); + gui_bridge_set_msg_submitted_cb(nullptr); gui_bridge_set_avatar_result_cb(nullptr); if (m_fileBrowser) delete m_fileBrowser.data(); gui_bridge_set_member_files_response_cb(nullptr); @@ -425,6 +426,9 @@ void MainWindow::setupBridgeCallbacks() { if (GroupAvatarManager::instance()) GroupAvatarManager::instance()->onResult(data, length); }); gui_bridge_set_msg_received_cb(onMsgReceivedCallback); + gui_bridge_set_msg_submitted_cb([](const uint8_t* data, int length) { + if (s_mainWindow && s_mainWindow->m_messageList) s_mainWindow->m_messageList->onMessageSubmitted(data, length); + }); gui_bridge_set_feedback_changed_cb([](const uint8_t* data, int length) { if (s_mainWindow && s_mainWindow->m_messageList) s_mainWindow->m_messageList->onFeedbackChanged(data, length); }); diff --git a/tools/chatgui/transport/gui_bridge.h b/tools/chatgui/transport/gui_bridge.h index a2ca2f1f..86fdab6a 100644 --- a/tools/chatgui/transport/gui_bridge.h +++ b/tools/chatgui/transport/gui_bridge.h @@ -246,6 +246,7 @@ void gui_bridge_set_group_avatar_result_cb(gui_dm_messages_fn cb); /* Опросы/реакции: адресное изменение и коррелированный ответ команды, в GUI-потоке. */ void gui_bridge_set_feedback_changed_cb(gui_dm_messages_fn cb); void gui_bridge_set_feedback_result_cb(gui_dm_messages_fn cb); +void gui_bridge_set_msg_submitted_cb(gui_dm_messages_fn cb); void gui_bridge_set_radio_mute_result_cb(gui_dm_messages_fn cb); int gui_bridge_toggle_member_radio_mute(const char* channel_id, uint64_t node_id); /* CHAT_EVT_ATTACHMENT_PREPARATION: target + job UUID + state. */ diff --git a/tools/chatgui/transport/gui_bridge_impl.cpp b/tools/chatgui/transport/gui_bridge_impl.cpp index 1c59d09b..0b989886 100644 --- a/tools/chatgui/transport/gui_bridge_impl.cpp +++ b/tools/chatgui/transport/gui_bridge_impl.cpp @@ -73,6 +73,7 @@ static gui_dm_messages_fn g_avatar_result_cb = nullptr; static gui_dm_messages_fn g_group_avatar_result_cb = nullptr; static gui_dm_messages_fn g_feedback_changed_cb = nullptr; static gui_dm_messages_fn g_feedback_result_cb = nullptr; +static gui_dm_messages_fn g_msg_submitted_cb = nullptr; static gui_dm_messages_fn g_radio_mute_result_cb = nullptr; static gui_network_changed_fn g_network_changed_cb = nullptr; static struct UASYNC* g_ua = nullptr; @@ -88,6 +89,10 @@ void GuiBridgeReceiver::processPost(int eventType, QByteArray data) { eventType == 16 || eventType == 17 || eventType == 24 || eventType == 25 || eventType == 31 || eventType == 33)) g_network_changed_cb(eventType); switch (eventType) { + case CHAT_EVT_MSG_SUBMITTED: + if (dlen != 9 || d[8] > 1) { DEBUG_ERROR(DEBUG_CATEGORY_CHAT, "invalid submission result bytes=%d", dlen); break; } + if (g_msg_submitted_cb) g_msg_submitted_cb(d, dlen); + break; case CHAT_EVT_RADIO_MUTE_RESULT: if (g_radio_mute_result_cb) g_radio_mute_result_cb(d, dlen); break; @@ -597,6 +602,7 @@ void gui_bridge_set_avatar_result_cb(gui_dm_messages_fn cb) { g_avatar_result_cb void gui_bridge_set_group_avatar_result_cb(gui_dm_messages_fn cb) { g_group_avatar_result_cb = cb; } void gui_bridge_set_feedback_changed_cb(gui_dm_messages_fn cb) { g_feedback_changed_cb = cb; } void gui_bridge_set_feedback_result_cb(gui_dm_messages_fn cb) { g_feedback_result_cb = cb; } +void gui_bridge_set_msg_submitted_cb(gui_dm_messages_fn cb) { g_msg_submitted_cb = cb; } void gui_bridge_set_radio_mute_result_cb(gui_dm_messages_fn cb) { g_radio_mute_result_cb = cb; } int gui_bridge_toggle_member_radio_mute(const char* channel_id, uint64_t node_id) {