Older/Settings.cpp
2025-03-01 14:51:27 +00:00

71 lines
1.9 KiB
C++

#include "Settings.h"
#include "Core/Logger.h"
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <filesystem>
#include <thread>
constexpr auto SettingsFilePath = "settings.xml";
namespace Older {
Settings::Settings() {
if (!std::filesystem::exists(SettingsFilePath)) {
save();
}
load();
}
void Settings::save() {
using namespace boost::property_tree;
ptree ptree;
ptree.put("Application.Threads", std::thread::hardware_concurrency());
ptree.put("Application.SqlitePath", m_sqlitePath);
ptree.put("Application.HttpServer.Address", m_server);
ptree.put("Application.HttpServer.DocumentRoot", m_documentRoot);
ptree.put("Application.HttpServer.DocumentRoot.<xmlcomment>", "静态网页文件存放位置,为空时网站统计将不判断页面页面是否存在");
xml_writer_settings<std::string> settings('\t', 1);
write_xml(SettingsFilePath, ptree, std::locale(), settings);
}
void Settings::load() {
using namespace boost::property_tree;
ptree ptree;
try {
read_xml(SettingsFilePath, ptree);
m_sqlitePath = ptree.get<std::string>("Application.SqlitePath");
m_threads = ptree.get<uint32_t>("Application.Threads");
m_server = ptree.get<std::string>("Application.HttpServer.Address");
m_documentRoot = ptree.get<std::string>("Application.HttpServer.DocumentRoot");
} catch (const xml_parser_error &error) {
LOG(error) << "parse " << SettingsFilePath << " failed: " << error.message();
}
}
uint32_t Settings::threads() const {
return m_threads;
}
std::string Settings::server() const {
return m_server;
}
uint16_t Settings::port() const {
return m_port;
}
std::string Settings::documentRoot() const {
return m_documentRoot;
}
std::string Settings::live2dModelsRoot() const {
return m_live2dModelsRoot;
}
std::string Settings::sqlitePath() const {
return m_sqlitePath;
}
} // namespace Older