Allow environment in config

This commit is contained in:
vaxerski 2023-03-05 14:54:26 +00:00
parent de5f1b2a83
commit b03c8970e6
2 changed files with 27 additions and 0 deletions

View file

@ -31,6 +31,18 @@ CConfigManager::CConfigManager() {
Debug::disableLogs = &configValues["debug:disable_logs"].intValue; Debug::disableLogs = &configValues["debug:disable_logs"].intValue;
Debug::disableTime = &configValues["debug:disable_time"].intValue; Debug::disableTime = &configValues["debug:disable_time"].intValue;
populateEnvironment();
}
void CConfigManager::populateEnvironment() {
environmentVariables.clear();
for (char** env = environ; *env; ++env) {
const std::string ENVVAR = *env;
const auto VARIABLE = ENVVAR.substr(0, ENVVAR.find_first_of('='));
const auto VALUE = ENVVAR.substr(ENVVAR.find_first_of('=') + 1);
environmentVariables[VARIABLE] = VALUE;
}
} }
void CConfigManager::setDefaultVars() { void CConfigManager::setDefaultVars() {
@ -1140,13 +1152,25 @@ void CConfigManager::applyUserDefinedVars(std::string& line, const size_t equals
while (dollarPlace != std::string::npos) { while (dollarPlace != std::string::npos) {
const auto STRAFTERDOLLAR = line.substr(dollarPlace + 1); const auto STRAFTERDOLLAR = line.substr(dollarPlace + 1);
bool found = false;
for (auto& [var, value] : configDynamicVars) { for (auto& [var, value] : configDynamicVars) {
if (STRAFTERDOLLAR.find(var) == 0) { if (STRAFTERDOLLAR.find(var) == 0) {
line.replace(dollarPlace, var.length() + 1, value); line.replace(dollarPlace, var.length() + 1, value);
found = true;
break; break;
} }
} }
if (!found) {
// maybe env?
for (auto& [var, value] : environmentVariables) {
if (STRAFTERDOLLAR.find(var) == 0) {
line.replace(dollarPlace, var.length() + 1, value);
break;
}
}
}
dollarPlace = line.find_first_of('$', dollarPlace + 1); dollarPlace = line.find_first_of('$', dollarPlace + 1);
} }
} }

View file

@ -215,10 +215,13 @@ class CConfigManager {
bool firstExecDispatched = false; bool firstExecDispatched = false;
std::deque<std::string> firstExecRequests; std::deque<std::string> firstExecRequests;
std::unordered_map<std::string, std::string> environmentVariables;
// internal methods // internal methods
void setDefaultVars(); void setDefaultVars();
void setDefaultAnimationVars(); void setDefaultAnimationVars();
void setDeviceDefaultVars(const std::string&); void setDeviceDefaultVars(const std::string&);
void populateEnvironment();
void setAnimForChildren(SAnimationPropertyConfig* const); void setAnimForChildren(SAnimationPropertyConfig* const);
void updateBlurredLS(const std::string&, const bool); void updateBlurredLS(const std::string&, const bool);