summaryrefslogtreecommitdiff
path: root/server/modules
diff options
context:
space:
mode:
Diffstat (limited to 'server/modules')
-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
4 files changed, 72 insertions, 41 deletions
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();