summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorRyan Houdek <Sonicadvance1@gmail.com>2016-01-27 18:08:58 -0600
committerLéo Lam <leo@innovatetechnologi.es>2017-03-05 15:47:24 +0100
commit1eb11b55a0dfd3d28b2db29d0c341d2fa0bbda15 (patch)
tree91840f1b21876d3aa3e9cc4e4420889fa005921c /Source/Core
parent94d35ab7cb0521216348af78fff54c8e2505d0f9 (diff)
Base configuration loader
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/ConfigLoaders/BaseConfigLoader.cpp95
-rw-r--r--Source/Core/Core/ConfigLoaders/BaseConfigLoader.h17
2 files changed, 112 insertions, 0 deletions
diff --git a/Source/Core/Core/ConfigLoaders/BaseConfigLoader.cpp b/Source/Core/Core/ConfigLoaders/BaseConfigLoader.cpp
new file mode 100644
index 0000000000..c073cfcf2e
--- /dev/null
+++ b/Source/Core/Core/ConfigLoaders/BaseConfigLoader.cpp
@@ -0,0 +1,95 @@
+// Copyright 2016 Dolphin Emulator Project
+// Licensed under GPLv2+
+// Refer to the license.txt file included.
+
+#include <cstring>
+#include <list>
+#include <map>
+#include <string>
+
+#include "Common/CommonPaths.h"
+#include "Common/CommonTypes.h"
+#include "Common/Config/Config.h"
+#include "Common/FileUtil.h"
+#include "Common/IniFile.h"
+#include "Common/Logging/Log.h"
+
+#include "Core/ConfigLoaders/BaseConfigLoader.h"
+
+namespace ConfigLoaders
+{
+const std::map<Config::System, int> system_to_ini = {
+ {Config::System::Main, F_DOLPHINCONFIG_IDX},
+ {Config::System::GCPad, F_GCPADCONFIG_IDX},
+ {Config::System::WiiPad, F_WIIPADCONFIG_IDX},
+ {Config::System::GCKeyboard, F_GCKEYBOARDCONFIG_IDX},
+ {Config::System::GFX, F_GFXCONFIG_IDX},
+ {Config::System::Logger, F_LOGGERCONFIG_IDX},
+ {Config::System::Debugger, F_DEBUGGERCONFIG_IDX},
+ {Config::System::UI, F_UICONFIG_IDX},
+};
+
+// INI layer configuration loader
+class INIBaseConfigLayerLoader final : public Config::ConfigLayerLoader
+{
+public:
+ INIBaseConfigLayerLoader() : ConfigLayerLoader(Config::LayerType::Base) {}
+ void Load(Config::Layer* config_layer) override
+ {
+ for (const auto& system : system_to_ini)
+ {
+ IniFile ini;
+ ini.Load(File::GetUserPath(system.second));
+ const std::list<IniFile::Section>& system_sections = ini.GetSections();
+
+ for (const auto& section : system_sections)
+ {
+ const std::string section_name = section.GetName();
+ Config::Section* config_section =
+ config_layer->GetOrCreateSection(system.first, section_name);
+ const IniFile::Section::SectionMap& section_map = section.GetValues();
+
+ for (const auto& value : section_map)
+ config_section->Set(value.first, value.second);
+ }
+ }
+ }
+
+ void Save(Config::Layer* config_layer) override
+ {
+ const Config::LayerMap& sections = config_layer->GetLayerMap();
+ for (const auto& system : sections)
+ {
+ auto mapping = system_to_ini.find(system.first);
+ if (mapping == system_to_ini.end())
+ {
+ ERROR_LOG(COMMON, "Config can't map system '%s' to an INI file!",
+ Config::GetSystemName(system.first).c_str());
+ continue;
+ }
+
+ IniFile ini;
+ ini.Load(File::GetUserPath(mapping->second));
+
+ for (const auto& section : system.second)
+ {
+ const std::string section_name = section.GetName();
+ const Config::SectionValueMap& section_values = section.GetValues();
+
+ IniFile::Section* ini_section = ini.GetOrCreateSection(section_name);
+
+ for (const auto& value : section_values)
+ ini_section->Set(value.first, value.second);
+ }
+
+ ini.Save(File::GetUserPath(mapping->second));
+ }
+ }
+};
+
+// Loader generation
+std::unique_ptr<Config::ConfigLayerLoader> GenerateBaseConfigLoader()
+{
+ return std::make_unique<INIBaseConfigLayerLoader>();
+}
+}
diff --git a/Source/Core/Core/ConfigLoaders/BaseConfigLoader.h b/Source/Core/Core/ConfigLoaders/BaseConfigLoader.h
new file mode 100644
index 0000000000..4356c5ad47
--- /dev/null
+++ b/Source/Core/Core/ConfigLoaders/BaseConfigLoader.h
@@ -0,0 +1,17 @@
+// Copyright 2016 Dolphin Emulator Project
+// Licensed under GPLv2+
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <memory>
+
+namespace Config
+{
+class ConfigLayerLoader;
+}
+
+namespace ConfigLoaders
+{
+std::unique_ptr<Config::ConfigLayerLoader> GenerateBaseConfigLoader();
+}