You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
4.3 KiB
143 lines
4.3 KiB
/* |
|
Copyright (C) 2010 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.net, |
|
Author Tobias Koenig <tokoe@kdab.com> |
|
|
|
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 "sendmdnhandler.h" |
|
|
|
#include "mailcommon/mailinterfaces.h" |
|
#include "kernel/mailkernel.h" |
|
#include "util/mailutil.h" |
|
#include "filter/mdnadvicedialog.h" |
|
#include "mailcommon_debug.h" |
|
#include <MessageComposer/Util> |
|
#include <MessageComposer/MessageFactoryNG> |
|
#include <MessageComposer/MessageSender> |
|
#include <MessageViewer/MessageViewerSettings> |
|
|
|
#include <Collection> |
|
#include <Item> |
|
#include <Akonadi/KMime/MessageFlags> |
|
|
|
#include <QQueue> |
|
#include <QTimer> |
|
|
|
using namespace MailCommon; |
|
|
|
class Q_DECL_HIDDEN SendMdnHandler::Private |
|
{ |
|
public: |
|
Private(SendMdnHandler *qq, IKernel *kernel) |
|
: q(qq) |
|
, mKernel(kernel) |
|
{ |
|
} |
|
|
|
void handleMessages(); |
|
|
|
SendMdnHandler *q; |
|
IKernel *mKernel = nullptr; |
|
QQueue<Akonadi::Item> mItemQueue; |
|
QTimer mTimer; |
|
}; |
|
|
|
void SendMdnHandler::Private::handleMessages() |
|
{ |
|
while (!mItemQueue.isEmpty()) { |
|
Akonadi::Item item = mItemQueue.dequeue(); |
|
|
|
#if 0 |
|
// should we send an MDN? |
|
if (MessageViewer::MessageViewerSettings::notSendWhenEncrypted() |
|
&& message()->encryptionState() != KMMsgNotEncrypted |
|
&& message()->encryptionState() != KMMsgEncryptionStateUnknown) { |
|
return; |
|
} |
|
#else |
|
qCDebug(MAILCOMMON_LOG) << "AKONADI PORT: Disabled code in " << Q_FUNC_INFO; |
|
#endif |
|
|
|
const Akonadi::Collection collection = item.parentCollection(); |
|
if (collection.isValid() |
|
&& (CommonKernel->folderIsSentMailFolder(collection) |
|
|| CommonKernel->folderIsTrash(collection) |
|
|| CommonKernel->folderIsDraftOrOutbox(collection) |
|
|| CommonKernel->folderIsTemplates(collection))) { |
|
continue; |
|
} |
|
|
|
const KMime::Message::Ptr message = MessageComposer::Util::message(item); |
|
if (!message) { |
|
continue; |
|
} |
|
|
|
const QPair<bool, KMime::MDN::SendingMode> mdnSend |
|
= MDNAdviceHelper::instance()->checkAndSetMDNInfo(item, KMime::MDN::Displayed); |
|
if (mdnSend.first) { |
|
const int quote = MessageViewer::MessageViewerSettings::self()->quoteMessage(); |
|
|
|
MessageComposer::MessageFactoryNG factory(message, Akonadi::Item().id()); |
|
factory.setIdentityManager(mKernel->identityManager()); |
|
factory.setFolderIdentity(MailCommon::Util::folderIdentity(item)); |
|
|
|
const KMime::Message::Ptr mdn |
|
= factory.createMDN(KMime::MDN::ManualAction, KMime::MDN::Displayed, mdnSend.second, quote); |
|
if (mdn) { |
|
if (!mKernel->msgSender()->send(mdn)) { |
|
qCDebug(MAILCOMMON_LOG) << "Sending failed."; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
SendMdnHandler::SendMdnHandler(IKernel *kernel, QObject *parent) |
|
: QObject(parent) |
|
, d(new Private(this, kernel)) |
|
{ |
|
d->mTimer.setSingleShot(true); |
|
connect(&d->mTimer, &QTimer::timeout, this, [this]() { |
|
d->handleMessages(); |
|
}); |
|
} |
|
|
|
SendMdnHandler::~SendMdnHandler() |
|
{ |
|
delete d; |
|
} |
|
|
|
void SendMdnHandler::setItem(const Akonadi::Item &item) |
|
{ |
|
if (item.hasFlag(Akonadi::MessageFlags::Seen)) { |
|
return; |
|
} |
|
|
|
d->mTimer.stop(); |
|
|
|
d->mItemQueue.enqueue(item); |
|
|
|
if (MessageViewer::MessageViewerSettings::self()->delayedMarkAsRead() |
|
&& MessageViewer::MessageViewerSettings::self()->delayedMarkTime() != 0) { |
|
d->mTimer.start(MessageViewer::MessageViewerSettings::self()->delayedMarkTime() * 1000); |
|
return; |
|
} |
|
|
|
d->handleMessages(); |
|
} |
|
|
|
#include "moc_sendmdnhandler.cpp"
|
|
|