invitedialog: show decoded link info on text change (paste), not just on Send click
This commit is contained in:
1 parent
f8d98cab47
commit
262dc9bb51
1 file changed
+51
@@ -97,6 +97,7 @@ InviteDialog::InviteDialog(const QString& link, const QString& channelId,
|
||||
layout->addLayout(invBtnLayout);
|
||||
|
||||
connect(m_inviteLinkEdit, &QLineEdit::returnPressed, this, &InviteDialog::onSendInvite);
|
||||
connect(m_inviteLinkEdit, &QLineEdit::textChanged, this, &InviteDialog::onInviteLinkTextChanged);
|
||||
|
||||
auto *closeBtn = new QPushButton("OK", this);
|
||||
connect(closeBtn, &QPushButton::clicked, this, &QDialog::accept);
|
||||
@@ -118,6 +119,56 @@ void InviteDialog::onInviteByLink() {
|
||||
}
|
||||
|
||||
void InviteDialog::onInviteLinkTextChanged() {
|
||||
QString link = m_inviteLinkEdit->text().trimmed();
|
||||
if (link.isEmpty()) {
|
||||
m_inviteStatusLabel->setStyleSheet("color: gray; font-size: 11px; padding: 2px 0;");
|
||||
m_inviteStatusLabel->clear();
|
||||
return;
|
||||
}
|
||||
if (!link.startsWith(QLatin1String("utun://"))) {
|
||||
m_inviteStatusLabel->setStyleSheet("color: gray; font-size: 11px; padding: 2px 0;");
|
||||
m_inviteStatusLabel->setText("Ожидается utun:// ссылка...");
|
||||
return;
|
||||
}
|
||||
|
||||
InviteData d = decodeInviteLink(link);
|
||||
if (!d.error.isEmpty()) {
|
||||
m_inviteStatusLabel->setStyleSheet("color: gray; font-size: 11px; padding: 2px 0;");
|
||||
m_inviteStatusLabel->setText("Неверная ссылка: " + d.error);
|
||||
return;
|
||||
}
|
||||
|
||||
uint64_t targetNodeId = sc_derive_node_id_from_pubkey((const uint8_t*)d.pubkey.constData());
|
||||
uint64_t myNodeId = m_node ? m_node->nodeIdHex().toULongLong(nullptr, 16) : 0;
|
||||
QString pkHex = QString::fromLatin1(d.pubkey.toHex());
|
||||
QString pkShort = pkHex.left(8) + ".." + pkHex.right(4);
|
||||
QString addrInfo;
|
||||
for (int i = 0; i < d.addrs.size() && i < 3; i++) {
|
||||
if (i > 0) addrInfo += ", ";
|
||||
if (d.addrs[i].family == 4 && d.addrs[i].address.size() >= 4) {
|
||||
uint32_t ip4 = 0; memcpy(&ip4, d.addrs[i].address.constData(), 4);
|
||||
addrInfo += QString("%1.%2.%3.%4:%5")
|
||||
.arg((ip4>>24)&0xFF).arg((ip4>>16)&0xFF).arg((ip4>>8)&0xFF).arg(ip4&0xFF)
|
||||
.arg(d.addrs[i].port);
|
||||
} else {
|
||||
addrInfo += QString("v%1:%2").arg(d.addrs[i].family).arg(d.addrs[i].port);
|
||||
}
|
||||
}
|
||||
if (d.addrs.size() > 3) addrInfo += QString(" +%1 more").arg(d.addrs.size() - 3);
|
||||
|
||||
QString diag = QString("Ссылка: узел 0x%1 ключ %2, %3 адр. (%4)")
|
||||
.arg(targetNodeId, 16, 16, QChar('0'))
|
||||
.arg(pkShort)
|
||||
.arg(d.addrs.size())
|
||||
.arg(addrInfo);
|
||||
|
||||
if (myNodeId != 0 && myNodeId == targetNodeId) {
|
||||
m_inviteStatusLabel->setStyleSheet("color: #E67E22; font-size: 11px; padding: 2px 0;");
|
||||
m_inviteStatusLabel->setText(diag + " ⚠ Это ваша собственная ссылка");
|
||||
} else {
|
||||
m_inviteStatusLabel->setStyleSheet("color: gray; font-size: 11px; padding: 2px 0;");
|
||||
m_inviteStatusLabel->setText(diag);
|
||||
}
|
||||
}
|
||||
|
||||
void InviteDialog::setInviteStatus(const QString& text, bool isError) {
|
||||
|
||||
Reference in new issue
Block a user