From 0c8c9cd98ddc28b662a4d3f777483e566e584c19 Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Sun, 27 Sep 2015 16:18:31 +0300 Subject: server: api: added std::list 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 ... --- server/modules/downloaders/curl/curl.project | 15 ++++- server/modules/downloaders/curl/main.cpp | 84 +++++++++++++++------------- server/modules/metadata/flat_files/main.cpp | 13 +++++ server/modules/metadata/flat_files/main.h | 1 + 4 files changed, 72 insertions(+), 41 deletions(-) (limited to 'server/modules') diff --git a/server/modules/downloaders/curl/curl.project b/server/modules/downloaders/curl/curl.project index 1f82e68..7163d63 100644 --- a/server/modules/downloaders/curl/curl.project +++ b/server/modules/downloaders/curl/curl.project @@ -1,6 +1,9 @@ + + + - - - 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(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 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 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 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 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 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 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) diff --git a/server/modules/metadata/flat_files/main.cpp b/server/modules/metadata/flat_files/main.cpp index d0e1040..5fe2182 100644 --- a/server/modules/metadata/flat_files/main.cpp +++ b/server/modules/metadata/flat_files/main.cpp @@ -163,6 +163,19 @@ bool storage_impl::remove(const std::string &module_name, const std::string &set return true; } +std::list storage_impl::setting_list(const std::string &module_name) +{ + std::list l; + std::string settings_dir = parsed_data_path; + settings_dir += "/"; + settings_dir += module_name; + for(auto i = boost::filesystem::directory_iterator(settings_dir), end = boost::filesystem::directory_iterator(); i != end; ++i) + { + l.push_back(i->path().string().substr(settings_dir.length() + 1)); + } + return l; +} + storage_impl::storage_impl() { } diff --git a/server/modules/metadata/flat_files/main.h b/server/modules/metadata/flat_files/main.h index 3d228f4..df62488 100644 --- a/server/modules/metadata/flat_files/main.h +++ b/server/modules/metadata/flat_files/main.h @@ -38,6 +38,7 @@ class storage_impl: public module_metadata_storage bool set(const std::string &module_name, const std::string &setting_name, const std::vector &data); bool get(const std::string &module_name, const std::string &setting_name, std::vector &data); bool remove(const std::string &module_name, const std::string &setting_name); + std::list setting_list(const std::string &module_name); private: void on_modules_loaded(); -- cgit v1.2.3