mirror of
https://github.com/hyprwm/hyprpaper.git
synced 2024-11-16 22:25:59 +01:00
Fixing config manager that doesn't error out on bad keyword.
This commit is contained in:
parent
8f4c712950
commit
e5f9c7e622
1 changed files with 21 additions and 20 deletions
|
@ -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,18 +30,15 @@ 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 {
|
// The cause of the error is
|
||||||
|
// written in this->parseError
|
||||||
parseLine(line);
|
parseLine(line);
|
||||||
} catch (...) {
|
|
||||||
Debug::log(ERR, "Error reading line from config. Line:");
|
|
||||||
Debug::log(NONE, "%s", line.c_str());
|
|
||||||
|
|
||||||
parseError += "Config error at line " + std::to_string(linenum) + ": Line parsing error.";
|
if (!parseError.empty()) {
|
||||||
}
|
// If an error there is, user may want the precise line where it occured
|
||||||
|
|
||||||
if (!parseError.empty() && parseError.find("Config error at line") != 0) {
|
|
||||||
parseError = "Config error at line " + std::to_string(linenum) + ": " + parseError;
|
parseError = "Config error at line " + std::to_string(linenum) + ": " + parseError;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
++linenum;
|
++linenum;
|
||||||
|
@ -65,16 +67,16 @@ std::string CConfigManager::removeBeginEndSpacesTabs(std::string str) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConfigManager::parseLine(std::string& line) {
|
void CConfigManager::parseLine(std::string& line) {
|
||||||
// first check if its not a comment
|
// First check if it's not a comment
|
||||||
const auto COMMENTSTART = line.find_first_of('#');
|
const auto COMMENTSTART = line.find_first_of('#');
|
||||||
if (COMMENTSTART == 0)
|
if (COMMENTSTART == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// now, cut the comment off
|
// Remove comment from string
|
||||||
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 +90,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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue