Add a Download class to encapsulate a aria2 download.

This commit is contained in:
Matthieu Gautier
2018-10-16 17:51:54 +02:00
parent f718c4c472
commit 43ff8565d1
2 changed files with 150 additions and 24 deletions

View File

@ -21,6 +21,8 @@
#define KIWIX_DOWNLOADER_H
#include <string>
#include <vector>
#include <map>
#include <pthread.h>
#include <memory>
@ -40,6 +42,41 @@ class AriaError : public std::runtime_error {
AriaError(const std::string& message) : std::runtime_error(message) {}
};
class Download {
public:
typedef enum { ACTIVE, WAITING, PAUSED, ERROR, COMPLETE, REMOVED, UNKNOWN } StatusResult;
Download() :
m_status(UNKNOWN) {}
Download(std::shared_ptr<Aria2> p_aria, std::string did)
: mp_aria(p_aria),
m_status(UNKNOWN),
m_did(did) {};
void updateStatus(bool follow=false);
StatusResult getStatus() { return m_status; }
std::string getDid() { return m_did; }
std::string getFollowedBy() { return m_followedBy; }
uint64_t getTotalLength() { return m_totalLength; }
uint64_t getCompletedLength() { return m_completedLength; }
uint64_t getDownloadSpeed() { return m_downloadSpeed; }
uint64_t getVerifiedLength() { return m_verifiedLength; }
std::string getPath() { return m_path; }
std::vector<std::string>& getUris() { return m_uris; }
protected:
std::shared_ptr<Aria2> mp_aria;
StatusResult m_status;
std::string m_did = "";
std::string m_followedBy = "";
uint64_t m_totalLength;
uint64_t m_completedLength;
uint64_t m_downloadSpeed;
uint64_t m_verifiedLength;
std::vector<std::string> m_uris;
std::string m_path;
};
/**
* A tool to download things.
*
@ -60,9 +97,15 @@ class Downloader
*/
DownloadedFile download(const std::string& url);
private:
Download* startDownload(const std::string& uri);
Download* getDownload(const std::string& did);
std::unique_ptr<Aria2> mp_aria;
size_t getNbDownload() { return m_knownDownloads.size(); }
std::vector<std::string> getDownloadIds();
private:
std::map<std::string, std::unique_ptr<Download>> m_knownDownloads;
std::shared_ptr<Aria2> mp_aria;
};
}