Merge pull request #14 from vinhig/main

Fixing config manager that doesn't error out on bad keyword.
This commit is contained in:
Vaxry 2022-10-27 09:48:59 +01:00 committed by GitHub
commit 6fa4ea8a68
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -2,14 +2,15 @@
#include "../Hyprpaper.hpp" #include "../Hyprpaper.hpp"
CConfigManager::CConfigManager() { CConfigManager::CConfigManager() {
// init the entire thing // Initialize the configuration
// Read file from default location
// or from an explicit location given by user
std::string configPath; std::string configPath;
if (g_pHyprpaper->m_szExplicitConfigPath.empty()) { if (g_pHyprpaper->m_szExplicitConfigPath.empty()) {
const char* const ENVHOME = getenv("HOME"); const char* const ENVHOME = getenv("HOME");
configPath = ENVHOME + (std::string) "/.config/hypr/hyprpaper.conf"; configPath = ENVHOME + std::string("/.config/hypr/hyprpaper.conf");
} } else {
else {
configPath = g_pHyprpaper->m_szExplicitConfigPath; configPath = g_pHyprpaper->m_szExplicitConfigPath;
} }
@ -17,7 +18,11 @@ CConfigManager::CConfigManager() {
ifs.open(configPath); ifs.open(configPath);
if (!ifs.good()) { if (!ifs.good()) {
Debug::log(CRIT, "Hyprpaper was not provided a config!"); if (g_pHyprpaper->m_szExplicitConfigPath.empty()) {
Debug::log(CRIT, "No config file provided. Default config file `~/.config/hypr/hyprpaper.conf` couldn't be opened.");
} else {
Debug::log(CRIT, "No config file provided. Specified file `%s` couldn't be opened.", configPath);
}
exit(1); exit(1);
} }
@ -25,7 +30,7 @@ CConfigManager::CConfigManager() {
int linenum = 1; int linenum = 1;
if (ifs.is_open()) { if (ifs.is_open()) {
while (std::getline(ifs, line)) { while (std::getline(ifs, line)) {
// Read line by line. // Read line by line
try { try {
parseLine(line); parseLine(line);
} catch (...) { } catch (...) {
@ -35,8 +40,9 @@ CConfigManager::CConfigManager() {
parseError += "Config error at line " + std::to_string(linenum) + ": Line parsing error."; parseError += "Config error at line " + std::to_string(linenum) + ": Line parsing error.";
} }
if (!parseError.empty() && parseError.find("Config error at line") != 0) { if (!parseError.empty()) {
parseError = "Config error at line " + std::to_string(linenum) + ": " + parseError; parseError = "Config error at line " + std::to_string(linenum) + ": " + parseError;
break;
} }
++linenum; ++linenum;
@ -74,7 +80,7 @@ void CConfigManager::parseLine(std::string& line) {
if (COMMENTSTART != std::string::npos) if (COMMENTSTART != std::string::npos)
line = line.substr(0, COMMENTSTART); line = line.substr(0, COMMENTSTART);
// remove shit at the beginning // Strip line
while (line[0] == ' ' || line[0] == '\t') { while (line[0] == ' ' || line[0] == '\t') {
line = line.substr(1); line = line.substr(1);
} }
@ -88,7 +94,6 @@ void CConfigManager::parseLine(std::string& line) {
const auto COMMAND = removeBeginEndSpacesTabs(line.substr(0, EQUALSPLACE)); const auto COMMAND = removeBeginEndSpacesTabs(line.substr(0, EQUALSPLACE));
const auto VALUE = removeBeginEndSpacesTabs(line.substr(EQUALSPLACE + 1)); const auto VALUE = removeBeginEndSpacesTabs(line.substr(EQUALSPLACE + 1));
//
parseKeyword(COMMAND, VALUE); parseKeyword(COMMAND, VALUE);
} }