summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client-qt/udm-client-qt/client_session.cpp1
-rw-r--r--server/include/api_core.h1
-rw-r--r--server/include/api_module_metadata_storage.h1
-rw-r--r--server/modules/downloaders/curl/curl.project15
-rw-r--r--server/modules/downloaders/curl/main.cpp84
-rw-r--r--server/modules/metadata/flat_files/main.cpp13
-rw-r--r--server/modules/metadata/flat_files/main.h1
-rw-r--r--server/src/api_core.cpp5
-rw-r--r--udm.workspace2
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">