From 39f2f3d975a1ce38144ef1992506416a934e5005 Mon Sep 17 00:00:00 2001 From: shunf4 Date: Sat, 16 Oct 2021 00:20:31 +0800 Subject: [PATCH] feat: copy pasted image file to download folder after successful upload --- core/networkaccess.cpp | 27 ++++++++++++++++++++++++++- core/networkaccess.h | 2 +- core/squawk.h | 2 +- ui/squawk.cpp | 2 +- ui/squawk.h | 2 +- ui/widgets/conversation.cpp | 4 ++++ 6 files changed, 34 insertions(+), 5 deletions(-) diff --git a/core/networkaccess.cpp b/core/networkaccess.cpp index 69fe812..c2cd65d 100644 --- a/core/networkaccess.cpp +++ b/core/networkaccess.cpp @@ -378,7 +378,32 @@ void Core::NetworkAccess::onUploadFinished() qDebug() << "upload success for" << url; storage.addFile(upl->messages, upl->url, upl->path); - emit uploadFileComplete(upl->messages, upl->url); + emit uploadFileComplete(upl->messages, upl->url, upl->path); + + // Copy file to Download folder if it is a temp file. See Conversation::onImagePasted. + if (upl->path.startsWith(QDir::tempPath() + QStringLiteral("/squawk_img_attach_")) && upl->path.endsWith(".png")) { + QString err = ""; + QString downloadDirPath = prepareDirectory(upl->messages.front().jid); + if (downloadDirPath.size() > 0) { + QString newPath = downloadDirPath + "/" + upl->path.mid(QDir::tempPath().length() + 1); + + // Copy {TEMPDIR}/squawk_img_attach_XXXXXX.png to Download folder + bool copyResult = QFile::copy(upl->path, newPath); + + if (copyResult) { + // Change storage + storage.setPath(upl->url, newPath); + } else { + err = "copying to " + newPath + " failed"; + } + } else { + err = "Couldn't prepare a directory for file"; + } + + if (err.size() != 0) { + qDebug() << "failed to copy temporary upload file " << upl->path << " to download folder:" << err; + } + } } upl->reply->deleteLater(); diff --git a/core/networkaccess.h b/core/networkaccess.h index 75c189c..89d0633 100644 --- a/core/networkaccess.h +++ b/core/networkaccess.h @@ -58,7 +58,7 @@ public: signals: void loadFileProgress(const std::list& msgs, qreal value, bool up); void loadFileError(const std::list& msgs, const QString& text, bool up); - void uploadFileComplete(const std::list& msgs, const QString& url); + void uploadFileComplete(const std::list& msgs, const QString& url, const QString& path); void downloadFileComplete(const std::list& msgs, const QString& path); public slots: diff --git a/core/squawk.h b/core/squawk.h index 338eb40..3715afe 100644 --- a/core/squawk.h +++ b/core/squawk.h @@ -82,7 +82,7 @@ signals: void fileError(const std::list msgs, const QString& error, bool up); void fileProgress(const std::list msgs, qreal value, bool up); void fileDownloadComplete(const std::list msgs, const QString& path); - void fileUploadComplete(const std::list msgs, const QString& path); + void fileUploadComplete(const std::list msgs, const QString& url, const QString& path); void responseVCard(const QString& jid, const Shared::VCard& card); void changeMessage(const QString& account, const QString& jid, const QString& id, const QMap& data); diff --git a/ui/squawk.cpp b/ui/squawk.cpp index 6a0a676..406ee45 100644 --- a/ui/squawk.cpp +++ b/ui/squawk.cpp @@ -405,7 +405,7 @@ void Squawk::fileError(const std::list msgs, const QString& rosterModel.fileError(msgs, error, up); } -void Squawk::fileUploadComplete(const std::list msgs, const QString& path) +void Squawk::fileUploadComplete(const std::list msgs, const QString& url, const QString& path) { rosterModel.fileComplete(msgs, true); } diff --git a/ui/squawk.h b/ui/squawk.h index 28389fa..cb93259 100644 --- a/ui/squawk.h +++ b/ui/squawk.h @@ -107,7 +107,7 @@ public slots: void fileError(const std::list msgs, const QString& error, bool up); void fileProgress(const std::list msgs, qreal value, bool up); void fileDownloadComplete(const std::list msgs, const QString& path); - void fileUploadComplete(const std::list msgs, const QString& path); + void fileUploadComplete(const std::list msgs, const QString& url, const QString& path); void responseVCard(const QString& jid, const Shared::VCard& card); void changeMessage(const QString& account, const QString& jid, const QString& id, const QMap& data); void requestPassword(const QString& account); diff --git a/ui/widgets/conversation.cpp b/ui/widgets/conversation.cpp index 3f07a2c..fcf28c3 100644 --- a/ui/widgets/conversation.cpp +++ b/ui/widgets/conversation.cpp @@ -249,6 +249,10 @@ void Conversation::onImagePasted() tempFile->close(); qDebug() << "image on paste temp file: " << tempFile->fileName(); addAttachedFile(tempFile->fileName()); + + // The file, if successfully uploaded, will be copied to Download folder. + // On application closing, this temporary file will be automatically removed by Qt. + // See Core::NetworkAccess::onUploadFinished. } void Conversation::onAttach()