entmemberfunktioned

This commit is contained in:
blastmaster 2014-05-02 00:27:37 +02:00
parent 1ab8812486
commit b181c1906b
5 changed files with 137 additions and 135 deletions

View File

@ -19,7 +19,7 @@ class DynamicObjects
private: private:
std::string _cleanpath (const char * const path); std::string _cleanpath (const char * const path);
std::vector<Sicccobject> m_themap; std::vector<Sicccobject> m_thevec;
const Routerin * m_merouterin; const Routerin * m_merouterin;
}; };

View File

@ -8,7 +8,7 @@ std::string DynamicObjects::render_object_list(){
<ul id="down"> <ul id="down">
)FOO"; )FOO";
for (auto& it : this->m_themap){ for (auto& it : this->m_thevec){
output += u8"<li>\n"; output += u8"<li>\n";
output += u8"<a href=\"" + m_merouterin->get_baseurl() + it.get_path() + u8"\">"; //we could include baseurl here? output += u8"<a href=\"" + m_merouterin->get_baseurl() + it.get_path() + u8"\">"; //we could include baseurl here?
output += it.get_filename(); output += it.get_filename();
@ -30,8 +30,7 @@ std::string DynamicObjects::render_object_list(){
DynamicObjects::DynamicObjects(Routerin * merouterin) : DynamicObjects::DynamicObjects(Routerin * merouterin) :
m_merouterin(merouterin) m_merouterin(merouterin)
{ {
m_thevec = SicccPersister::read_sicccdir(*merouterin);
} }

View File

@ -11,8 +11,12 @@
#include <iostream> #include <iostream>
#include <vector> #include <vector>
static json_t * load_json(const std::string &s) class SicccPersister
{ {
public:
static json_t * load_json(const std::string &s)
{
assert(!s.empty()); assert(!s.empty());
std::cout << "[DEBUG] joad_json: " << s << std::endl; std::cout << "[DEBUG] joad_json: " << s << std::endl;
json_t *root = nullptr; json_t *root = nullptr;
@ -23,60 +27,60 @@ static json_t * load_json(const std::string &s)
return nullptr; return nullptr;
} }
return root; return root;
} }
static std::string get_string_from_json(const json_t *j) static std::string get_string_from_json(const json_t *j)
{ {
assert(j); assert(j);
assert(json_is_string(j)); assert(json_is_string(j));
const char *tmp = json_string_value(j); const char *tmp = json_string_value(j);
assert(tmp); assert(tmp);
return std::string(tmp); return std::string(tmp);
} }
static json_t *get_json_from_string(const std::string &s) static json_t *get_json_from_string(const std::string &s)
{ {
json_t* ret = json_string(s.c_str()); json_t* ret = json_string(s.c_str());
assert(ret); assert(ret);
return ret; return ret;
} }
static unsigned int get_integer_from_json(const json_t *j) static unsigned int get_integer_from_json(const json_t *j)
{ {
assert(j); assert(j);
assert(json_is_integer(j)); assert(json_is_integer(j));
return json_integer_value(j); return json_integer_value(j);
} }
static json_t *get_json_from_integer(const unsigned int value) static json_t *get_json_from_integer(const unsigned int value)
{ {
assert(value); assert(value);
json_t* ret = json_integer(value); json_t* ret = json_integer(value);
assert(ret); assert(ret);
return ret; return ret;
} }
static std::chrono::time_point<std::chrono::system_clock> static std::chrono::time_point<std::chrono::system_clock>
get_time_from_json(const json_t *j) get_time_from_json(const json_t *j)
{ {
assert(j); assert(j);
auto tmp = get_string_from_json(j); auto tmp = get_string_from_json(j);
time_t t = stol(tmp); time_t t = stol(tmp);
return std::chrono::system_clock::from_time_t(t); return std::chrono::system_clock::from_time_t(t);
} }
static std::string time_to_string(const std::chrono::time_point<std::chrono::system_clock>& t) static std::string time_to_string(const std::chrono::time_point<std::chrono::system_clock>& t)
{ {
time_t time = std::chrono::system_clock::to_time_t(t); time_t time = std::chrono::system_clock::to_time_t(t);
std::string ret = std::to_string(time); std::string ret = std::to_string(time);
return ret; return ret;
} }
/** TODO /** TODO
* implement bool operator to take advantages of the use of assert * implement bool operator to take advantages of the use of assert
*/ */
static json_t *get_json_from_sicccobject(const Sicccobject& so) static json_t *get_json_from_sicccobject(const Sicccobject& so)
{ {
json_t *root = json_object(); json_t *root = json_object();
json_object_set_new(root, "filename", get_json_from_string(so.get_filename())); json_object_set_new(root, "filename", get_json_from_string(so.get_filename()));
json_object_set_new(root, "filetype", get_json_from_string(so.get_filetype())); json_object_set_new(root, "filetype", get_json_from_string(so.get_filetype()));
@ -86,10 +90,10 @@ static json_t *get_json_from_sicccobject(const Sicccobject& so)
json_object_set_new(root, "upload_time", get_json_from_string(tmp)); json_object_set_new(root, "upload_time", get_json_from_string(tmp));
assert(root); assert(root);
return root; return root;
} }
static std::string get_json_string_representation(const json_t *j) static std::string get_json_string_representation(const json_t *j)
{ {
assert(j); assert(j);
assert(json_is_object(j)); assert(json_is_object(j));
const char *tmp = json_dumps(j, JSON_INDENT(4)); const char *tmp = json_dumps(j, JSON_INDENT(4));
@ -97,10 +101,30 @@ static std::string get_json_string_representation(const json_t *j)
std::string ret(tmp); std::string ret(tmp);
free((void*) tmp); free((void*) tmp);
return ret; return ret;
} }
static std::vector<Sicccobject>
read_sicccdir(const Routerin &merouter = *Routerin::get_instance())
{
DIR *dir = nullptr;
struct dirent *entry = nullptr;
std::vector<Sicccobject> v;
json_error_t *error = nullptr;
if ((dir = opendir(merouter.get_persist_path().c_str())) == NULL) {
std::cerr << "Error could not open directory" << std::endl;
return v; // should throw exception instea1d
}
while ((entry = readdir(dir)) != NULL) {
if (std::strstr(entry->d_name, ".json") == NULL)
continue;
json_t *tmp = json_load_file(entry->d_name, JSON_DECODE_ANY, error);
assert(tmp);
Sicccobject so(tmp);
v.push_back(so);
}
return v;
}
class SicccPersister
{
public: public:
SicccPersister(const Routerin & merouter = *Routerin::get_instance()) : SicccPersister(const Routerin & merouter = *Routerin::get_instance()) :
merouter(merouter) merouter(merouter)
@ -131,7 +155,7 @@ class SicccPersister
int write_sicccfile(const Sicccobject&); int write_sicccfile(const Sicccobject&);
int write_sicccfile(); int write_sicccfile();
std::vector<Sicccobject> read_sicccdir(); /* std::vector<Sicccobject> read_sicccdir(); */
Sicccobject read_json(const std::string&); Sicccobject read_json(const std::string&);
Sicccobject read_json() { return read_json(json_file_name); } Sicccobject read_json() { return read_json(json_file_name); }

View File

@ -30,24 +30,3 @@ SicccPersister::read_json(const std::string &s)
return Sicccobject(root); return Sicccobject(root);
} }
std::vector<Sicccobject>
SicccPersister::read_sicccdir()
{
DIR *dir = nullptr;
struct dirent *entry = nullptr;
std::vector<Sicccobject> v;
json_error_t *error = nullptr;
if ((dir = opendir(merouter.get_persist_path().c_str())) == NULL) {
std::cerr << "Error could not open directory" << std::endl;
return v; // should throw exception instea1d
}
while ((entry = readdir(dir)) != NULL) {
if (std::strstr(entry->d_name, ".json") == NULL)
continue;
json_t *tmp = json_load_file(entry->d_name, JSON_DECODE_ANY, error);
assert(tmp);
Sicccobject so(tmp);
v.push_back(so);
}
return v;
}

View File

@ -9,15 +9,15 @@ Sicccobject::Sicccobject(const json_t *j)
assert(j); assert(j);
json_t *val; json_t *val;
val = json_object_get(j, "filename"); val = json_object_get(j, "filename");
filename = get_string_from_json(val); filename = SicccPersister::get_string_from_json(val);
val = json_object_get(j, "filetype"); val = json_object_get(j, "filetype");
filetype = get_string_from_json(val); filetype = SicccPersister::get_string_from_json(val);
val = json_object_get(j, "path"); val = json_object_get(j, "path");
path = get_string_from_json(val); path = SicccPersister::get_string_from_json(val);
val = json_object_get(j, "size"); val = json_object_get(j, "size");
size = get_integer_from_json(val); size = SicccPersister::get_integer_from_json(val);
val = json_object_get(j, "upload_time"); val = json_object_get(j, "upload_time");
upload_date = get_time_from_json(val); upload_date = SicccPersister::get_time_from_json(val);
json_decref(val); json_decref(val);
} }