6 // http://open-source-parsers.github.io/jsoncpp-docs/doxygen/namespacemembers.html
12 Config* Config::instance = NULL;
26 Config* Config::getInstance()
31 void Config::applyDefaults()
33 // Insert the value only if it doesn't already exist
34 auto insertBool = [&] (const char* s, const char* k, bool v) { if (jconfig[s][k].isNull()) jconfig[s][k] = v; };
35 auto insertString = [&] (const char* s, const char* k, const char* v) { if (jconfig[s][k].isNull()) jconfig[s][k] = v; };
36 auto insertInt = [&] (const char* s, const char* k, int v) { if (jconfig[s][k].isNull()) jconfig[s][k] = v; };
38 insertBool("main", "daemonize", true);
39 insertInt("main", "start_to_live_tv", 0);
41 insertBool("log", "enabled", false);
42 insertString("log", "filename", "stdout");
43 insertString("log", "level", "debug");
45 #ifdef VOMP_PLATFORM_RASPBERRY
46 insertBool("input", "mod_cec_enabled", true);
48 insertBool("input", "mod_cec_enabled", false);
51 insertBool("input", "mod_udp_enabled", true);
52 insertBool("input", "mod_lirc_enabled", false);
54 insertInt("input_udp", "port", 2000);
56 insertInt("server-discovery", "prefer-ipv", 6);
58 insertBool("videoomx", "disable-hdmi-modechange", false);
60 // Not in config.json.sample - VDR login always sets this
61 insertInt("subtitles", "default", 0);
64 bool Config::loadFile()
68 std::ifstream configFile("config.json");
69 if (configFile.is_open())
71 Json::CharReaderBuilder builder;
72 builder["collectComments"] = false;
73 builder["allowTrailingCommas"] = true; // FIXME
76 bool ok = Json::parseFromStream(builder, configFile, &jconfig, &errs);
79 std::cout << errs << std::endl;
88 bool Config::getString(const std::string& section, const std::string& key, std::string& out) const
90 Json::Value v = jconfigro[section][key];
91 if (!v.isString()) return false;
96 bool Config::getInt(const std::string& section, const std::string& key, int& out) const
98 Json::Value v = jconfigro[section][key];
99 if (!v.isInt64()) return false;
100 out = toi4(v.asInt64());
104 bool Config::getBool(const std::string& section, const std::string& key, bool& out) const
106 Json::Value v = jconfigro[section][key];
107 if (!v.isBool()) return false;
112 bool Config::getBool(const char* section, const char* key, bool& out) const
114 Json::Value v = jconfigro[section][key];
115 if (!v.isBool()) return false;
120 void Config::dump() const
122 std::cout << jconfigro << std::endl;
125 bool Config::foreachInArray(const std::string& section, const std::string& key, std::function<void(const std::string&)> callback) const
127 const Json::Value& v = jconfigro[section][key];
128 if (!v.isArray()) return false;
130 for(Json::Value::const_iterator i = v.begin(); i != v.end(); i++)
132 const Json::Value& jv = *i;
134 callback(jv.asString());
140 bool Config::foreachPairInObject(const std::string& section, const std::string& key, std::function<void(const std::string&, const std::string&)> callback) const
142 const Json::Value& v = jconfigro[section][key];
143 if (!v.isObject()) return false;
145 for(Json::Value::const_iterator i = v.begin(); i != v.end(); i++)
147 const Json::Value& jv = *i;
149 callback(i.key().asString(), jv.asString());
155 void Config::set(const std::string& section, const std::string& key, const std::string& value)
157 jconfig[section][key] = value;
160 void Config::set(const std::string& section, const std::string& key, bool value)
162 jconfig[section][key] = value;
165 void Config::set(const std::string& section, const std::string& key, const char* value)
167 jconfig[section][key] = value;
170 void Config::set(const std::string& section, const std::string& key, int value)
172 jconfig[section][key] = value;