summaryrefslogtreecommitdiff
path: root/server/modules
diff options
context:
space:
mode:
Diffstat (limited to 'server/modules')
-rw-r--r--server/modules/downloaders/curl/include/curl_download.h4
-rw-r--r--server/modules/downloaders/curl/main.cpp2
-rw-r--r--server/modules/downloaders/curl/src/curl_download.cpp14
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()