Messagelib

attachmentupdatejob.cpp
1 /*
2  SPDX-FileCopyrightText: 2014-2023 Laurent Montel <[email protected]>
3 
4  SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #include "attachmentupdatejob.h"
8 #include "MessageCore/AttachmentFromUrlBaseJob"
9 #include "attachmentfromurlutils.h"
10 #include "messagecore_debug.h"
11 #include <KLocalizedString>
12 #include <QTimer>
13 
14 using namespace MessageCore;
15 
16 class Q_DECL_HIDDEN MessageCore::AttachmentUpdateJob::AttachmentUpdateJobPrivate
17 {
18 public:
19  AttachmentUpdateJobPrivate(AttachmentUpdateJob *qq);
20 
21  void doStart(); // slot
22  void loadJobResult(KJob *);
23 
24  AttachmentUpdateJob *const q;
25  AttachmentPart::Ptr mOriginalPart;
26  AttachmentPart::Ptr mUpdatedPart;
27 };
28 
29 AttachmentUpdateJob::AttachmentUpdateJobPrivate::AttachmentUpdateJobPrivate(AttachmentUpdateJob *qq)
30  : q(qq)
31 {
32 }
33 
34 void AttachmentUpdateJob::AttachmentUpdateJobPrivate::doStart()
35 {
36  Q_ASSERT(mOriginalPart);
37  if (mOriginalPart->url().isEmpty()) {
38  qCDebug(MESSAGECORE_LOG) << " url is empty. We can't update file";
39  q->setError(KJob::UserDefinedError);
40  q->setErrorText(i18n("URL is empty."));
41  q->emitResult();
42  return;
43  }
44  MessageCore::AttachmentFromUrlBaseJob *job = MessageCore::AttachmentFromUrlUtils::createAttachmentJob(mOriginalPart->url(), q);
45  connect(job, &AttachmentFromUrlBaseJob::result, q, [this](KJob *job) {
46  loadJobResult(job);
47  });
48  job->start();
49 }
50 
51 void AttachmentUpdateJob::AttachmentUpdateJobPrivate::loadJobResult(KJob *job)
52 {
53  if (job->error()) {
54  q->setError(KJob::UserDefinedError);
55  q->setErrorText(job->errorString());
56  q->emitResult();
57  return;
58  }
59 
60  Q_ASSERT(dynamic_cast<AttachmentLoadJob *>(job));
61  auto ajob = static_cast<AttachmentLoadJob *>(job);
62  mUpdatedPart = ajob->attachmentPart();
63  mUpdatedPart->setName(q->originalPart()->name());
64  mUpdatedPart->setFileName(q->originalPart()->fileName());
65  mUpdatedPart->setDescription(q->originalPart()->description());
66  mUpdatedPart->setSigned(q->originalPart()->isSigned());
67  mUpdatedPart->setEncrypted(q->originalPart()->isEncrypted());
68  mUpdatedPart->setEncoding(q->originalPart()->encoding());
69  mUpdatedPart->setMimeType(q->originalPart()->mimeType());
70  mUpdatedPart->setInline(q->originalPart()->isInline());
71  q->emitResult(); // Success.
72 }
73 
74 AttachmentUpdateJob::AttachmentUpdateJob(const AttachmentPart::Ptr &part, QObject *parent)
75  : KJob(parent)
76  , d(new AttachmentUpdateJobPrivate(this))
77 {
78  d->mOriginalPart = part;
79 }
80 
81 AttachmentUpdateJob::~AttachmentUpdateJob() = default;
82 
84 {
85  QTimer::singleShot(0, this, [this]() {
86  d->doStart();
87  });
88 }
89 
90 AttachmentPart::Ptr AttachmentUpdateJob::originalPart() const
91 {
92  return d->mOriginalPart;
93 }
94 
95 AttachmentPart::Ptr AttachmentUpdateJob::updatedPart() const
96 {
97  return d->mUpdatedPart;
98 }
99 
100 #include "moc_attachmentupdatejob.cpp"
virtual Q_SCRIPTABLE void start()=0
AttachmentPart::Ptr attachmentPart() const
Returns the loaded attachment.
Q_SCRIPTABLE Q_NOREPLY void start()
QString i18n(const char *text, const TYPE &arg...)
A base class for jobs to load attachments from different sources.
virtual QString errorString() const
int error() const
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Sat Apr 1 2023 04:01:56 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.