1 /*
2   SPDX-FileCopyrightText: 2015-2021 Laurent Montel <montel@kde.org>
3 
4   SPDX-License-Identifier: LGPL-2.0-or-later
5 
6 */
7 
8 #include "saveasfilejob.h"
9 #include "kmail_debug.h"
10 #include <KLocalizedString>
11 #include <QFileDialog>
12 #include <QPointer>
13 #include <QTextDocument>
14 #include <QTextDocumentWriter>
15 
SaveAsFileJob(QObject * parent)16 SaveAsFileJob::SaveAsFileJob(QObject *parent)
17     : QObject(parent)
18 {
19 }
20 
21 SaveAsFileJob::~SaveAsFileJob() = default;
22 
start()23 void SaveAsFileJob::start()
24 {
25     QPointer<QFileDialog> dlg = new QFileDialog(mParentWidget);
26     dlg->setWindowTitle(i18nc("@title:window", "Save File as"));
27     dlg->setAcceptMode(QFileDialog::AcceptSave);
28     QStringList lst;
29     if (mHtmlMode) {
30         lst << QStringLiteral("text/html") << QStringLiteral("text/plain") << QStringLiteral("application/vnd.oasis.opendocument.text");
31     } else {
32         lst << QStringLiteral("text/plain");
33     }
34     dlg->setMimeTypeFilters(lst);
35 
36     if (dlg->exec()) {
37         QTextDocumentWriter writer;
38         const QString filename = dlg->selectedFiles().at(0);
39         writer.setFileName(filename);
40         if (dlg->selectedNameFilter() == QLatin1String("text/plain") || filename.endsWith(QLatin1String(".txt"))) {
41             writer.setFormat("plaintext");
42         } else if (dlg->selectedNameFilter() == QLatin1String("text/html") || filename.endsWith(QLatin1String(".html"))) {
43             writer.setFormat("HTML");
44         } else if (dlg->selectedNameFilter() == QLatin1String("application/vnd.oasis.opendocument.text") || filename.endsWith(QLatin1String(".odf"))) {
45             writer.setFormat("ODF");
46         } else {
47             writer.setFormat("plaintext");
48         }
49         if (!writer.write(mTextDocument)) {
50             qCDebug(KMAIL_LOG) << " Error during writing";
51         }
52     }
53     delete dlg;
54     deleteLater();
55 }
56 
setHtmlMode(bool htmlMode)57 void SaveAsFileJob::setHtmlMode(bool htmlMode)
58 {
59     mHtmlMode = htmlMode;
60 }
61 
setTextDocument(QTextDocument * textDocument)62 void SaveAsFileJob::setTextDocument(QTextDocument *textDocument)
63 {
64     mTextDocument = textDocument;
65 }
66 
setParentWidget(QWidget * parentWidget)67 void SaveAsFileJob::setParentWidget(QWidget *parentWidget)
68 {
69     mParentWidget = parentWidget;
70 }
71