Messagelib

scamdetectiondetailsdialog.cpp
1 /*
2  SPDX-FileCopyrightText: 2013-2023 Laurent Montel <[email protected]>
3 
4  SPDX-License-Identifier: LGPL-2.0-or-later
5 
6 */
7 
8 #include "scamdetectiondetailsdialog.h"
9 #include "messageviewer_debug.h"
10 #include "settings/messageviewersettings.h"
11 
12 #include <KPIMTextEdit/RichTextEditorWidget>
13 
14 #include <KLocalizedString>
15 
16 #include <QUrl>
17 
18 #include <KStandardGuiItem>
19 #include <QFileDialog>
20 
21 #include <KConfigGroup>
22 #include <KGuiItem>
23 #include <KWindowConfig>
24 #include <QDialogButtonBox>
25 #include <QPushButton>
26 #include <QTextStream>
27 #include <QVBoxLayout>
28 #include <QWindow>
29 #include <memory>
30 
31 using namespace MessageViewer;
32 namespace
33 {
34 static const char myScamDetectionDetailsDialogConfigGroupName[] = "ScamDetectionDetailsDialog";
35 }
36 ScamDetectionDetailsDialog::ScamDetectionDetailsDialog(QWidget *parent)
37  : QDialog(parent)
38  , mDetails(new KPIMTextEdit::RichTextEditorWidget(this))
39 {
40  setWindowTitle(i18nc("@title:window", "Details"));
41  setAttribute(Qt::WA_DeleteOnClose);
42  auto mainLayout = new QVBoxLayout(this);
43 
44  auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Close, this);
45  auto user1Button = new QPushButton(this);
46  buttonBox->addButton(user1Button, QDialogButtonBox::ActionRole);
47  connect(buttonBox, &QDialogButtonBox::accepted, this, &ScamDetectionDetailsDialog::accept);
48  connect(buttonBox, &QDialogButtonBox::rejected, this, &ScamDetectionDetailsDialog::reject);
50  setModal(false);
51  mainLayout->addWidget(mDetails);
52  mainLayout->addWidget(buttonBox);
53  mDetails->setReadOnly(true);
54  connect(user1Button, &QPushButton::clicked, this, &ScamDetectionDetailsDialog::slotSaveAs);
55  readConfig();
56 }
57 
58 ScamDetectionDetailsDialog::~ScamDetectionDetailsDialog()
59 {
60  writeConfig();
61 }
62 
63 void ScamDetectionDetailsDialog::slotSaveAs()
64 {
65  QUrl url;
66  std::unique_ptr<QFileDialog> fdlg(new QFileDialog(this, QString(), url.path()));
67  fdlg->setAcceptMode(QFileDialog::AcceptSave);
68  fdlg->setFileMode(QFileDialog::AnyFile);
69  fdlg->selectFile(QStringLiteral("scam-detection.html"));
70  if (fdlg->exec() == QDialog::Accepted) {
71  const QStringList fileNames = fdlg->selectedFiles();
72  if (!fileNames.isEmpty()) {
73  QFile file(fileNames.at(0));
74  if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
75  qCDebug(MESSAGEVIEWER_LOG) << "We can't save in file :" << fileNames.at(0);
76  return;
77  }
78  QTextStream ts(&file);
79 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
80  ts.setCodec("UTF-8");
81 #endif
82  QString htmlStr = mDetails->toHtml();
83  htmlStr.replace(QLatin1String(R"(meta name="qrichtext" content="1")"),
84  QLatin1String(R"(meta http-equiv="Content-Type" content="text/html; charset=UTF-8")"));
85  ts << htmlStr;
86  file.close();
87  }
88  }
89 }
90 
91 void ScamDetectionDetailsDialog::setDetails(const QString &details)
92 {
93  mDetails->setHtml(details);
94 }
95 
96 void ScamDetectionDetailsDialog::readConfig()
97 {
98  create(); // ensure a window is created
99  windowHandle()->resize(QSize(600, 200));
100  KConfigGroup group(KSharedConfig::openStateConfig(), myScamDetectionDetailsDialogConfigGroupName);
101  KWindowConfig::restoreWindowSize(windowHandle(), group);
102  resize(windowHandle()->size()); // workaround for QTBUG-40584
103 }
104 
105 void ScamDetectionDetailsDialog::writeConfig()
106 {
107  KConfigGroup group(KSharedConfig::openStateConfig(), myScamDetectionDetailsDialogConfigGroupName);
108  KWindowConfig::saveWindowSize(windowHandle(), group);
109 }
void clicked(bool checked)
void readConfig()
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
static void assign(QPushButton *button, const KGuiItem &item)
const T & at(int i) const const
static KSharedConfig::Ptr openStateConfig(const QString &fileName=QString())
bool isEmpty() const const
QAction * create(StandardGameAction id, const QObject *recvr, const char *slot, QObject *parent)
QString & replace(int position, int n, QChar after)
QString path(QUrl::ComponentFormattingOptions options) const const
KCONFIGGUI_EXPORT void restoreWindowSize(QWindow *window, const KConfigGroup &config)
QString i18nc(const char *context, const char *text, const TYPE &arg...)
KGuiItem saveAs()
WA_DeleteOnClose
KCONFIGGUI_EXPORT void saveWindowSize(const QWindow *window, KConfigGroup &config, KConfigGroup::WriteConfigFlags options=KConfigGroup::Normal)
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Wed Mar 22 2023 04:07:15 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.