File indexing completed on 2025-02-16 04:50:18
0001 /* 0002 SPDX-FileCopyrightText: 2014 Christian Mollekopf <mollekopf@kolabsys.com> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 #include "messagehelper.h" 0007 0008 #include <Akonadi/MessageFlags> 0009 0010 #include "resourcetask.h" 0011 0012 #include "imapresource_debug.h" 0013 0014 MessageHelper::~MessageHelper() = default; 0015 0016 Akonadi::Item MessageHelper::createItemFromMessage(const KMime::Message::Ptr &message, 0017 const qint64 uid, 0018 const qint64 size, 0019 const QMap<QByteArray, QVariant> &attrs, 0020 const QList<QByteArray> &flags, 0021 const KIMAP::FetchJob::FetchScope &scope, 0022 bool &ok) const 0023 { 0024 Q_UNUSED(attrs) 0025 0026 Akonadi::Item i; 0027 if (scope.mode == KIMAP::FetchJob::FetchScope::Flags) { 0028 i.setRemoteId(QString::number(uid)); 0029 i.setMimeType(KMime::Message::mimeType()); 0030 i.setFlags(ResourceTask::toAkonadiFlags(flags)); 0031 } else { 0032 if (!message) { 0033 qCWarning(IMAPRESOURCE_LOG) << "Got empty message: " << uid; 0034 ok = false; 0035 return {}; 0036 } 0037 // Sometimes messages might not have a body at all 0038 if (message->body().isEmpty() && (scope.mode == KIMAP::FetchJob::FetchScope::Full || scope.mode == KIMAP::FetchJob::FetchScope::Content)) { 0039 // In that case put a space in as body so that it gets cached 0040 // otherwise we'll wrongly believe the body part is missing from the cache 0041 message->setBody(" "); 0042 } 0043 i.setRemoteId(QString::number(uid)); 0044 i.setMimeType(KMime::Message::mimeType()); 0045 i.setPayload(KMime::Message::Ptr(message)); 0046 i.setSize(size); 0047 0048 Akonadi::MessageFlags::copyMessageFlags(*message, i); 0049 const auto flagsLst = ResourceTask::toAkonadiFlags(flags); 0050 for (const QByteArray &flag : flagsLst) { 0051 i.setFlag(flag); 0052 } 0053 } 0054 ok = true; 0055 return i; 0056 }