Wire desktop invitation sending and joining from message links
This commit is contained in:
1 parent
b7821121c3
commit
d369ff968d
2 files changed
+44
No files matched your search
@@ -4,6 +4,7 @@
|
||||
#include "messagedelegate.h"
|
||||
#include "accountlist.h"
|
||||
#include "invitedialog.h"
|
||||
#include "dminvitedialog.h"
|
||||
#include "inviteby.h"
|
||||
#include "joindialog.h"
|
||||
#include "settingsdialog.h"
|
||||
@@ -546,6 +547,9 @@ void MainWindow::setupConnects() {
|
||||
connect(m_accountList, &AccountList::callRequested, this, &MainWindow::onCallRequested);
|
||||
connect(m_messageList, &MessageList::callRequested, this, &MainWindow::onCallRequested);
|
||||
connect(m_accountList, &AccountList::pmRequested, this, &MainWindow::onPmRequested);
|
||||
connect(m_accountList, &AccountList::inviteRequested, this, &MainWindow::onInviteToPmRequested);
|
||||
connect(m_messageList, &MessageList::inviteRequested, this, &MainWindow::onInviteToPmRequested);
|
||||
connect(m_messageList, &MessageList::inviteLinkActivated, this, &MainWindow::onInviteLinkActivated);
|
||||
connect(m_messageList, &MessageList::readPositionChanged,
|
||||
this, [this](const QString& channelId, qint64 lastReadMsgId) {
|
||||
Q_UNUSED(lastReadMsgId);
|
||||
@@ -673,9 +677,47 @@ void MainWindow::onDmConvUpdated(const QString& convId) {
|
||||
if (!m_channelList) return;
|
||||
QString key = QStringLiteral("dm:") + convId;
|
||||
m_channelList->loadChannels();
|
||||
if (qobject_cast<DmInviteDialog*>(QApplication::activeModalWidget())) return;
|
||||
m_channelList->selectChannel(key);
|
||||
}
|
||||
|
||||
void MainWindow::onInviteToPmRequested(const QString& source, quint64 peer, const QString& name) {
|
||||
if (!m_db || !m_db->isOpen() || !m_node || !m_node->isRunning()) {
|
||||
GUI_ERROR("invite PM: node unavailable");
|
||||
QMessageBox::warning(this, QStringLiteral("Приглашение"), QStringLiteral("Ядро не запущено.")); return;
|
||||
}
|
||||
if (!peer || peer == m_db->myNodeId()) { GUI_ERROR("invite PM: invalid recipient"); return; }
|
||||
DmInviteDialog dialog(m_db, peer, name, source, this);
|
||||
if (dialog.exec() == QDialog::Accepted) {
|
||||
m_channelList->loadChannels();
|
||||
m_channelList->selectChannel(QStringLiteral("dm:") + dialog.conversationId());
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::onInviteLinkActivated(const QString& link) {
|
||||
const auto invite = decodeInviteLink(link);
|
||||
if (!invite.error.isEmpty()) {
|
||||
GUI_ERROR("invite link: invalid error=%s", qPrintable(invite.error));
|
||||
QMessageBox::warning(this, QStringLiteral("Приглашение"), QStringLiteral("Некорректная ссылка: ") + invite.error); return;
|
||||
}
|
||||
if (!m_db || !m_db->isOpen() || !m_node || !m_node->isRunning()) {
|
||||
GUI_ERROR("invite link: node unavailable");
|
||||
QMessageBox::warning(this, QStringLiteral("Приглашение"), QStringLiteral("Ядро не запущено.")); return;
|
||||
}
|
||||
const QString channelId = QString::number(invite.channelId);
|
||||
for (const auto& channel : m_db->getChannels()) {
|
||||
if (channel.channelId == channelId && topo_node_sqlite_member_in_channel(m_db->db(), channelId.toUtf8().constData(), m_db->myNodeId())) {
|
||||
GUI_INFO("invite link: opening existing group ch=%s", qPrintable(channelId));
|
||||
m_channelList->selectChannel(channelId); return;
|
||||
}
|
||||
}
|
||||
JoinDialog dialog(m_node, m_db, this, link);
|
||||
connect(&dialog, &JoinDialog::joined, this, [this](const QString& channel) {
|
||||
reloadChannels(); m_channelList->selectChannel(channel);
|
||||
});
|
||||
dialog.exec();
|
||||
}
|
||||
|
||||
void MainWindow::onDmMsgReceived(const QString& convId, quint64 author) {
|
||||
QString key = QStringLiteral("dm:") + convId;
|
||||
if (m_currentChannelId == key) {
|
||||
|
||||
@@ -80,6 +80,8 @@ public:
|
||||
|
||||
/* DM (p2p чат) */
|
||||
void onPmRequested(const QString& chId, quint64 nodeId, const QString& name);
|
||||
void onInviteToPmRequested(const QString& source, quint64 peer, const QString& name);
|
||||
void onInviteLinkActivated(const QString& link);
|
||||
void onDmConvUpdated(const QString& convId);
|
||||
void onDmMsgReceived(const QString& convId, quint64 author);
|
||||
|
||||
|
||||
Reference in new issue
Block a user