Add local per-member radio mute controls on desktop and Android
This commit is contained in:
1 parent
a069d11ef9
commit
7e19cbaf3a
33 files changed
+735
-27
No files matched your search
@@ -13,6 +13,7 @@ extern "C" {
|
||||
#include "../../../src/routing_layer/topo_node.h"
|
||||
#include "../../../src/routing_layer/topo_group.h"
|
||||
#include "../../../src/member_files/protocol.h"
|
||||
#include "../../../src/chat/chat_member.h"
|
||||
}
|
||||
|
||||
/* ── Внутренний объект-приёмник в GUI-потоке ── */
|
||||
@@ -72,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_radio_mute_result_cb = nullptr;
|
||||
static gui_network_changed_fn g_network_changed_cb = nullptr;
|
||||
static struct UASYNC* g_ua = nullptr;
|
||||
static struct UTUN_INSTANCE* g_inst = nullptr;
|
||||
@@ -86,6 +88,9 @@ 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_RADIO_MUTE_RESULT:
|
||||
if (g_radio_mute_result_cb) g_radio_mute_result_cb(d, dlen);
|
||||
break;
|
||||
case CHAT_EVT_FEEDBACK_CHANGED:
|
||||
if (g_feedback_changed_cb) g_feedback_changed_cb(d, dlen);
|
||||
break;
|
||||
@@ -591,6 +596,22 @@ 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_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) {
|
||||
if (!g_inst || !uasync_is_running(g_ua) || !channel_id || !channel_id[0] || strlen(channel_id) >= 64 || !node_id) {
|
||||
DEBUG_ERROR(DEBUG_CATEGORY_RADIO, "radio: GUI mute request rejected: core unavailable or invalid member"); return -1;
|
||||
}
|
||||
auto* req = static_cast<chat_member_radio_mute_req*>(u_calloc(1, sizeof(chat_member_radio_mute_req)));
|
||||
auto* post = static_cast<posted_task*>(u_calloc(1, sizeof(posted_task)));
|
||||
if (!req || !post) {
|
||||
DEBUG_ERROR(DEBUG_CATEGORY_RADIO, "radio: GUI mute request allocation failed"); u_free(req); u_free(post); return -1;
|
||||
}
|
||||
req->inst = g_inst; req->node_id = node_id; strcpy(req->ch_id, channel_id);
|
||||
post->callback = chat_core_toggle_member_radio_mute_trampoline; post->arg = req;
|
||||
uasync_post_reserved(g_ua, post);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void gui_bridge_set_dm_conv_updated_cb(gui_dm_conv_updated_fn cb) {
|
||||
g_dm_conv_updated_cb = cb;
|
||||
|
||||
Reference in new issue
Block a user