File indexing completed on 2025-03-09 04:54:12
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 "attachmentupdatejob.h" 0008 #include "MessageCore/AttachmentFromUrlBaseJob" 0009 #include "attachmentfromurlutils.h" 0010 #include "messagecore_debug.h" 0011 #include <KLocalizedString> 0012 #include <QTimer> 0013 0014 using namespace MessageCore; 0015 0016 class Q_DECL_HIDDEN MessageCore::AttachmentUpdateJob::AttachmentUpdateJobPrivate 0017 { 0018 public: 0019 AttachmentUpdateJobPrivate(AttachmentUpdateJob *qq); 0020 0021 void doStart(); // slot 0022 void loadJobResult(KJob *); 0023 0024 AttachmentUpdateJob *const q; 0025 AttachmentPart::Ptr mOriginalPart; 0026 AttachmentPart::Ptr mUpdatedPart; 0027 }; 0028 0029 AttachmentUpdateJob::AttachmentUpdateJobPrivate::AttachmentUpdateJobPrivate(AttachmentUpdateJob *qq) 0030 : q(qq) 0031 { 0032 } 0033 0034 void AttachmentUpdateJob::AttachmentUpdateJobPrivate::doStart() 0035 { 0036 Q_ASSERT(mOriginalPart); 0037 if (mOriginalPart->url().isEmpty()) { 0038 qCDebug(MESSAGECORE_LOG) << " url is empty. We can't update file"; 0039 q->setError(KJob::UserDefinedError); 0040 q->setErrorText(i18n("URL is empty.")); 0041 q->emitResult(); 0042 return; 0043 } 0044 MessageCore::AttachmentFromUrlBaseJob *job = MessageCore::AttachmentFromUrlUtils::createAttachmentJob(mOriginalPart->url(), q); 0045 connect(job, &AttachmentFromUrlBaseJob::result, q, [this](KJob *job) { 0046 loadJobResult(job); 0047 }); 0048 job->start(); 0049 } 0050 0051 void AttachmentUpdateJob::AttachmentUpdateJobPrivate::loadJobResult(KJob *job) 0052 { 0053 if (job->error()) { 0054 q->setError(KJob::UserDefinedError); 0055 q->setErrorText(job->errorString()); 0056 q->emitResult(); 0057 return; 0058 } 0059 0060 Q_ASSERT(dynamic_cast<AttachmentLoadJob *>(job)); 0061 auto ajob = static_cast<AttachmentLoadJob *>(job); 0062 mUpdatedPart = ajob->attachmentPart(); 0063 mUpdatedPart->setName(q->originalPart()->name()); 0064 mUpdatedPart->setFileName(q->originalPart()->fileName()); 0065 mUpdatedPart->setDescription(q->originalPart()->description()); 0066 mUpdatedPart->setSigned(q->originalPart()->isSigned()); 0067 mUpdatedPart->setEncrypted(q->originalPart()->isEncrypted()); 0068 mUpdatedPart->setEncoding(q->originalPart()->encoding()); 0069 mUpdatedPart->setMimeType(q->originalPart()->mimeType()); 0070 mUpdatedPart->setInline(q->originalPart()->isInline()); 0071 q->emitResult(); // Success. 0072 } 0073 0074 AttachmentUpdateJob::AttachmentUpdateJob(const AttachmentPart::Ptr &part, QObject *parent) 0075 : KJob(parent) 0076 , d(new AttachmentUpdateJobPrivate(this)) 0077 { 0078 d->mOriginalPart = part; 0079 } 0080 0081 AttachmentUpdateJob::~AttachmentUpdateJob() = default; 0082 0083 void AttachmentUpdateJob::start() 0084 { 0085 QTimer::singleShot(0, this, [this]() { 0086 d->doStart(); 0087 }); 0088 } 0089 0090 AttachmentPart::Ptr AttachmentUpdateJob::originalPart() const 0091 { 0092 return d->mOriginalPart; 0093 } 0094 0095 AttachmentPart::Ptr AttachmentUpdateJob::updatedPart() const 0096 { 0097 return d->mUpdatedPart; 0098 } 0099 0100 #include "moc_attachmentupdatejob.cpp"