Warning, file /network/ruqola/src/widgets/dialogs/inviteuserswidget.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

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 "misc/lineeditcatchreturnkey.h"
0010 #include "rocketchataccount.h"
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     new LineEditCatchReturnKey(mInviteUserLineEdit, this);
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"