File indexing completed on 2024-05-19 05:04:04
0001 /* 0002 SPDX-FileCopyrightText: 2020-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "inviteuserswidget.h" 0008 #include "connection.h" 0009 #include "rocketchataccount.h" 0010 #include <KLineEditEventHandler> 0011 0012 #include <KCollapsibleGroupBox> 0013 #include <KLocalizedString> 0014 #include <QApplication> 0015 #include <QClipboard> 0016 #include <QComboBox> 0017 #include <QFormLayout> 0018 #include <QLabel> 0019 #include <QLineEdit> 0020 #include <QPushButton> 0021 #include <QToolButton> 0022 #include <QVBoxLayout> 0023 0024 InviteUsersWidget::InviteUsersWidget(RocketChatAccount *account, QWidget *parent) 0025 : QWidget(parent) 0026 , mInviteUserLineEdit(new QLineEdit(this)) 0027 , mExpireDateLabel(new QLabel(this)) 0028 , mExpirationDays(new QComboBox(this)) 0029 , mMaxUses(new QComboBox(this)) 0030 , mRocketChatAccount(account) 0031 { 0032 auto mainLayout = new QVBoxLayout(this); 0033 mainLayout->setObjectName(QStringLiteral("mainLayout")); 0034 mainLayout->setContentsMargins({}); 0035 0036 auto hlayout = new QHBoxLayout; 0037 hlayout->setObjectName(QStringLiteral("hlayout")); 0038 hlayout->setContentsMargins({}); 0039 mainLayout->addLayout(hlayout); 0040 0041 auto label = new QLabel(i18n("Invite Link:"), this); 0042 label->setObjectName(QStringLiteral("label")); 0043 label->setTextFormat(Qt::PlainText); 0044 hlayout->addWidget(label); 0045 0046 mInviteUserLineEdit->setObjectName(QStringLiteral("mInviteUserLineEdit")); 0047 mInviteUserLineEdit->setReadOnly(true); 0048 KLineEditEventHandler::catchReturnKey(mInviteUserLineEdit); 0049 hlayout->addWidget(mInviteUserLineEdit); 0050 0051 auto copyLinkButton = new QToolButton(this); 0052 copyLinkButton->setObjectName(QStringLiteral("copyLinkButton")); 0053 copyLinkButton->setIcon(QIcon::fromTheme(QStringLiteral("edit-copy"))); 0054 copyLinkButton->setToolTip(i18n("Copy link")); 0055 hlayout->addWidget(copyLinkButton); 0056 connect(copyLinkButton, &QToolButton::clicked, this, &InviteUsersWidget::slotCopyLink); 0057 0058 auto collapsibleGroupBox = new KCollapsibleGroupBox(this); 0059 collapsibleGroupBox->setObjectName(QStringLiteral("collapsibleGroupBox")); 0060 collapsibleGroupBox->setTitle(i18n("Options")); 0061 mainLayout->addWidget(collapsibleGroupBox); 0062 0063 if (mRocketChatAccount) { 0064 connect(mRocketChatAccount->restApi(), &RocketChatRestApi::Connection::findOrCreateInviteDone, this, &InviteUsersWidget::slotFindOrCreateInvite); 0065 } 0066 0067 auto formLayout = new QFormLayout(collapsibleGroupBox); 0068 formLayout->setObjectName(QStringLiteral("formLayout")); 0069 formLayout->setContentsMargins({}); 0070 0071 mExpirationDays->setObjectName(QStringLiteral("mExpirationDays")); 0072 formLayout->addRow(i18n("Expiration (Days)"), mExpirationDays); 0073 0074 mMaxUses->setObjectName(QStringLiteral("mMaxUses")); 0075 formLayout->addRow(i18n("Max number of uses"), mMaxUses); 0076 0077 auto generateNewLink = new QPushButton(i18n("Generate New Link"), this); 0078 generateNewLink->setObjectName(QStringLiteral("generateNewLink")); 0079 connect(generateNewLink, &QPushButton::clicked, this, &InviteUsersWidget::slotGenerateNewLink); 0080 mainLayout->addWidget(generateNewLink); 0081 0082 mExpireDateLabel->setObjectName(QStringLiteral("mExpireDateLabel")); 0083 mExpireDateLabel->setTextFormat(Qt::PlainText); 0084 mExpireDateLabel->setWordWrap(true); 0085 mainLayout->addWidget(mExpireDateLabel); 0086 0087 mainLayout->addStretch(1); 0088 fillComboBox(); 0089 } 0090 0091 InviteUsersWidget::~InviteUsersWidget() = default; 0092 0093 void InviteUsersWidget::slotGenerateNewLink() 0094 { 0095 generateLink(mMaxUses->currentData().toInt(), mExpirationDays->currentData().toInt()); 0096 } 0097 0098 void InviteUsersWidget::slotCopyLink() 0099 { 0100 const QString link = mInviteUserLineEdit->text(); 0101 if (!link.isEmpty()) { 0102 QClipboard *clip = QApplication::clipboard(); 0103 clip->setText(link, QClipboard::Clipboard); 0104 clip->setText(link, QClipboard::Selection); 0105 } 0106 } 0107 0108 void InviteUsersWidget::slotFindOrCreateInvite(const RocketChatRestApi::FindOrCreateInviteJob::InviteUsersInfo &info) 0109 { 0110 mInviteUserLineEdit->setText(info.url.toString()); 0111 if (info.maxUses > 0) { 0112 mExpireDateLabel->setText(i18np("Your invite link will expire on %2 or after %1 use.", 0113 "Your invite link will expire on %2 or after %1 uses.", 0114 info.maxUses, 0115 info.expireDateTime)); 0116 } else { 0117 mExpireDateLabel->setText(i18n("Your invite link will expire on %1.", info.expireDateTime)); 0118 } 0119 } 0120 0121 QString InviteUsersWidget::roomId() const 0122 { 0123 return mRoomId; 0124 } 0125 0126 void InviteUsersWidget::setRoomId(const QString &roomId) 0127 { 0128 mRoomId = roomId; 0129 } 0130 0131 void InviteUsersWidget::generateLink(int maxUses, int numberOfDays) 0132 { 0133 mRocketChatAccount->restApi()->findOrCreateInvite(mRoomId, maxUses, numberOfDays); 0134 } 0135 0136 void InviteUsersWidget::fillComboBox() 0137 { 0138 mExpirationDays->addItem(QString::number(1), 1); 0139 mExpirationDays->addItem(QString::number(7), 7); 0140 mExpirationDays->addItem(QString::number(15), 15); 0141 mExpirationDays->addItem(QString::number(30), 30); 0142 mExpirationDays->addItem(i18n("Never"), 0); 0143 0144 mMaxUses->addItem(QString::number(1), 1); 0145 mMaxUses->addItem(QString::number(5), 5); 0146 mMaxUses->addItem(QString::number(10), 10); 0147 mMaxUses->addItem(QString::number(25), 25); 0148 mMaxUses->addItem(QString::number(50), 50); 0149 mMaxUses->addItem(QString::number(100), 100); 0150 mMaxUses->addItem(i18n("No Limit"), 0); 0151 mMaxUses->setCurrentIndex(3); 0152 } 0153 0154 #include "moc_inviteuserswidget.cpp"