diff --git a/include/downloader.h b/include/downloader.h index 43efee9d9..b60e48136 100644 --- a/include/downloader.h +++ b/include/downloader.h @@ -56,6 +56,7 @@ class Download { void updateStatus(bool follow=false); void pauseDownload(); void resumeDownload(); + void cancelDownload(); StatusResult getStatus() { return m_status; } std::string getDid() { return m_did; } std::string getFollowedBy() { return m_followedBy; } diff --git a/src/aria2.cpp b/src/aria2.cpp index c24135a85..0366beb90 100644 --- a/src/aria2.cpp +++ b/src/aria2.cpp @@ -233,4 +233,11 @@ void Aria2::unpause(const std::string& gid) doRequest(methodCall); } +void Aria2::remove(const std::string& gid) +{ + MethodCall methodCall("aria2.remove", m_secret); + methodCall.newParamValue().set(gid); + doRequest(methodCall); +} + } // end namespace kiwix diff --git a/src/aria2.h b/src/aria2.h index 9f073371a..898904a5d 100644 --- a/src/aria2.h +++ b/src/aria2.h @@ -42,6 +42,7 @@ class Aria2 void shutdown(); void pause(const std::string& gid); void unpause(const std::string& gid); + void remove(const std::string& gid); }; }; //end namespace kiwix diff --git a/src/downloader.cpp b/src/downloader.cpp index 5d1e5e482..1eccf38b6 100644 --- a/src/downloader.cpp +++ b/src/downloader.cpp @@ -36,6 +36,8 @@ namespace kiwix void Download::updateStatus(bool follow) { + if (m_status == Download::K_REMOVED) + return; static std::vector statusKey = {"status", "files", "totalLength", "completedLength", "followedBy", "downloadSpeed", "verifiedLength"}; @@ -111,6 +113,15 @@ void Download::pauseDownload() updateStatus(true); } +void Download::cancelDownload() +{ + if (!m_followedBy.empty()) + mp_aria->remove(m_followedBy); + else + mp_aria->remove(m_did); + m_status = Download::K_REMOVED; +} + /* Constructor */ Downloader::Downloader() : mp_aria(new Aria2())