chatgui: invite link connect flow + GUI_ERROR always-on diagnostics
- debug_ui.h: remove NDEBUG guard so GUI_ERROR works in Release builds - invite_link.h/cpp: add error field to InviteData with specific failure reason - joindialog: show exact decode error in QLabel instead of generic message - chat_sync: implement invite connect flow (CHANNEL_INFO_REQ/RESP, JOIN, WELCOME) - topo_node_sqlite: node/address table init and lookup - utun_node: getInviteAddresses fallback from ETCP sockets - minor fixes in mainwindow, chat_core, gui_bridge
This commit is contained in:
1 parent
102816d0dc
commit
85a91a1320
17 files changed
+747
-127
No files matched your search
@@ -77,9 +77,9 @@ JoinDialog::JoinDialog(UtunNode* node, DbManager* db, QWidget* parent)
|
||||
|
||||
connect(m_linkEdit, &QLineEdit::returnPressed, this, &JoinDialog::onConnectClicked);
|
||||
|
||||
gui_bridge_set_connect_result_cb([](uint64_t nodeId, int result) {
|
||||
gui_bridge_set_connect_result_cb([](uint64_t nodeId, uint64_t channelId, int result) {
|
||||
JoinDialog* dlg = qobject_cast<JoinDialog*>(QApplication::activeModalWidget());
|
||||
if (dlg) dlg->onConnectResult(nodeId, result);
|
||||
if (dlg) dlg->onConnectResult(nodeId, channelId, result);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -105,8 +105,12 @@ void JoinDialog::onConnectClicked() {
|
||||
|
||||
setStatus("Parsing link...");
|
||||
InviteData d = decodeInviteLink(link);
|
||||
if (d.channelId.isEmpty() || d.pubkey.size() != 32) {
|
||||
setStatus("Invalid invite link.", true);
|
||||
if (!d.error.isEmpty()) {
|
||||
setStatus("Invalid invite link: " + d.error, true);
|
||||
return;
|
||||
}
|
||||
if (d.pubkey.size() != 32) {
|
||||
setStatus(QString("Invalid invite link: pubkey is %1 bytes (need 32)").arg(d.pubkey.size()), true);
|
||||
return;
|
||||
}
|
||||
if (d.addrs.isEmpty()) {
|
||||
@@ -124,6 +128,7 @@ void JoinDialog::onConnectClicked() {
|
||||
nodeId &= 0x7FFFFFFFFFFFFFFFULL;
|
||||
|
||||
m_pendingNodeId = nodeId;
|
||||
m_pendingChannelId = d.channelId;
|
||||
m_connecting = true;
|
||||
m_connectBtn->setEnabled(false);
|
||||
m_linkEdit->setReadOnly(true);
|
||||
@@ -138,21 +143,23 @@ void JoinDialog::onConnectClicked() {
|
||||
addrsBuf.append(static_cast<char>(a.port & 0xFF));
|
||||
}
|
||||
|
||||
QByteArray chId = d.channelId.toUtf8();
|
||||
int addrCount = d.addrs.size();
|
||||
|
||||
chat_sync_connect_from_invite(nodeId,
|
||||
chat_sync_connect_from_invite(d.channelId, nodeId,
|
||||
(const uint8_t*)d.pubkey.constData(),
|
||||
(const uint8_t*)addrsBuf.constData(), addrCount,
|
||||
(const uint8_t*)chId.constData(), chId.size());
|
||||
(const uint8_t*)addrsBuf.constData(), addrCount);
|
||||
}
|
||||
|
||||
void JoinDialog::onConnectResult(uint64_t nodeId, int result) {
|
||||
void JoinDialog::onConnectResult(uint64_t nodeId, uint64_t channelId, int result) {
|
||||
if (!m_connecting || nodeId != m_pendingNodeId) return;
|
||||
|
||||
if (result == 0) {
|
||||
setStatus("Connected successfully!");
|
||||
QTimer::singleShot(800, this, [this] { accept(); });
|
||||
setStatus("Connected! Waiting for channel data...");
|
||||
QTimer::singleShot(800, this, [this] {
|
||||
QString cid = QString::number(m_pendingChannelId);
|
||||
emit joined(cid);
|
||||
accept();
|
||||
});
|
||||
} else {
|
||||
m_connecting = false;
|
||||
m_connectBtn->setEnabled(true);
|
||||
|
||||
Reference in new issue
Block a user