File indexing completed on 2024-12-01 04:36:53
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 "myaccountpreferenceconfigurewidget.h" 0008 #include "connection.h" 0009 #include "rocketchataccount.h" 0010 #include "ruqolawidgets_debug.h" 0011 #include "users/userrequestdatadownloadjob.h" 0012 #include <KLineEditEventHandler> 0013 #include <KLocalizedString> 0014 #include <KMessageBox> 0015 #include <KSeparator> 0016 #include <QCheckBox> 0017 #include <QComboBox> 0018 #include <QLabel> 0019 #include <QLineEdit> 0020 #include <QPushButton> 0021 #include <QSpinBox> 0022 #include <QVBoxLayout> 0023 0024 MyAccountPreferenceConfigureWidget::MyAccountPreferenceConfigureWidget(RocketChatAccount *account, QWidget *parent) 0025 : QWidget(parent) 0026 , mHighlightWords(new QLineEdit(this)) 0027 , mDesktopNotification(new QComboBox(this)) 0028 , mEmailNotification(new QComboBox(this)) 0029 , mPushNotification(new QComboBox(this)) 0030 , mUseEmojis(new QCheckBox(i18n("Use Emojis"), this)) 0031 , mConvertAsciiEmoji(new QCheckBox(i18n("Convert Ascii to Emoji"), this)) 0032 , mHideRoles(new QCheckBox(i18n("Hide roles"), this)) 0033 , mDisplayAvatars(new QCheckBox(i18n("Display avatars"), this)) 0034 , mReceiveLoginDetectionEmails(new QCheckBox(i18n("Receive login detection emails"), this)) 0035 , mIdleTimeLimit(new QSpinBox(this)) 0036 , mAutomaticAway(new QCheckBox(i18n("Enable Auto Away"), this)) 0037 , mRocketChatAccount(account) 0038 { 0039 mUseEmojis->setObjectName(QStringLiteral("mUseEmojis")); 0040 mConvertAsciiEmoji->setObjectName(QStringLiteral("mConvertAsciiEmoji")); 0041 mHideRoles->setObjectName(QStringLiteral("mHideRoles")); 0042 mDisplayAvatars->setObjectName(QStringLiteral("mDisplayAvatars")); 0043 auto mainLayout = new QVBoxLayout(this); 0044 mainLayout->setObjectName(QStringLiteral("mainLayout")); 0045 0046 auto highlightWordsLabel = new QLabel(i18n("Highlight words:"), this); 0047 highlightWordsLabel->setObjectName(QStringLiteral("highlightWordsLabel")); 0048 highlightWordsLabel->setTextFormat(Qt::PlainText); 0049 mainLayout->addWidget(highlightWordsLabel); 0050 0051 mHighlightWords->setObjectName(QStringLiteral("mHighlightWords")); 0052 KLineEditEventHandler::catchReturnKey(mHighlightWords); 0053 mHighlightWords->setPlaceholderText(i18n("Use \',\' for separating words")); 0054 mHighlightWords->setToolTip(i18n("Separate each word with \',\'.")); 0055 connect(mHighlightWords, &QLineEdit::textEdited, this, &MyAccountPreferenceConfigureWidget::setWasChanged); 0056 mainLayout->addWidget(mHighlightWords); 0057 0058 mDesktopNotification->setObjectName(QStringLiteral("mDesktopNotification")); 0059 mEmailNotification->setObjectName(QStringLiteral("mEmailNotification")); 0060 mPushNotification->setObjectName(QStringLiteral("mPushNotification")); 0061 0062 auto desktopNotificationLabel = new QLabel(i18n("Desktop notification:"), this); 0063 desktopNotificationLabel->setObjectName(QStringLiteral("desktopNotificationLabel")); 0064 desktopNotificationLabel->setTextFormat(Qt::PlainText); 0065 mainLayout->addWidget(desktopNotificationLabel); 0066 0067 mainLayout->addWidget(mDesktopNotification); 0068 0069 auto emailNotificationLabel = new QLabel(i18n("Offline Email notification:"), this); 0070 emailNotificationLabel->setObjectName(QStringLiteral("emailNotificationLabel")); 0071 emailNotificationLabel->setTextFormat(Qt::PlainText); 0072 mainLayout->addWidget(emailNotificationLabel); 0073 0074 mainLayout->addWidget(mEmailNotification); 0075 0076 auto pushNotificationLabel = new QLabel(i18n("Push notification:"), this); 0077 pushNotificationLabel->setObjectName(QStringLiteral("pushNotificationLabel")); 0078 pushNotificationLabel->setTextFormat(Qt::PlainText); 0079 mainLayout->addWidget(pushNotificationLabel); 0080 0081 mainLayout->addWidget(mPushNotification); 0082 0083 mReceiveLoginDetectionEmails->setObjectName(QStringLiteral("mReceiveLoginDetectionEmails")); 0084 mReceiveLoginDetectionEmails->setToolTip(i18n("Receive an email each time a new login is detected on your account.")); 0085 connect(mReceiveLoginDetectionEmails, &QCheckBox::clicked, this, &MyAccountPreferenceConfigureWidget::setWasChanged); 0086 mainLayout->addWidget(mReceiveLoginDetectionEmails); 0087 0088 mainLayout->addWidget(mUseEmojis); 0089 connect(mUseEmojis, &QCheckBox::clicked, this, &MyAccountPreferenceConfigureWidget::setWasChanged); 0090 mainLayout->addWidget(mConvertAsciiEmoji); 0091 connect(mConvertAsciiEmoji, &QCheckBox::clicked, this, &MyAccountPreferenceConfigureWidget::setWasChanged); 0092 mainLayout->addWidget(mHideRoles); 0093 connect(mHideRoles, &QCheckBox::clicked, this, &MyAccountPreferenceConfigureWidget::setWasChanged); 0094 mainLayout->addWidget(mDisplayAvatars); 0095 connect(mDisplayAvatars, &QCheckBox::clicked, this, &MyAccountPreferenceConfigureWidget::setWasChanged); 0096 0097 mainLayout->addWidget(new KSeparator(this)); 0098 0099 mAutomaticAway->setObjectName(QStringLiteral("mAutomaticAways")); 0100 connect(mAutomaticAway, &QCheckBox::clicked, this, &MyAccountPreferenceConfigureWidget::setWasChanged); 0101 mainLayout->addWidget(mAutomaticAway); 0102 0103 auto idleTimeLimitLabel = new QLabel(i18n("Idle Time Limit:"), this); 0104 idleTimeLimitLabel->setObjectName(QStringLiteral("idleTimeLimitLabel")); 0105 idleTimeLimitLabel->setTextFormat(Qt::PlainText); 0106 mainLayout->addWidget(idleTimeLimitLabel); 0107 0108 mIdleTimeLimit->setObjectName(QStringLiteral("mIdleTimeLimit")); 0109 mIdleTimeLimit->setMaximum(9999); 0110 mIdleTimeLimit->setToolTip(i18n("Period of time until status changes to away. Value needs to be in seconds.")); 0111 connect(mIdleTimeLimit, &QSpinBox::valueChanged, this, &MyAccountPreferenceConfigureWidget::setWasChanged); 0112 mainLayout->addWidget(mIdleTimeLimit); 0113 0114 QWidget *downloadWidget = new QWidget; 0115 downloadWidget->setObjectName(QStringLiteral("downloadWidget")); 0116 auto downloadWidgetLayout = new QVBoxLayout(downloadWidget); 0117 downloadWidgetLayout->setContentsMargins({}); 0118 0119 downloadWidgetLayout->addWidget(new KSeparator(this)); 0120 0121 auto downloadLayout = new QHBoxLayout; 0122 downloadLayout->setObjectName(QStringLiteral("downloadLayout")); 0123 downloadLayout->setContentsMargins({}); 0124 0125 downloadWidgetLayout->addLayout(downloadLayout); 0126 0127 auto downloadDataButton = new QPushButton(i18n("Download my Data (HTML)"), this); 0128 downloadDataButton->setObjectName(QStringLiteral("downloadDataButton")); 0129 downloadLayout->addWidget(downloadDataButton); 0130 connect(downloadDataButton, &QPushButton::clicked, this, [this]() { 0131 downloadData(false); 0132 }); 0133 0134 auto exportDataButton = new QPushButton(i18n("Export my Data (JSON)"), this); 0135 exportDataButton->setObjectName(QStringLiteral("exportDataButton")); 0136 downloadLayout->addWidget(exportDataButton); 0137 connect(exportDataButton, &QPushButton::clicked, this, [this]() { 0138 downloadData(true); 0139 }); 0140 0141 mainLayout->addWidget(downloadWidget); 0142 0143 mainLayout->addStretch(); 0144 if (mRocketChatAccount && !mRocketChatAccount->ruqolaServerConfig()->userDataDownloadEnabled()) { 0145 downloadWidget->setVisible(false); 0146 } 0147 initComboboxValues(); 0148 if (mRocketChatAccount) { 0149 if (!mRocketChatAccount->ruqolaServerConfig()->hasAtLeastVersion(5, 4, 0)) { 0150 mReceiveLoginDetectionEmails->setVisible(false); 0151 } else if (!mRocketChatAccount->ruqolaServerConfig()->deviceManagementEnableLoginEmails() 0152 || !mRocketChatAccount->ruqolaServerConfig()->deviceManagementAllowLoginEmailpreference()) { 0153 mReceiveLoginDetectionEmails->setVisible(false); 0154 } 0155 } 0156 } 0157 0158 MyAccountPreferenceConfigureWidget::~MyAccountPreferenceConfigureWidget() = default; 0159 0160 void MyAccountPreferenceConfigureWidget::downloadData(bool fullData) 0161 { 0162 auto job = new RocketChatRestApi::UserRequestDataDownloadJob(this); 0163 job->setFullExport(fullData); 0164 mRocketChatAccount->restApi()->initializeRestApiJob(job); 0165 connect(job, 0166 &RocketChatRestApi::UserRequestDataDownloadJob::userRequestDataDownloadDone, 0167 this, 0168 &MyAccountPreferenceConfigureWidget::slotUserRequestDataDownloadDone); 0169 if (!job->start()) { 0170 qCWarning(RUQOLAWIDGETS_LOG) << "Impossible to start UserRequestDataDownloadJob job"; 0171 } 0172 } 0173 0174 void MyAccountPreferenceConfigureWidget::slotUserRequestDataDownloadDone() 0175 { 0176 KMessageBox::information(this, 0177 i18n("Your data file will be generated. A link to download it will be sent to your email address when ready."), 0178 i18n("Download File Requested")); 0179 } 0180 0181 void MyAccountPreferenceConfigureWidget::initComboboxValues() 0182 { 0183 // Default ? 0184 mDesktopNotification->addItem(i18n("All Messages"), QStringLiteral("all")); 0185 mDesktopNotification->addItem(i18n("Mentions"), QStringLiteral("mentions")); 0186 mDesktopNotification->addItem(i18n("Nothing"), QStringLiteral("nothing")); 0187 0188 // Default ? 0189 mPushNotification->addItem(i18n("All Messages"), QStringLiteral("all")); 0190 mPushNotification->addItem(i18n("Mentions"), QStringLiteral("mentions")); 0191 mPushNotification->addItem(i18n("Nothing"), QStringLiteral("nothing")); 0192 0193 // Default ? 0194 mEmailNotification->addItem(i18n("Each Mentions"), QStringLiteral("mentions")); 0195 mEmailNotification->addItem(i18n("Disabled"), QStringLiteral("nothing")); 0196 0197 connect(mDesktopNotification, &QComboBox::activated, this, &MyAccountPreferenceConfigureWidget::setWasChanged); 0198 connect(mPushNotification, &QComboBox::activated, this, &MyAccountPreferenceConfigureWidget::setWasChanged); 0199 connect(mEmailNotification, &QComboBox::activated, this, &MyAccountPreferenceConfigureWidget::setWasChanged); 0200 } 0201 0202 void MyAccountPreferenceConfigureWidget::save() 0203 { 0204 if (mChanged) { 0205 const QStringList highlightWords = mHighlightWords->text().split(QLatin1Char(',')); 0206 QStringList listWords; 0207 for (QString word : highlightWords) { 0208 word = word.trimmed(); 0209 if (!word.isEmpty()) { 0210 listWords.append(word); 0211 } 0212 } 0213 0214 RocketChatRestApi::UsersSetPreferencesJob::UsersSetPreferencesInfo info; 0215 info.highlights = listWords; 0216 info.pushNotifications = mPushNotification->currentData().toString(); 0217 info.desktopNotifications = mDesktopNotification->currentData().toString(); 0218 info.emailNotificationMode = mEmailNotification->currentData().toString(); 0219 info.userId = mRocketChatAccount->userId(); 0220 info.useEmoji = RocketChatRestApi::UsersSetPreferencesJob::UsersSetPreferencesInfo::convertToState(mUseEmojis->isChecked()); 0221 info.hideRoles = RocketChatRestApi::UsersSetPreferencesJob::UsersSetPreferencesInfo::convertToState(mHideRoles->isChecked()); 0222 info.displayAvatars = RocketChatRestApi::UsersSetPreferencesJob::UsersSetPreferencesInfo::convertToState(mDisplayAvatars->isChecked()); 0223 info.convertAsciiToEmoji = RocketChatRestApi::UsersSetPreferencesJob::UsersSetPreferencesInfo::convertToState(mConvertAsciiEmoji->isChecked()); 0224 info.idleTimeLimit = mIdleTimeLimit->value(); 0225 info.enableAutoAway = RocketChatRestApi::UsersSetPreferencesJob::UsersSetPreferencesInfo::convertToState(mAutomaticAway->isChecked()); 0226 if (mRocketChatAccount) { 0227 if (mRocketChatAccount->ruqolaServerConfig()->hasAtLeastVersion(5, 4, 0)) { 0228 if (mRocketChatAccount->ruqolaServerConfig()->deviceManagementEnableLoginEmails() 0229 && mRocketChatAccount->ruqolaServerConfig()->deviceManagementAllowLoginEmailpreference()) { 0230 info.receiveLoginDetectionEmail = 0231 RocketChatRestApi::UsersSetPreferencesJob::UsersSetPreferencesInfo::convertToState(mReceiveLoginDetectionEmails->isChecked()); 0232 } 0233 } 0234 } 0235 mRocketChatAccount->setUserPreferences(info); 0236 } 0237 } 0238 0239 void MyAccountPreferenceConfigureWidget::load() 0240 { 0241 const OwnUserPreferences ownUserPreferences = mRocketChatAccount->ownUserPreferences(); 0242 mHighlightWords->setText(ownUserPreferences.highlightWords().join(QLatin1Char(','))); 0243 mPushNotification->setCurrentIndex(mPushNotification->findData(ownUserPreferences.pushNotifications())); 0244 mEmailNotification->setCurrentIndex(mEmailNotification->findData(ownUserPreferences.emailNotificationMode())); 0245 mDesktopNotification->setCurrentIndex(mDesktopNotification->findData(ownUserPreferences.desktopNotifications())); 0246 mUseEmojis->setChecked(ownUserPreferences.useEmojis()); 0247 mHideRoles->setChecked(ownUserPreferences.hideRoles()); 0248 mDisplayAvatars->setChecked(ownUserPreferences.displayAvatars()); 0249 mConvertAsciiEmoji->setChecked(ownUserPreferences.convertAsciiEmoji()); 0250 mReceiveLoginDetectionEmails->setChecked(ownUserPreferences.receiveLoginDetectionEmail()); 0251 mIdleTimeLimit->setValue(ownUserPreferences.idleTimeLimit()); 0252 mAutomaticAway->setChecked(ownUserPreferences.enableAutoAway()); 0253 mChanged = false; 0254 } 0255 0256 void MyAccountPreferenceConfigureWidget::setWasChanged() 0257 { 0258 mChanged = true; 0259 } 0260 0261 #include "moc_myaccountpreferenceconfigurewidget.cpp"