From f2529fd624941e38b219748c690858151fcfee71 Mon Sep 17 00:00:00 2001 From: evgeny Date: Mon, 2 Nov 2026 23:34:06 +0100 Subject: [PATCH] Include subgroup rename command used by the member context menu --- tools/chatgui/src/devgroupdialog.cpp | 28 ++++++++++++++++++++++++++++ tools/chatgui/src/devgroupdialog.h | 2 ++ 2 files changed, 30 insertions(+) diff --git a/tools/chatgui/src/devgroupdialog.cpp b/tools/chatgui/src/devgroupdialog.cpp index 12a531066..1dcbd3dc2 100644 --- a/tools/chatgui/src/devgroupdialog.cpp +++ b/tools/chatgui/src/devgroupdialog.cpp @@ -25,6 +25,7 @@ extern "C" { class DevgroupDialog; static QPointer active; static QHash> leaveRequests; +static QHash> renameRequests; static quint64 nextRequest = 0; static QPointer invitationWindow; static quint64 statusRequest = 0, lastAutomaticSnapshot = 0; @@ -92,6 +93,15 @@ static void devgroupResult(const uint8_t* data, int len) { } else { if (len >= 9) { quint64 id = 0; for (int i = 0; i < 8; ++i) id |= quint64(data[i]) << (8*i); + if (renameRequests.contains(id)) { + const auto parent = renameRequests.take(id); + if (!data[8]) { + DEBUG_WARN(DEBUG_CATEGORY_CHAT, "devgroup UI: rename refused"); + if (parent) QMessageBox::warning(parent, QCoreApplication::translate("ChatGui", "Rename"), + QCoreApplication::translate("ChatGui", "Could not rename device group")); + } else DEBUG_INFO(DEBUG_CATEGORY_CHAT, "devgroup UI: group renamed"); + return; + } if (leaveRequests.contains(id)) { const auto button = leaveRequests.take(id); if (!data[8]) { @@ -203,3 +213,21 @@ void disconnectMyDevice(QPushButton* button) { } leaveRequests.insert(id, button); button->setEnabled(false); } + +void renameMyDeviceGroup(QWidget* parent, const QString& name) { + const auto bytes = name.toUtf8(); + if (bytes.isEmpty() || bytes.size() > 63 || bytes.contains('\0')) { + DEBUG_WARN(DEBUG_CATEGORY_CHAT, "devgroup UI: rename invalid name bytes=%lld", (long long)bytes.size()); return; + } + auto* req = static_cast(u_calloc(1, sizeof(chat_devgroup_request))); + if (!req) { DEBUG_ERROR(DEBUG_CATEGORY_CHAT, "devgroup UI: rename allocation failed"); return; } + req->inst = gui_bridge_get_inst(); req->action = CHAT_DEVGROUP_RENAME; req->request_id = ++nextRequest; + memcpy(req->text, bytes.constData(), bytes.size()); + const quint64 id = req->request_id; gui_bridge_set_devgroup_result_cb(devgroupResult); + if (gui_bridge_post_uasync_owned_fn(chat_devgroup_trampoline, req) < 0) { + u_free(req); DEBUG_WARN(DEBUG_CATEGORY_CHAT, "devgroup UI: rename enqueue failed"); + QMessageBox::warning(parent, QCoreApplication::translate("ChatGui", "Rename"), DevgroupDialog::tr("Core unavailable")); return; + } + renameRequests.insert(id, parent); + DEBUG_INFO(DEBUG_CATEGORY_CHAT, "devgroup UI: rename submitted name_bytes=%lld", (long long)bytes.size()); +} diff --git a/tools/chatgui/src/devgroupdialog.h b/tools/chatgui/src/devgroupdialog.h index 81a15418b..ec04f1853 100644 --- a/tools/chatgui/src/devgroupdialog.h +++ b/tools/chatgui/src/devgroupdialog.h @@ -11,4 +11,6 @@ void initDevgroupUi(QWidget* window); void inviteMyDevice(QWidget* parent, const QString& channel, quint64 peer); /* Отключить self; кнопка блокируется до результата, при отказе восстанавливается и показывается ошибка. */ void disconnectMyDevice(QPushButton* button); +/* Отправить новое имя своей группы в ядро; результат/ошибка привязаны к живому окну parent. */ +void renameMyDeviceGroup(QWidget* parent, const QString& name); #endif