File indexing completed on 2025-03-09 04:54:38

0001 /*
0002   SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org>
0003 
0004   SPDX-License-Identifier: LGPL-2.0-or-later
0005 
0006 */
0007 
0008 #include "scamdetectionwarningwidget.h"
0009 #include "settings/messageviewersettings.h"
0010 
0011 #include <KLocalizedString>
0012 #include <QAction>
0013 #include <QMenu>
0014 
0015 using namespace MessageViewer;
0016 
0017 class MessageViewer::ScamDetectionWarningWidgetPrivate
0018 {
0019 public:
0020     ScamDetectionWarningWidgetPrivate() = default;
0021 
0022     bool mUseInTestApps = false;
0023 };
0024 
0025 ScamDetectionWarningWidget::ScamDetectionWarningWidget(QWidget *parent)
0026     : KMessageWidget(parent)
0027     , d(new MessageViewer::ScamDetectionWarningWidgetPrivate)
0028 {
0029     setVisible(false);
0030     setCloseButtonVisible(true);
0031     setMessageType(Warning);
0032     setWordWrap(true);
0033     setPosition(KMessageWidget::Header);
0034     setText(i18n("This message may be a scam. <a href=\"scamdetails\">(Details...)</a>"));
0035 
0036     connect(this, &ScamDetectionWarningWidget::linkActivated, this, &ScamDetectionWarningWidget::slotShowDetails);
0037 
0038     auto menu = new QMenu(this);
0039     auto action = new QAction(i18n("Move to Trash"), this);
0040     connect(action, &QAction::triggered, this, &ScamDetectionWarningWidget::moveMessageToTrash);
0041     action->setMenu(menu);
0042     addAction(action);
0043 
0044     action = new QAction(i18n("I confirm it's not a scam"), this);
0045     menu->addAction(action);
0046     connect(action, &QAction::triggered, this, &ScamDetectionWarningWidget::slotMessageIsNotAScam);
0047 
0048     action = new QAction(i18n("Add email to whitelist"), this);
0049     menu->addAction(action);
0050     connect(action, &QAction::triggered, this, &ScamDetectionWarningWidget::slotAddToWhiteList);
0051 
0052     action = new QAction(i18n("Disable scam detection for all messages"), this);
0053     menu->addAction(action);
0054     connect(action, &QAction::triggered, this, &ScamDetectionWarningWidget::slotDisableScamDetection);
0055 }
0056 
0057 ScamDetectionWarningWidget::~ScamDetectionWarningWidget() = default;
0058 
0059 void ScamDetectionWarningWidget::setUseInTestApps(bool b)
0060 {
0061     d->mUseInTestApps = b;
0062 }
0063 
0064 void ScamDetectionWarningWidget::slotMessageIsNotAScam()
0065 {
0066     Q_EMIT messageIsNotAScam();
0067     setVisible(false);
0068 }
0069 
0070 void ScamDetectionWarningWidget::slotShowDetails(const QString &content)
0071 {
0072     if (content == QLatin1StringView("scamdetails")) {
0073         Q_EMIT showDetails();
0074     }
0075 }
0076 
0077 void ScamDetectionWarningWidget::slotShowWarning()
0078 {
0079     animatedShow();
0080 }
0081 
0082 void ScamDetectionWarningWidget::slotDisableScamDetection()
0083 {
0084     if (!d->mUseInTestApps) {
0085         MessageViewer::MessageViewerSettings::self()->setScamDetectionEnabled(false);
0086         MessageViewer::MessageViewerSettings::self()->save();
0087     }
0088     setVisible(false);
0089 }
0090 
0091 void ScamDetectionWarningWidget::slotAddToWhiteList()
0092 {
0093     setVisible(false);
0094     Q_EMIT addToWhiteList();
0095 }
0096 
0097 #include "moc_scamdetectionwarningwidget.cpp"