diff options
Diffstat (limited to 'server/modules/downloaders/curl/main.cpp')
-rw-r--r-- | server/modules/downloaders/curl/main.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/server/modules/downloaders/curl/main.cpp b/server/modules/downloaders/curl/main.cpp index b3a2f36..f3da19e 100644 --- a/server/modules/downloaders/curl/main.cpp +++ b/server/modules/downloaders/curl/main.cpp @@ -166,6 +166,64 @@ download_s downloader::get_download(int download_id, std::map<int, std::string> return d; } +std::string compute_var_name(int download_id, std::string setting_name) +{ + std::string var_name = "download_"; + char id_s[64]; + snprintf(id_s, 63, "%d", download_id); + var_name += id_s; + var_name += "_"; + var_name += setting_name; + return var_name; +} + +bool downloader::metadata_set(int download_id, std::map<std::string, std::string> metadata) +{ + downloads[download_id].metadata = metadata; + for(auto i : downloads[download_id].metadata) + api->metadata_set(this, compute_var_name(download_id, i.first), std::vector<char>(i.second.begin(), i.second.end())); + return true; +} + +bool downloader::metadata_update(int download_id, std::map<std::string, std::string> metadata) +{ + for(auto i : metadata) + downloads[download_id].metadata[i.first] = i.second; + for(auto i : downloads[download_id].metadata) + api->metadata_set(this, compute_var_name(download_id, i.first), std::vector<char>(i.second.begin(), i.second.end())); + return true; +} + +bool downloader::metadata_drop(int download_id, std::string var) +{ + if(!var.empty()) + { + downloads[download_id].metadata.erase(var); + api->metadata_remove(this, compute_var_name(download_id, var)); + } + else + { + for(auto i : downloads[download_id].metadata) + api->metadata_remove(this, compute_var_name(download_id, i.first)); + downloads[download_id].metadata.clear(); + } + return true; +} +std::map<std::string, std::string> downloader::metadata_get(int download_id) +{ + return downloads[download_id].metadata; +} + +std::string downloader::metadata_get(int download_id, std::string var) +{ + auto i = downloads[download_id].metadata.find(var); + if(i != downloads[download_id].metadata.end()) + return i->second; + return std::string(); +} + + + extern "C" module_downloader* udm_downloader_module_load() { return new downloader; |