Files
comaps/editor/config_loader.cpp
Konstantin Pastbin e3e4a1985a Organic Maps sources as of 02.04.2025 (fad26bbf22ac3da75e01e62aa01e5c8e11861005)
To expand with full Organic Maps and Maps.ME commits history run:
  git remote add om-historic [om-historic.git repo url]
  git fetch --tags om-historic
  git replace squashed-history historic-commits
2025-05-08 21:10:51 +07:00

82 lines
1.5 KiB
C++

#include "editor/config_loader.hpp"
#include "editor/editor_config.hpp"
#include "platform/platform.hpp"
#include "coding/internal/file_data.hpp"
#include "coding/reader.hpp"
#include <stdexcept>
#include <pugixml.hpp>
namespace editor
{
using std::string;
namespace
{
constexpr char kConfigFileName[] = "editor.config";
} // namespace
void Waiter::Interrupt()
{
{
std::lock_guard lock(m_mutex);
m_interrupted = true;
}
m_event.notify_all();
}
ConfigLoader::ConfigLoader(base::AtomicSharedPtr<EditorConfig> & config) : m_config(config)
{
pugi::xml_document doc;
LoadFromLocal(doc);
ResetConfig(doc);
}
ConfigLoader::~ConfigLoader()
{
m_waiter.Interrupt();
}
void ConfigLoader::ResetConfig(pugi::xml_document const & doc)
{
auto config = std::make_shared<EditorConfig>();
config->SetConfig(doc);
m_config.Set(config);
}
// static
void ConfigLoader::LoadFromLocal(pugi::xml_document & doc)
{
string content;
std::unique_ptr<ModelReader> reader;
try
{
// Get config file from WritableDir first.
reader = GetPlatform().GetReader(kConfigFileName, "wr");
}
catch (RootException const & ex)
{
LOG(LERROR, (ex.Msg()));
return;
}
if (reader)
reader->ReadAsString(content);
auto const result = doc.load_buffer(content.data(), content.size());
if (!result)
{
LOG(LERROR, (kConfigFileName, "can not be loaded:", result.description(), "error offset:", result.offset));
doc.reset();
}
}
} // namespace editor