diff --git a/CMakeLists.txt b/CMakeLists.txt index 0377ec1f2..fcbd8f6f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -159,6 +159,7 @@ if (KDEPIM_BUILD_DESKTOP) job/manageserversidesubscriptionjob.cpp job/manageserversidesubscriptionjob.cpp job/removecollectionjob.cpp + job/saveasfilejob.cpp ) set(kmailprivate_widgets_LIB_SRCS diff --git a/editor/kmcomposewin.cpp b/editor/kmcomposewin.cpp index 0f7313074..9f676276e 100644 --- a/editor/kmcomposewin.cpp +++ b/editor/kmcomposewin.cpp @@ -57,7 +57,7 @@ #include "warningwidgets/externaleditorwarning.h" #include "cryptostateindicatorwidget.h" #include "validatesendmailshortcut.h" - +#include "job/saveasfilejob.h" #include "editor/kmstorageservice.h" #include "followupreminder/followupreminderselectdatedialog.h" #include "followupreminder/followupremindercreatejob.h" @@ -3364,33 +3364,12 @@ void KMComposeWin::charSelected(const QChar &c) void KMComposeWin::slotSaveAsFile() { - QPointer dlg = new KFileDialog(QUrl(), QString(), this); - dlg->setOperationMode(KFileDialog::Saving); - dlg->setConfirmOverwrite(true); - if (mComposerBase->editor()->textMode() == KMeditor::Rich) { - dlg->setFilter(QString::fromLatin1("text/html text/plain application/vnd.oasis.opendocument.text")); - } else { - dlg->setFilter(QString::fromLatin1("text/plain")); - } - - if (dlg->exec()) { - QTextDocumentWriter writer; - const QString filename = dlg->selectedUrl().path(); - writer.setFileName(dlg->selectedUrl().path()); - if (dlg->currentFilter() == QString::fromLatin1("text/plain") || filename.endsWith(QLatin1String(".txt"))) { - writer.setFormat("plaintext"); - } else if (dlg->currentFilter() == QString::fromLatin1("text/html") || filename.endsWith(QLatin1String(".html"))) { - writer.setFormat("HTML"); - } else if (dlg->currentFilter() == QString::fromLatin1("application/vnd.oasis.opendocument.text") || filename.endsWith(QLatin1String(".odf"))) { - writer.setFormat("ODF"); - } else { - writer.setFormat("plaintext"); - } - if (!writer.write(mComposerBase->editor()->document())) { - qCDebug(KMAIL_LOG) << " Error during writing"; - } - } - delete dlg; + SaveAsFileJob *job = new SaveAsFileJob(this); + job->setParentWidget(this); + job->setHtmlMode(mComposerBase->editor()->textMode() == KMeditor::Rich); + job->setEditor(mComposerBase->editor()); + job->start(); + //not necessary to delete it. It done in SaveAsFileJob } void KMComposeWin::slotCreateAddressBookContact() diff --git a/folderarchive/folderarchiveagentjob.cpp b/folderarchive/folderarchiveagentjob.cpp index 37cc34d27..4d5f863f7 100644 --- a/folderarchive/folderarchiveagentjob.cpp +++ b/folderarchive/folderarchiveagentjob.cpp @@ -30,7 +30,7 @@ FolderArchiveAgentJob::FolderArchiveAgentJob(FolderArchiveManager *manager, FolderArchiveAccountInfo *info, const QList &lstItem, QObject *parent) : QObject(parent), - mLstItem(lstItem), + mListItem(lstItem), mManager(manager), mInfo(info) { @@ -46,7 +46,7 @@ void FolderArchiveAgentJob::start() sendError(i18n("Archive folder not defined. Please verify settings for account %1", mInfo->instanceName())); return; } - if (mLstItem.isEmpty()) { + if (mListItem.isEmpty()) { sendError(i18n("No messages selected.")); return; } @@ -96,7 +96,7 @@ void FolderArchiveAgentJob::slotCollectionIdFound(const Akonadi::Collection &col void FolderArchiveAgentJob::sloMoveMailsToCollection(const Akonadi::Collection &col) { - KMMoveCommand *command = new KMMoveCommand(col, mLstItem, -1); + KMMoveCommand *command = new KMMoveCommand(col, mListItem, -1); connect(command, &KMMoveCommand::moveDone, this, &FolderArchiveAgentJob::slotMoveMessages); command->start(); } diff --git a/folderarchive/folderarchiveagentjob.h b/folderarchive/folderarchiveagentjob.h index 2fec7ad59..1600b5666 100644 --- a/folderarchive/folderarchiveagentjob.h +++ b/folderarchive/folderarchiveagentjob.h @@ -41,7 +41,7 @@ private Q_SLOTS: void slotMoveMessages(KMMoveCommand *); private: void sendError(const QString &error); - QList mLstItem; + QList mListItem; FolderArchiveManager *mManager; FolderArchiveAccountInfo *mInfo; }; diff --git a/job/saveasfilejob.cpp b/job/saveasfilejob.cpp new file mode 100644 index 000000000..e30aa42c3 --- /dev/null +++ b/job/saveasfilejob.cpp @@ -0,0 +1,93 @@ +/* + Copyright (c) 2015 Montel Laurent + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + This library is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public + License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + +*/ + +#include "saveasfilejob.h" +#include "kmail_debug.h" +#include +#include +#include +#include +#include +#include + +SaveAsFileJob::SaveAsFileJob(QObject *parent) + : QObject(parent), + mHtmlMode(false), + mEditor(0), + mParentWidget(0) +{ + +} + +SaveAsFileJob::~SaveAsFileJob() +{ + +} + +void SaveAsFileJob::start() +{ + QPointer dlg = new KFileDialog(QUrl(),QString(),mParentWidget); + dlg->setOperationMode(KFileDialog::Saving); + dlg->setConfirmOverwrite(true); + if( mHtmlMode ) { + dlg->setFilter( QString::fromLatin1("text/html text/plain application/vnd.oasis.opendocument.text") ); + } else { + dlg->setFilter( QString::fromLatin1("text/plain") ); + } + + if(dlg->exec()) { + QTextDocumentWriter writer; + const QString filename = dlg->selectedUrl().path(); + writer.setFileName(dlg->selectedUrl().path()); + if (dlg->currentFilter() == QString::fromLatin1("text/plain") || filename.endsWith(QLatin1String(".txt"))) { + writer.setFormat("plaintext"); + } else if (dlg->currentFilter() == QString::fromLatin1("text/html")|| filename.endsWith(QLatin1String(".html"))) { + writer.setFormat("HTML"); + } else if (dlg->currentFilter() == QString::fromLatin1("application/vnd.oasis.opendocument.text") || filename.endsWith(QLatin1String(".odf"))) { + writer.setFormat("ODF"); + } else { + writer.setFormat("plaintext"); + } + if (!writer.write(mEditor->document())) { + qCDebug(KMAIL_LOG)<<" Error during writing"; + } + } + delete dlg; + deleteLater(); +} + +void SaveAsFileJob::setHtmlMode(bool htmlMode) +{ + mHtmlMode = htmlMode; +} + +void SaveAsFileJob::setEditor(MessageComposer::KMeditor *editor) +{ + mEditor = editor; +} + +void SaveAsFileJob::setParentWidget(QWidget *parentWidget) +{ + mParentWidget = parentWidget; +} + + + + diff --git a/job/saveasfilejob.h b/job/saveasfilejob.h new file mode 100644 index 000000000..af1b6c8d5 --- /dev/null +++ b/job/saveasfilejob.h @@ -0,0 +1,47 @@ +/* + Copyright (c) 2015 Montel Laurent + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + This library is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public + License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + +*/ +#ifndef SAVEASFILEJOB_H +#define SAVEASFILEJOB_H + +#include +namespace MessageComposer { +class KMeditor; +} +class SaveAsFileJob : public QObject +{ + Q_OBJECT +public: + explicit SaveAsFileJob(QObject *parent = 0); + ~SaveAsFileJob(); + void start(); + + void setHtmlMode(bool htmlMode); + + void setEditor(MessageComposer::KMeditor *editor); + + void setParentWidget(QWidget *parentWidget); + +private: + bool mHtmlMode; + MessageComposer::KMeditor *mEditor; + QWidget *mParentWidget; +}; + +#endif // SAVEASFILEJOB_H