From 3b8c3afa3e2f573f565c0d69dc9d8eea6bfcc620 Mon Sep 17 00:00:00 2001 From: Kai Uwe Broulik Date: Fri, 3 Jan 2025 13:56:33 +0100 Subject: [PATCH] Support canceling file transfer from pseudo job Allows to click cancel on the job popup rather than only from within NeoChat. --- src/filetransferpseudojob.cpp | 7 +++++++ src/filetransferpseudojob.h | 7 +++++++ src/neochatroom.cpp | 2 ++ 3 files changed, 16 insertions(+) diff --git a/src/filetransferpseudojob.cpp b/src/filetransferpseudojob.cpp index 0de21d406..f87badffc 100644 --- a/src/filetransferpseudojob.cpp +++ b/src/filetransferpseudojob.cpp @@ -12,6 +12,7 @@ FileTransferPseudoJob::FileTransferPseudoJob(Operation operation, const QString , m_eventId(eventId) , m_operation(operation) { + setCapabilities(KJob::Killable); } void FileTransferPseudoJob::fileTransferProgress(const QString &id, qint64 progress, qint64 total) @@ -58,3 +59,9 @@ void FileTransferPseudoJob::start() {i18nc("The URL being downloaded/uploaded", "Source"), m_path}, {i18nc("The location being downloaded to", "Destination"), m_path}); } + +bool FileTransferPseudoJob::doKill() +{ + Q_EMIT cancelRequested(m_eventId); + return true; +} diff --git a/src/filetransferpseudojob.h b/src/filetransferpseudojob.h index b26ea1dc6..2c0ba90a3 100644 --- a/src/filetransferpseudojob.h +++ b/src/filetransferpseudojob.h @@ -15,6 +15,7 @@ */ class FileTransferPseudoJob : public KJob { + Q_OBJECT public: enum Operation { Download, @@ -48,6 +49,12 @@ public: */ void start() override; +protected: + bool doKill() override; + +Q_SIGNALS: + void cancelRequested(const QString &id); + private: QString m_path; QString m_eventId; diff --git a/src/neochatroom.cpp b/src/neochatroom.cpp index 3ed7fc682..6da97c188 100644 --- a/src/neochatroom.cpp +++ b/src/neochatroom.cpp @@ -264,6 +264,7 @@ QCoro::Task NeoChatRoom::doUploadFile(QUrl url, QString body) job->fileTransferFailed(txnId); } }); + connect(job, &FileTransferPseudoJob::cancelRequested, this, &Room::cancelFileTransfer); KIO::getJobTracker()->registerJob(job); job->start(); #endif @@ -1526,6 +1527,7 @@ void NeoChatRoom::download(const QString &eventId, const QUrl &localFilename) job->fileTransferFailed(eventId); } }); + connect(job, &FileTransferPseudoJob::cancelRequested, this, &Room::cancelFileTransfer); KIO::getJobTracker()->registerJob(job); job->start(); #endif