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)16SaveAsFileJob::SaveAsFileJob(QObject *parent) 17 : QObject(parent) 18 { 19 } 20 21 SaveAsFileJob::~SaveAsFileJob() = default; 22 start()23void 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)57void SaveAsFileJob::setHtmlMode(bool htmlMode) 58 { 59 mHtmlMode = htmlMode; 60 } 61 setTextDocument(QTextDocument * textDocument)62void SaveAsFileJob::setTextDocument(QTextDocument *textDocument) 63 { 64 mTextDocument = textDocument; 65 } 66 setParentWidget(QWidget * parentWidget)67void SaveAsFileJob::setParentWidget(QWidget *parentWidget) 68 { 69 mParentWidget = parentWidget; 70 } 71