diff options
author | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2015-09-27 16:18:31 +0300 |
---|---|---|
committer | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2015-09-27 16:18:31 +0300 |
commit | 0c8c9cd98ddc28b662a4d3f777483e566e584c19 (patch) | |
tree | 97ef66dee1095b374f371fb8059d2c5aacc25c49 /server/modules/downloaders/curl/main.cpp | |
parent | 380a818768c810b7d9eed5cb240c15305921910f (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.cpp | 84 |
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) |