File indexing completed on 2025-03-09 04:54:34

0001 /*
0002    SPDX-FileCopyrightText: 2014-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "modifymessagedisplayformatjob.h"
0008 #include "messageviewer_debug.h"
0009 
0010 #include <Akonadi/ItemModifyJob>
0011 #include <Akonadi/Session>
0012 
0013 #include "viewer/messagedisplayformatattribute.h"
0014 
0015 using namespace MessageViewer;
0016 ModifyMessageDisplayFormatJob::ModifyMessageDisplayFormatJob(Akonadi::Session *session, QObject *parent)
0017     : QObject(parent)
0018     , mSession(session)
0019 {
0020 }
0021 
0022 ModifyMessageDisplayFormatJob::~ModifyMessageDisplayFormatJob() = default;
0023 
0024 void ModifyMessageDisplayFormatJob::setRemoteContent(bool remote)
0025 {
0026     mRemoteContent = remote;
0027 }
0028 
0029 void ModifyMessageDisplayFormatJob::setMessageFormat(Viewer::DisplayFormatMessage format)
0030 {
0031     mMessageFormat = format;
0032 }
0033 
0034 void ModifyMessageDisplayFormatJob::setResetFormat(bool resetFormat)
0035 {
0036     mResetFormat = resetFormat;
0037 }
0038 
0039 void ModifyMessageDisplayFormatJob::start()
0040 {
0041     if (mMessageItem.isValid()) {
0042         if (mResetFormat) {
0043             resetDisplayFormat();
0044         } else {
0045             modifyDisplayFormat();
0046         }
0047     } else {
0048         qCDebug(MESSAGEVIEWER_LOG) << " messageItem doesn't exist";
0049         deleteLater();
0050     }
0051 }
0052 
0053 void ModifyMessageDisplayFormatJob::setMessageItem(const Akonadi::Item &messageItem)
0054 {
0055     mMessageItem = messageItem;
0056 }
0057 
0058 void ModifyMessageDisplayFormatJob::resetDisplayFormat()
0059 {
0060     mMessageItem.removeAttribute<MessageViewer::MessageDisplayFormatAttribute>();
0061     auto modify = new Akonadi::ItemModifyJob(mMessageItem, mSession);
0062     modify->setIgnorePayload(true);
0063     modify->disableRevisionCheck();
0064     connect(modify, &KJob::result, this, &ModifyMessageDisplayFormatJob::slotModifyItemDone);
0065 }
0066 
0067 void ModifyMessageDisplayFormatJob::modifyDisplayFormat()
0068 {
0069     auto attr = mMessageItem.attribute<MessageViewer::MessageDisplayFormatAttribute>(Akonadi::Item::AddIfMissing);
0070     attr->setRemoteContent(mRemoteContent);
0071     attr->setMessageFormat(mMessageFormat);
0072     auto modify = new Akonadi::ItemModifyJob(mMessageItem, mSession);
0073     modify->setIgnorePayload(true);
0074     modify->disableRevisionCheck();
0075     connect(modify, &KJob::result, this, &ModifyMessageDisplayFormatJob::slotModifyItemDone);
0076 }
0077 
0078 void ModifyMessageDisplayFormatJob::slotModifyItemDone(KJob *job)
0079 {
0080     if (job && job->error()) {
0081         qCWarning(MESSAGEVIEWER_LOG) << " Error trying to change attribute:" << job->errorText();
0082     }
0083     deleteLater();
0084 }
0085 
0086 #include "moc_modifymessagedisplayformatjob.cpp"