diff --git a/src/attachmenticonview.h b/src/attachmenticonview.h --- a/src/attachmenticonview.h +++ b/src/attachmenticonview.h @@ -46,15 +46,11 @@ explicit AttachmentIconView(QWidget *parent = nullptr); Q_REQUIRED_RESULT QMimeData *mimeData() const; - Q_REQUIRED_RESULT QUrl tempFileForAttachment(const KCalCore::Attachment::Ptr &attachment) const; protected: QMimeData *mimeData(const QList items) const override; void startDrag(Qt::DropActions supportedActions) override; void keyPressEvent(QKeyEvent *event) override; - -private: - mutable QHash mTempFiles; }; class AttachmentIconItem : public QListWidgetItem @@ -85,9 +81,12 @@ void readAttachment(); + Q_REQUIRED_RESULT QUrl tempFileForAttachment(); + private: KCalCore::Attachment::Ptr mAttachment; QString mSaveUri; + QUrl mTempFile; }; } diff --git a/src/attachmenticonview.cpp b/src/attachmenticonview.cpp --- a/src/attachmenticonview.cpp +++ b/src/attachmenticonview.cpp @@ -184,34 +184,33 @@ setContextMenuPolicy(Qt::CustomContextMenu); } -QUrl AttachmentIconView::tempFileForAttachment(const KCalCore::Attachment::Ptr &attachment) const +QUrl AttachmentIconItem::tempFileForAttachment() { - const QUrl url = mTempFiles.value(attachment); - if (url.isValid()) { - return url; + if (mTempFile.isValid()) { + return mTempFile; } QTemporaryFile *file = nullptr; QMimeDatabase db; - QStringList patterns = db.mimeTypeForName(attachment->mimeType()).globPatterns(); + QStringList patterns = db.mimeTypeForName(mAttachment->mimeType()).globPatterns(); if (!patterns.empty()) { file = new QTemporaryFile(QDir::tempPath() + QLatin1String( "/attachementview_XXXXX") + patterns.first().remove(QLatin1Char('*'))); } else { file = new QTemporaryFile(); } - file->setParent(const_cast(this)); + file->setParent(listWidget()); file->setAutoRemove(true); file->open(); // read-only not to give the idea that it could be written to file->setPermissions(QFile::ReadUser); - file->write(QByteArray::fromBase64(attachment->data())); - mTempFiles.insert(attachment, QUrl::fromLocalFile(file->fileName())); + file->write(QByteArray::fromBase64(mAttachment->data())); + mTempFile = QUrl::fromLocalFile(file->fileName()); file->close(); - return mTempFiles.value(attachment); + return mTempFile; } QMimeData *AttachmentIconView::mimeData(const QList< QListWidgetItem *> items) const @@ -223,7 +222,7 @@ if (it->isSelected()) { AttachmentIconItem *item = static_cast(it); if (item->isBinary()) { - urls.append(tempFileForAttachment(item->attachment())); + urls.append(item->tempFileForAttachment()); } else { urls.append(QUrl(item->uri())); } diff --git a/src/incidenceattachment.cpp b/src/incidenceattachment.cpp --- a/src/incidenceattachment.cpp +++ b/src/incidenceattachment.cpp @@ -254,7 +254,7 @@ if (att->isUri()) { sourceUrl = QUrl(att->uri()); } else { - sourceUrl = mAttachmentView->tempFileForAttachment(att); + sourceUrl = attitem->tempFileForAttachment(); } // save the attachment url auto job = KIO::file_copy(sourceUrl, QUrl::fromLocalFile(saveAsFile)); @@ -289,7 +289,7 @@ KRun::RunFlags flags; flags |= KRun::DeleteTemporaryFiles; flags |= KRun::RunExecutables; - KRun::runUrl(mAttachmentView->tempFileForAttachment(att), att->mimeType(), nullptr, flags); + KRun::runUrl(attitem->tempFileForAttachment(), att->mimeType(), nullptr, flags); } }