summaryrefslogtreecommitdiff
path: root/server/modules/downloaders/curl/main.cpp
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss@sss.chaoslab.ru>2015-09-27 16:18:31 +0300
committerGluzskiy Alexandr <sss@sss.chaoslab.ru>2015-09-27 16:18:31 +0300
commit0c8c9cd98ddc28b662a4d3f777483e566e584c19 (patch)
tree97ef66dee1095b374f371fb8059d2c5aacc25c49 /server/modules/downloaders/curl/main.cpp
parent380a818768c810b7d9eed5cb240c15305921910f (diff)
server:
api: added std::list<std::string> metadata_setting_list(const std::string &module_name) to get list of all saved settings/metadata entries flat_files_metadata_module: implemented new metadata api call curl_downloader_module: reimplemented startup metadaats loading, still bad ...
Diffstat (limited to 'server/modules/downloaders/curl/main.cpp')
-rw-r--r--server/modules/downloaders/curl/main.cpp84
1 files changed, 46 insertions, 38 deletions
diff --git a/server/modules/downloaders/curl/main.cpp b/server/modules/downloaders/curl/main.cpp
index 5e33eb5..0317f32 100644
--- a/server/modules/downloaders/curl/main.cpp
+++ b/server/modules/downloaders/curl/main.cpp
@@ -47,16 +47,6 @@ downloader::~downloader()
//TODO: stop downloads
//TODO: deinit curl
//save runtime state on exit
- {
- //we need to know id of last element in downloads map on loading, save it
- if(!downloads.empty())
- {
- char id_[32];
- snprintf(id_, 31, "%d", downloads.rbegin()->first);
- std::string val = id_;
- api->metadata_set(this, "id_of_last_download", std::vector<char>(val.begin(), val.end()));
- }
- }
}
std::string compute_var_name(int download_id, std::string setting_name)
@@ -74,41 +64,59 @@ std::string compute_var_name(int download_id, std::string setting_name)
void downloader::on_modules_loaded()
{
//TODO: load downloads, metadata, e.t.c.
- std::vector<char> val;
- api->metadata_get(this, "id_of_last_download", val);
- std::string s(val.begin(), val.end());
- int last = atoi(s.c_str());
- for(int i = 0; i <= last; i++)
+ auto setting_list = api->metadata_setting_list(this);
+ setting_list.sort();
{
- //TODO: rework following, for now just sufficient code for testing
- std::vector<char> tmp;
- if(!api->metadata_get(this, compute_var_name(i, "name"), tmp)) //always required
- continue;
- if(tmp.empty())
- continue;
- tmp.clear();
- if(!api->metadata_get(this, compute_var_name(i, "download_path"), tmp)) //always required
- continue;
- if(tmp.empty())
- continue;
- tmp.clear();
+ int id = -1;
std::map<int, std::string> params;
- for(int p = 0;; p++)
+ std::string name, download_path;
+ for(auto i : setting_list)
{
- char num_[32];
- snprintf(num_, 31, "%d", p);
- if(api->metadata_get(this, compute_var_name(i, std::string("param_") + num_), tmp))
+ std::string::size_type p = i.find("_", strlen("download_"));
+ std::string id_str = i.substr(strlen("download_"), p - strlen("download_"));
+ int new_id = atoi(id_str.c_str());
+ if(id == -1)
+ id = new_id;
+ if(id != new_id)
+ {
+ //TODO: something better
+ add_download(params);
+ params.clear();
+ name.clear();
+ download_path.clear();
+ }
+ if(i.find("_download_path") != std::string::npos)
+ {
+ std::vector<char> v;
+ if(!api->metadata_get(this, i, v))
+ {
+ //TODO: handle error
+ }
+ download_path.assign(v.begin(), v.end());
+ }
+ if(i.find("_name") != std::string::npos)
+ {
+ std::vector<char> v;
+ if(!api->metadata_get(this, i, v))
+ {
+ //TODO: handle error
+ }
+ name.assign(v.begin(), v.end());
+ }
+ std::string::size_type pos2 = i.find("_param_");
+ if(pos2 != std::string::npos)
{
- params[p] = std::string(tmp.begin(), tmp.end());
- tmp.clear();
+ std::string id_str2 = i.substr(pos2 + strlen("_param_"));
+ int param_id = atoi(id_str2.c_str());
+ std::vector<char> v;
+ if(!api->metadata_get(this, i, v))
+ {
+ //TODO: handle error
+ }
+ params[param_id] = std::string(v.begin(), v.end());
}
- else
- break;
}
- add_download(params); //TODO: implement better approach, but this should be ok for testing
-
}
-
}
void downloader::load(core_api *a)