fixed config
This commit is contained in:
parent
b03ba089f0
commit
6d48e2f400
@ -1,4 +1,42 @@
|
|||||||
#include "config_manager.h"
|
#include "config_manager.h"
|
||||||
|
#include <fstream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstring>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <iterator>
|
||||||
|
#include <glib/gstdio.h>
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
std::string escapeString(const std::string &str) {
|
||||||
|
std::string result;
|
||||||
|
for (char c : str) {
|
||||||
|
if (c == '\\' || c == ':') {
|
||||||
|
result += '\\';
|
||||||
|
}
|
||||||
|
result += c;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string unescapeString(const std::string &str) {
|
||||||
|
std::string result;
|
||||||
|
bool escaped = false;
|
||||||
|
for (char c : str) {
|
||||||
|
if (escaped) {
|
||||||
|
result += c;
|
||||||
|
escaped = false;
|
||||||
|
} else if (c == '\\') {
|
||||||
|
escaped = true;
|
||||||
|
} else {
|
||||||
|
result += c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
ConfigManager::ConfigManager() {
|
ConfigManager::ConfigManager() {
|
||||||
// Default values
|
// Default values
|
||||||
@ -30,26 +68,157 @@ ConfigManager::ConfigManager() {
|
|||||||
sensorEnabled["temp"] = false;
|
sensorEnabled["temp"] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string ConfigManager::getConfigFilePath() const {
|
||||||
|
// Use current directory as config path
|
||||||
|
return "./.temp_monitor.conf";
|
||||||
|
}
|
||||||
|
|
||||||
void ConfigManager::load() {
|
void ConfigManager::load() {
|
||||||
// TODO: Load from file
|
std::string configPath = getConfigFilePath();
|
||||||
|
|
||||||
|
std::ifstream file(configPath);
|
||||||
|
if (!file.is_open()) {
|
||||||
|
// No config file, use defaults
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string line;
|
||||||
|
while (std::getline(file, line)) {
|
||||||
|
// Skip comments and empty lines
|
||||||
|
if (line.empty() || line[0] == '#' || line[0] == ';') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse key=value
|
||||||
|
size_t eqPos = line.find('=');
|
||||||
|
if (eqPos == std::string::npos) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string key = line.substr(0, eqPos);
|
||||||
|
std::string value = line.substr(eqPos + 1);
|
||||||
|
|
||||||
|
// Trim whitespace
|
||||||
|
auto trim = [](std::string &s) {
|
||||||
|
// Trim from end
|
||||||
|
while (!s.empty() && std::isspace(s.back())) {
|
||||||
|
s.pop_back();
|
||||||
|
}
|
||||||
|
// Trim from beginning
|
||||||
|
while (!s.empty() && std::isspace(*s.begin())) {
|
||||||
|
s.erase(s.begin());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
trim(key);
|
||||||
|
trim(value);
|
||||||
|
|
||||||
|
// Unescape special characters
|
||||||
|
key = unescapeString(key);
|
||||||
|
value = unescapeString(value);
|
||||||
|
|
||||||
|
// Parse values
|
||||||
|
try {
|
||||||
|
if (key == "windowWidth") {
|
||||||
|
windowWidth = std::stoi(value);
|
||||||
|
} else if (key == "windowHeight") {
|
||||||
|
windowHeight = std::stoi(value);
|
||||||
|
} else if (key == "windowX") {
|
||||||
|
windowX = std::stoi(value);
|
||||||
|
} else if (key == "windowY") {
|
||||||
|
windowY = std::stoi(value);
|
||||||
|
} else if (key == "hasSavedWindowPosition") {
|
||||||
|
hasSavedWindowPosition = (value == "1" || value == "true");
|
||||||
|
} else if (key == "pollingTime") {
|
||||||
|
pollingTime = std::stoi(value);
|
||||||
|
} else if (key == "historyLength") {
|
||||||
|
historyLength = std::stoi(value);
|
||||||
|
} else if (key == "showPerCoreMonitoring") {
|
||||||
|
showPerCoreMonitoring = (value == "1" || value == "true");
|
||||||
|
} else if (key == "gpuMonitoring") {
|
||||||
|
sensorEnabled["gpu"] = (value == "1" || value == "true");
|
||||||
|
} else if (key == "color_") {
|
||||||
|
// Parse color_XXX
|
||||||
|
if (value.length() >= 7 && value[0] == '#') {
|
||||||
|
sensorColors[key.substr(6)] = value;
|
||||||
|
}
|
||||||
|
} else if (key.substr(0, 6) == "color_" && value.length() >= 7 && value[0] == '#') {
|
||||||
|
sensorColors[key.substr(6)] = value;
|
||||||
|
} else if (key.substr(0, 5) == "name_" && !value.empty()) {
|
||||||
|
sensorNames[key.substr(5)] = value;
|
||||||
|
} else if (key.substr(0, 8) == "enabled_" && (value == "1" || value == "0")) {
|
||||||
|
sensorEnabled[key.substr(8)] = (value == "1");
|
||||||
|
}
|
||||||
|
} catch (...) {
|
||||||
|
// Skip invalid values
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
file.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigManager::save() {
|
void ConfigManager::save() {
|
||||||
// TODO: Save to file
|
std::string configPath = getConfigFilePath();
|
||||||
|
|
||||||
|
std::cerr << "[DEBUG] Saving config to: " << configPath << std::endl;
|
||||||
|
|
||||||
|
// Create directory if it doesn't exist
|
||||||
|
std::string configDir;
|
||||||
|
size_t lastSlash = configPath.rfind('/');
|
||||||
|
if (lastSlash != std::string::npos && lastSlash > 0) {
|
||||||
|
configDir = configPath.substr(0, lastSlash);
|
||||||
|
std::cerr << "[DEBUG] Creating directory: " << configDir << std::endl;
|
||||||
|
if (g_mkdir_with_parents(configDir.c_str(), 0755) != 0) {
|
||||||
|
std::cerr << "[WARNING] Failed to create config directory: " << configDir << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ofstream file(configPath);
|
||||||
|
if (!file.is_open()) {
|
||||||
|
std::cerr << "[ERROR] Failed to open config file: " << configPath << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write settings
|
||||||
|
file << "# Temperature Monitor Configuration\n";
|
||||||
|
file << "# Generated automatically - do not edit manually\n\n";
|
||||||
|
|
||||||
|
file << "windowWidth=" << windowWidth << "\n";
|
||||||
|
file << "windowHeight=" << windowHeight << "\n";
|
||||||
|
file << "windowX=" << windowX << "\n";
|
||||||
|
file << "windowY=" << windowY << "\n";
|
||||||
|
file << "hasSavedWindowPosition=" << (hasSavedWindowPosition ? "1" : "0") << "\n";
|
||||||
|
file << "pollingTime=" << pollingTime << "\n";
|
||||||
|
file << "historyLength=" << historyLength << "\n";
|
||||||
|
file << "showPerCoreMonitoring=" << (showPerCoreMonitoring ? "1" : "0") << "\n";
|
||||||
|
file << "gpuMonitoring=" << (sensorEnabled.count("gpu") > 0 && sensorEnabled["gpu"] ? "1" : "0") << "\n";
|
||||||
|
|
||||||
|
// Write sensor colors
|
||||||
|
for (const auto &pair : sensorColors) {
|
||||||
|
file << "color_" << escapeString(pair.first) << "=" << escapeString(pair.second) << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write sensor names
|
||||||
|
for (const auto &pair : sensorNames) {
|
||||||
|
file << "name_" << escapeString(pair.first) << "=" << escapeString(pair.second) << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write sensor enabled states
|
||||||
|
for (const auto &pair : sensorEnabled) {
|
||||||
|
file << "enabled_" << escapeString(pair.first) << "=" << (pair.second ? "1" : "0") << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
file.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ConfigManager::getConfigValue(const std::string &key) const {
|
std::string ConfigManager::getConfigValue(const std::string &key) const {
|
||||||
// TODO: Implement
|
(void)key;
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ConfigManager::isGpuMonitoringEnabled() const {
|
bool ConfigManager::isGpuMonitoringEnabled() const {
|
||||||
// Check if enabled_gpu is set in sensorEnabled map
|
|
||||||
// This follows the pattern used for other sensor settings
|
|
||||||
auto it = sensorEnabled.find("gpu");
|
auto it = sensorEnabled.find("gpu");
|
||||||
if (it != sensorEnabled.end()) {
|
if (it != sensorEnabled.end()) {
|
||||||
return it->second;
|
return it->second;
|
||||||
}
|
}
|
||||||
// Default to enabled if not explicitly configured
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user