summaryrefslogtreecommitdiff
path: root/server/modules/downloaders/curl/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'server/modules/downloaders/curl/main.cpp')
-rw-r--r--server/modules/downloaders/curl/main.cpp58
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;