diff options
Diffstat (limited to 'server/modules')
-rw-r--r-- | server/modules/downloaders/curl/include/curl_download.h | 4 | ||||
-rw-r--r-- | server/modules/downloaders/curl/main.cpp | 2 | ||||
-rw-r--r-- | server/modules/downloaders/curl/src/curl_download.cpp | 14 |
3 files changed, 15 insertions, 5 deletions
diff --git a/server/modules/downloaders/curl/include/curl_download.h b/server/modules/downloaders/curl/include/curl_download.h index 514d4f2..c98b64e 100644 --- a/server/modules/downloaders/curl/include/curl_download.h +++ b/server/modules/downloaders/curl/include/curl_download.h @@ -27,7 +27,7 @@ class curl_download : public download_s { public: - curl_download(std::map<int, std::string> params, core_api *a); + curl_download(std::map<int, std::string> params, core_api *a, module_base *m); virtual ~curl_download(); bool start(); @@ -47,6 +47,8 @@ class curl_download : public download_s bool cancel_transfer = false; core_events::download_state state = core_events::download_stopped; std::string download_path; + core_api *api = nullptr; + module_base *module = nullptr; }; #endif // CURL_DOWNLOAD_H diff --git a/server/modules/downloaders/curl/main.cpp b/server/modules/downloaders/curl/main.cpp index c21d8b3..667f4a3 100644 --- a/server/modules/downloaders/curl/main.cpp +++ b/server/modules/downloaders/curl/main.cpp @@ -146,7 +146,7 @@ int downloader::add_download(std::map<int, std::string> params) { if(params.find(0) == params.end()) //missed required parameter return -1; - curl_download *d = new curl_download(params, api); + curl_download *d = new curl_download(params, api, this); // std::string download_name; { auto p1 = params[0].rfind("/"); diff --git a/server/modules/downloaders/curl/src/curl_download.cpp b/server/modules/downloaders/curl/src/curl_download.cpp index 9df06a1..054ce22 100644 --- a/server/modules/downloaders/curl/src/curl_download.cpp +++ b/server/modules/downloaders/curl/src/curl_download.cpp @@ -38,13 +38,15 @@ size_t curl_w_callback(char *ptr, size_t size, size_t nmemb, void *userdata) return size_; } -curl_download::curl_download(std::map<int, std::string> params, core_api *a) +curl_download::curl_download(std::map<int, std::string> params, core_api *a, module_base *m) { //for now we use single transfer connection for url //TODO: support multiple connections in parallel for multithreaded download easy_handle = curl_easy_init(); if(!easy_handle) ; //TODO: handle error + api = a; + module = m; curl_easy_setopt(easy_handle, CURLOPT_URL, params[0].c_str()); //Url as set in module_info curl_easy_setopt(easy_handle, CURLOPT_WRITEFUNCTION, curl_w_callback); @@ -52,7 +54,7 @@ curl_download::curl_download(std::map<int, std::string> params, core_api *a) if(!params[1].empty()) download_path = params[1]; else - download_path = a->get_core_settings()["download_dir"]; + download_path = api->get_core_settings()["download_dir"]; //curl_easy_setopt(h, CURLOPT_DEFAULT_PROTOCOL, "http"); //require curl >= 7.45 @@ -86,7 +88,13 @@ void curl_download::perform_internal() state = core_events::download_error; else state = core_events::download_completed; - //TODO: fire event + std::list<core_events::download_state_info> l; + core_events::download_state_info i; + i.download_id = id; + i.state = state; + l.push_back(i); + api->download_state_changed(module, l); + //TODO: save state } curl_download::~curl_download() |