diff --git a/tools/chatgui/src/messagelist.cpp b/tools/chatgui/src/messagelist.cpp index f25bbbc6..bd24cc5c 100644 --- a/tools/chatgui/src/messagelist.cpp +++ b/tools/chatgui/src/messagelist.cpp @@ -365,6 +365,24 @@ MessageList::MessageList(DbManager* db, AudioRecorder* recorder, QWidget *parent m_talkingLabel->hide(); hl->addWidget(m_talkingLabel); + m_inviteBtn = new QPushButton(QStringLiteral("+"), header); + m_inviteBtn->setAccessibleName(QStringLiteral("Пригласить в группу")); + m_inviteBtn->setToolTip(QStringLiteral("Пригласить в группу")); + m_inviteBtn->setFixedSize(34, 30); + m_inviteBtn->setCursor(Qt::PointingHandCursor); + m_inviteBtn->hide(); + hl->addWidget(m_inviteBtn); + connect(m_inviteBtn, &QPushButton::clicked, this, [this]() { + if (!m_db || !isDmChannel(m_currentChannelId)) return; + for (const auto& conv : m_db->getDmConversations()) { + if (conv.convId == dmConvId(m_currentChannelId)) { + emit inviteRequested(QString(), conv.peerNodeId, m_channelTitle->text()); + return; + } + } + GUI_ERROR("invite PM: conversation not found target=%s", qPrintable(m_currentChannelId)); + }); + m_callBtn = new QPushButton(QStringLiteral("☎"), header); m_callBtn->setAccessibleName(QStringLiteral("Позвонить")); m_callBtn->setFixedSize(34, 30); @@ -625,6 +643,7 @@ void MessageList::loadChannel(const QString& channelId) { m_currentChannelId = channelId; clearDmCallRoute(); m_callBtn->setVisible(isDmChannel(channelId)); + m_inviteBtn->setVisible(isDmChannel(channelId)); m_peerStatus->setVisible(isDmChannel(channelId)); m_radioBtn->setVisible(!isDmChannel(channelId)); m_inputBar->setRecordingContext(m_db ? m_db->dbPath() + "/media" : QString(), channelId); diff --git a/tools/chatgui/src/messagelist.h b/tools/chatgui/src/messagelist.h index 136d9960..ba881a00 100644 --- a/tools/chatgui/src/messagelist.h +++ b/tools/chatgui/src/messagelist.h @@ -44,6 +44,8 @@ signals: void callRequested(const QString& target, quint64 peer, const QString& name); void openVideoRequested(const QString& filePath); void openImageRequested(const QString& filePath); + void inviteRequested(const QString& sourceChannel, quint64 peer, const QString& name); + void inviteLinkActivated(const QString& link); private: ChatView *m_view; @@ -63,6 +65,7 @@ private: QLabel* m_channelTitle = nullptr; /* шапка: название канала */ QLabel* m_talkingLabel = nullptr; /* шапка: кто говорит в рации */ QPushButton* m_callBtn = nullptr; + QPushButton* m_inviteBtn = nullptr; quint64 m_callPeer = 0; quint64 m_callGroup = 0; QPushButton* m_radioBtn = nullptr; /* шапка: переключатель рации */