chat: обрабатывать CHANNEL_INVITE/INFO_REQ для ещё не созданного канала + GUI-результат invite-by-link
- chat_sync: не дропать CHANNEL_INVITE/CHANNEL_INFO_REQ при отсутствии CHAT-группы (group_id == channel_id, выводим ch_id напрямую) — приглашение по ссылке на сервер теперь доходит до autojoin - inviteby: регистрация connect_result_cb, показ результата, автозакрытие при успехе - joindialog: исправлен маппинг кодов результата (2=timeout, -1=not found, -7=not init)
This commit is contained in:
1 parent
22da6bd832
commit
6c857ceab8
4 files changed
+45
-8
No files matched your search
@@ -63,6 +63,15 @@ InviteByLinkDialog::InviteByLinkDialog(const QString& channelId, UtunNode* node,
|
||||
|
||||
connect(m_inviteLinkEdit, &QLineEdit::returnPressed, this, &InviteByLinkDialog::onSendInvite);
|
||||
connect(m_inviteLinkEdit, &QLineEdit::textChanged, this, &InviteByLinkDialog::onInviteLinkTextChanged);
|
||||
|
||||
gui_bridge_set_connect_result_cb([](uint64_t nodeId, uint64_t channelId, int result) {
|
||||
InviteByLinkDialog* dlg = qobject_cast<InviteByLinkDialog*>(QApplication::activeModalWidget());
|
||||
if (dlg) dlg->onConnectResult(nodeId, channelId, result);
|
||||
});
|
||||
}
|
||||
|
||||
InviteByLinkDialog::~InviteByLinkDialog() {
|
||||
gui_bridge_set_connect_result_cb(nullptr);
|
||||
}
|
||||
|
||||
void InviteByLinkDialog::onInviteLinkTextChanged() {
|
||||
@@ -164,6 +173,7 @@ void InviteByLinkDialog::onSendInvite() {
|
||||
|
||||
m_inviteSending = true;
|
||||
m_inviteSendBtn->setEnabled(false);
|
||||
m_inviteTargetNodeId = targetNodeId;
|
||||
|
||||
GUI_INFO("invite_by_link: channel=%s target=0x%016llx addrs=%d",
|
||||
m_channelId.toUtf8().constData(), targetNodeId, d.addrs.size());
|
||||
@@ -184,9 +194,27 @@ void InviteByLinkDialog::onSendInvite() {
|
||||
(const uint8_t*)d.pubkey.constData(),
|
||||
(const uint8_t*)addrsBuf.constData(), d.addrs.size(), addrsBuf.size());
|
||||
|
||||
setInviteStatus(QString::fromUtf8("Приглашение отправлено. OK"));
|
||||
QTimer::singleShot(2000, this, [this]() {
|
||||
setInviteStatus(QString::fromUtf8("Приглашение отправлено, ожидание ответа..."));
|
||||
}
|
||||
|
||||
void InviteByLinkDialog::onConnectResult(uint64_t nodeId, uint64_t channelId, int result) {
|
||||
if (!m_inviteSending || nodeId != m_inviteTargetNodeId) return;
|
||||
|
||||
if (result == 0) {
|
||||
setInviteStatus(QString::fromUtf8("Узел присоединился к каналу."), false);
|
||||
QTimer::singleShot(400, this, &QDialog::accept);
|
||||
} else {
|
||||
m_inviteSending = false;
|
||||
m_inviteSendBtn->setEnabled(true);
|
||||
});
|
||||
m_inviteSendBtn->setFocus();
|
||||
|
||||
const char* errMsg = "Неизвестная ошибка.";
|
||||
switch (result) {
|
||||
case -1: errMsg = "Канал не найден."; break;
|
||||
case 2: errMsg = "Таймаут — узел не ответил."; break;
|
||||
case -7: errMsg = "Узел не инициализирован."; break;
|
||||
default: break;
|
||||
}
|
||||
setInviteStatus(QString::fromUtf8("Ошибка: %1").arg(QString::fromUtf8(errMsg)), true);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user