ewol/ewol/resource/ConfigFile.cpp

91 lines
2.2 KiB
C++

/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#include <etk/os/FSNode.hpp>
#include <ewol/debug.hpp>
#include <ewol/resource/ConfigFile.hpp>
#include <gale/resource/Manager.hpp>
#include <ejson/ejson.hpp>
#include <ejson/Number.hpp>
#include <ejson/String.hpp>
ewol::resource::ConfigFile::ConfigFile() :
gale::Resource(),
// set map unorderred
m_list(0, false) {
addResourceType("ewol::ConfigFile");
}
void ewol::resource::ConfigFile::init(const etk::String& _filename) {
ethread::RecursiveLock lock(m_mutex);
gale::Resource::init(_filename);
EWOL_DEBUG("SFP : load \"" << _filename << "\"");
reload();
}
ewol::resource::ConfigFile::~ConfigFile() {
m_list.clear();
}
void ewol::resource::ConfigFile::reload() {
ethread::RecursiveLock lock(m_mutex);
// reset all parameters
for (int32_t iii=0; iii<m_list.size(); iii++){
if (m_list.getValue(iii).exist() == true) {
m_list.getValue(iii) = ejson::empty();
}
}
m_doc.load(m_name);
for (auto elementName : m_list.getKeys()) {
if (m_doc[elementName].exist() == true) {
m_list[elementName] = m_doc[elementName];
}
}
}
int32_t ewol::resource::ConfigFile::request(const etk::String& _paramName) {
ethread::RecursiveLock lock(m_mutex);
// check if the parameters existed :
if (m_list.exist(_paramName) == false) {
m_list.add(_paramName, ejson::empty());
}
if (m_doc[_paramName].exist() == true) {
m_list[_paramName] = m_doc[_paramName];
}
return m_list.getId(_paramName);
}
double ewol::resource::ConfigFile::getNumber(int32_t _id) {
ethread::RecursiveLock lock(m_mutex);
if ( _id < 0
|| m_list.getValue(_id).exist() == false) {
return 0.0;
}
return m_list.getValue(_id).toNumber().get();
}
etk::String ewol::resource::ConfigFile::getString(int32_t _id) {
ethread::RecursiveLock lock(m_mutex);
if ( _id < 0
|| m_list.getValue(_id).exist() == false) {
return "";
}
return m_list.getValue(_id).toString().get();
}
bool ewol::resource::ConfigFile::getBoolean(int32_t _id) {
ethread::RecursiveLock lock(m_mutex);
if ( _id < 0
|| m_list.getValue(_id).exist() == false) {
return false;
}
return m_list.getValue(_id).toBoolean().get();
}