diff --git a/src/filetransferpseudojob.cpp b/src/filetransferpseudojob.cpp index b87c357d1..0de21d406 100644 --- a/src/filetransferpseudojob.cpp +++ b/src/filetransferpseudojob.cpp @@ -41,6 +41,15 @@ void FileTransferPseudoJob::fileTransferFailed(const QString &id, const QString emitResult(); } +void FileTransferPseudoJob::fileTransferCanceled(const QString &id) +{ + if (id != m_eventId) { + return; + } + setError(KJob::KilledJobError); + emitResult(); +} + void FileTransferPseudoJob::start() { setTotalAmount(Unit::Files, 1); diff --git a/src/filetransferpseudojob.h b/src/filetransferpseudojob.h index 6de698d6c..b26ea1dc6 100644 --- a/src/filetransferpseudojob.h +++ b/src/filetransferpseudojob.h @@ -38,6 +38,11 @@ public: */ void fileTransferFailed(const QString &id, const QString &errorMessage = {}); + /** + * @brief Set the file transfer as canceled. + */ + void fileTransferCanceled(const QString &id); + /** * @brief Start the file transfer. */ diff --git a/src/neochatroom.cpp b/src/neochatroom.cpp index 4497f34fc..3ed7fc682 100644 --- a/src/neochatroom.cpp +++ b/src/neochatroom.cpp @@ -256,7 +256,14 @@ QCoro::Task NeoChatRoom::doUploadFile(QUrl url, QString body) auto job = new FileTransferPseudoJob(FileTransferPseudoJob::Upload, url.toLocalFile(), txnId); connect(this, &Room::fileTransferProgress, job, &FileTransferPseudoJob::fileTransferProgress); connect(this, &Room::fileTransferCompleted, job, &FileTransferPseudoJob::fileTransferCompleted); - connect(this, &Room::fileTransferFailed, job, &FileTransferPseudoJob::fileTransferFailed); + connect(this, &Room::fileTransferFailed, job, [this, job, txnId] { + auto info = fileTransferInfo(txnId); + if (info.status == FileTransferInfo::Cancelled) { + job->fileTransferCanceled(txnId); + } else { + job->fileTransferFailed(txnId); + } + }); KIO::getJobTracker()->registerJob(job); job->start(); #endif @@ -1511,7 +1518,14 @@ void NeoChatRoom::download(const QString &eventId, const QUrl &localFilename) auto job = new FileTransferPseudoJob(FileTransferPseudoJob::Download, localFilename.toLocalFile(), eventId); connect(this, &Room::fileTransferProgress, job, &FileTransferPseudoJob::fileTransferProgress); connect(this, &Room::fileTransferCompleted, job, &FileTransferPseudoJob::fileTransferCompleted); - connect(this, &Room::fileTransferFailed, job, &FileTransferPseudoJob::fileTransferFailed); + connect(this, &Room::fileTransferFailed, job, [this, job, eventId] { + auto info = fileTransferInfo(eventId); + if (info.status == FileTransferInfo::Cancelled) { + job->fileTransferCanceled(eventId); + } else { + job->fileTransferFailed(eventId); + } + }); KIO::getJobTracker()->registerJob(job); job->start(); #endif