diff options
-rw-r--r-- | client-qt/udm-client-qt/client_session.cpp | 1 | ||||
-rw-r--r-- | server/include/api_core.h | 1 | ||||
-rw-r--r-- | server/include/api_module_metadata_storage.h | 1 | ||||
-rw-r--r-- | server/modules/downloaders/curl/curl.project | 15 | ||||
-rw-r--r-- | server/modules/downloaders/curl/main.cpp | 84 | ||||
-rw-r--r-- | server/modules/metadata/flat_files/main.cpp | 13 | ||||
-rw-r--r-- | server/modules/metadata/flat_files/main.h | 1 | ||||
-rw-r--r-- | server/src/api_core.cpp | 5 | ||||
-rw-r--r-- | udm.workspace | 2 |
9 files changed, 81 insertions, 42 deletions
diff --git a/client-qt/udm-client-qt/client_session.cpp b/client-qt/udm-client-qt/client_session.cpp index 00e869a..6bad75c 100644 --- a/client-qt/udm-client-qt/client_session.cpp +++ b/client-qt/udm-client-qt/client_session.cpp @@ -144,6 +144,7 @@ client_session::client_session(QObject *parent, boost::asio::io_service *io_serv void client_session::client_connect(QString host, QString password, int port) { //TODO: settings for connection timeout + //TODO: reuse existing auth token this->pasword = password; if(!password.isEmpty()) { diff --git a/server/include/api_core.h b/server/include/api_core.h index 9af26f7..adf0a70 100644 --- a/server/include/api_core.h +++ b/server/include/api_core.h @@ -40,6 +40,7 @@ class core_api virtual bool metadata_set(module_base *m, const std::string &setting_name, const std::vector<char> &data); virtual bool metadata_get(module_base *m, const std::string &setting_name, std::vector<char> &data); virtual bool metadata_remove(module_base *m, const std::string &setting_name); + virtual std::list<std::string> metadata_setting_list(module_base *m); }; diff --git a/server/include/api_module_metadata_storage.h b/server/include/api_module_metadata_storage.h index 329a3cf..adaa614 100644 --- a/server/include/api_module_metadata_storage.h +++ b/server/include/api_module_metadata_storage.h @@ -29,6 +29,7 @@ class module_metadata_storage : public module_base virtual bool set(const std::string &module_name, const std::string &setting_name, const std::vector<char> &data) = 0; virtual bool get(const std::string &module_name, const std::string &setting_name, std::vector<char> &data) = 0; virtual bool remove(const std::string &module_name, const std::string &setting_name) = 0; + virtual std::list<std::string> setting_list(const std::string &module_name) = 0; }; 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 @@ <?xml version="1.0" encoding="UTF-8"?> <CodeLite_Project Name="curl"> <Plugins> + <Plugin Name="qmake"> + <![CDATA[00010001N0005Debug000000000000]]> + </Plugin> <Plugin Name="CMakePlugin"> <![CDATA[[{ "name": "Debug", @@ -11,11 +14,17 @@ "buildType": "", "arguments": [], "parentProject": "" + }, { + "name": "Release", + "enabled": false, + "buildDirectory": "build", + "sourceDirectory": "$(ProjectPath)", + "generator": "", + "buildType": "", + "arguments": [], + "parentProject": "" }]]]> </Plugin> - <Plugin Name="qmake"> - <![CDATA[00010001N0005Debug000000000000]]> - </Plugin> </Plugins> <Description/> <Dependencies/> 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) 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<std::string> storage_impl::setting_list(const std::string &module_name) +{ + std::list<std::string> 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<char> &data); bool get(const std::string &module_name, const std::string &setting_name, std::vector<char> &data); bool remove(const std::string &module_name, const std::string &setting_name); + std::list<std::string> setting_list(const std::string &module_name); private: void on_modules_loaded(); diff --git a/server/src/api_core.cpp b/server/src/api_core.cpp index edc0e0a..aa5b58c 100644 --- a/server/src/api_core.cpp +++ b/server/src/api_core.cpp @@ -42,6 +42,11 @@ bool core_api::metadata_remove(module_base *m, const std::string &setting_name) { return runtime_config.default_metadata_storage->remove(m->get_module_info().name, setting_name); } +std::list<std::string> core_api::metadata_setting_list(module_base *m) +{ + return runtime_config.default_metadata_storage->setting_list(m->get_module_info().name); +} + std::map<std::string, setting_s> core_api::get_module_settings(module_base *m) { diff --git a/udm.workspace b/udm.workspace index 7801efc..f4ab096 100644 --- a/udm.workspace +++ b/udm.workspace @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <CodeLite_Workspace Name="udm" Database="/home/sss/install/git/misc/.codelite/udm.tags"> <Project Name="udm-server" Path="server/udm-server.project" Active="Yes"/> - <Project Name="module_metadata_flat_files" Path="server/modules/metadata/flat_files/module_metadata_flat_files.project"/> + <Project Name="module_metadata_flat_files" Path="server/modules/metadata/flat_files/module_metadata_flat_files.project" Active="No"/> <Project Name="curl" Path="server/modules/downloaders/curl/curl.project" Active="No"/> <BuildMatrix> <WorkspaceConfiguration Name="Debug" Selected="yes"> |