@@ -127,11 +127,11 @@ std::vector<GeckoCode> DownloadCodes(std::string gametdb_id, bool* succeeded, bo
return gcodes;
}

std::vector<GeckoCode> LoadCodes(const IniFile& globalIni, const IniFile& localIni)
std::vector<GeckoCode> LoadCodes(const Common::IniFile& globalIni, const Common::IniFile& localIni)
{
std::vector<GeckoCode> gcodes;

for (const IniFile* ini : {&globalIni, &localIni})
for (const auto* ini : {&globalIni, &localIni})
{
std::vector<std::string> lines;
ini->GetLines("Gecko", &lines, false);
@@ -239,7 +239,7 @@ static void SaveGeckoCode(std::vector<std::string>& lines, const GeckoCode& gcod
lines.push_back('*' + note);
}

void SaveCodes(IniFile& inifile, const std::vector<GeckoCode>& gcodes)
void SaveCodes(Common::IniFile& inifile, const std::vector<GeckoCode>& gcodes)
{
std::vector<std::string> lines;
std::vector<std::string> enabled_lines;
@@ -9,14 +9,17 @@

#include "Core/GeckoCode.h"

namespace Common
{
class IniFile;
}

namespace Gecko
{
std::vector<GeckoCode> LoadCodes(const IniFile& globalIni, const IniFile& localIni);
std::vector<GeckoCode> LoadCodes(const Common::IniFile& globalIni, const Common::IniFile& localIni);
std::vector<GeckoCode> DownloadCodes(std::string gametdb_id, bool* succeeded,
bool use_https = true);
void SaveCodes(IniFile& inifile, const std::vector<GeckoCode>& gcodes);
void SaveCodes(Common::IniFile& inifile, const std::vector<GeckoCode>& gcodes);

std::optional<GeckoCode::Code> DeserializeLine(const std::string& line);
} // namespace Gecko
@@ -251,7 +251,7 @@ bool IsPressed(int id, bool held)
// TODO: Remove this at a future date when we're confident most configs are migrated.
static void LoadLegacyConfig(ControllerEmu::EmulatedController* controller)
{
IniFile inifile;
Common::IniFile inifile;
if (inifile.Load(File::GetUserPath(D_CONFIG_IDX) + "Hotkeys.ini"))
{
if (!inifile.Exists("Hotkeys") && inifile.Exists("Hotkeys1"))
@@ -191,7 +191,7 @@ USB_KBD::USB_KBD(Kernel& ios, const std::string& device_name) : Device(ios, devi
std::optional<IPCReply> USB_KBD::Open(const OpenRequest& request)
{
INFO_LOG_FMT(IOS, "USB_KBD: Open");
IniFile ini;
Common::IniFile ini;
ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX));
ini.GetOrCreateSection("USB Keyboard")->Get("Layout", &m_keyboard_layout, KBD_LAYOUT_QWERTY);

@@ -2027,10 +2027,10 @@ bool NetPlayServer::SyncCodes()
// Find all INI files
const auto game_id = game->GetGameID();
const auto revision = game->GetRevision();
IniFile globalIni;
Common::IniFile globalIni;
for (const std::string& filename : ConfigLoaders::GetGameIniFilenames(game_id, revision))
globalIni.Load(File::GetSysDirectory() + GAMESETTINGS_DIR DIR_SEP + filename, true);
IniFile localIni;
Common::IniFile localIni;
for (const std::string& filename : ConfigLoaders::GetGameIniFilenames(game_id, revision))
localIni.Load(File::GetUserPath(D_GAMESETTINGS_IDX) + filename, true);

@@ -101,11 +101,9 @@ std::string SerializeLine(const PatchEntry& entry)
}

void LoadPatchSection(const std::string& section, std::vector<Patch>* patches,
const IniFile& globalIni, const IniFile& localIni)
const Common::IniFile& globalIni, const Common::IniFile& localIni)
{
const IniFile* inis[2] = {&globalIni, &localIni};

for (const IniFile* ini : inis)
for (const auto* ini : {&globalIni, &localIni})
{
std::vector<std::string> lines;
Patch currentPatch;
@@ -151,7 +149,7 @@ void LoadPatchSection(const std::string& section, std::vector<Patch>* patches,
}
}

void SavePatchSection(IniFile* local_ini, const std::vector<Patch>& patches)
void SavePatchSection(Common::IniFile* local_ini, const std::vector<Patch>& patches)
{
std::vector<std::string> lines;
std::vector<std::string> lines_enabled;
@@ -176,7 +174,7 @@ void SavePatchSection(IniFile* local_ini, const std::vector<Patch>& patches)
local_ini->SetLines("OnFrame", lines);
}

static void LoadSpeedhacks(const std::string& section, IniFile& ini)
static void LoadSpeedhacks(const std::string& section, Common::IniFile& ini)
{
std::vector<std::string> keys;
ini.GetKeys(section, &keys);
@@ -210,9 +208,10 @@ int GetSpeedhackCycles(const u32 addr)

void LoadPatches()
{
IniFile merged = SConfig::GetInstance().LoadGameIni();
IniFile globalIni = SConfig::GetInstance().LoadDefaultGameIni();
IniFile localIni = SConfig::GetInstance().LoadLocalGameIni();
const auto& sconfig = SConfig::GetInstance();
Common::IniFile merged = sconfig.LoadGameIni();
Common::IniFile globalIni = sconfig.LoadDefaultGameIni();
Common::IniFile localIni = sconfig.LoadLocalGameIni();

LoadPatchSection("OnFrame", &s_on_frame, globalIni, localIni);

@@ -9,7 +9,10 @@

#include "Common/CommonTypes.h"

namespace Common
{
class IniFile;
}

namespace PatchEngine
{
@@ -47,8 +50,8 @@ int GetSpeedhackCycles(const u32 addr);
std::optional<PatchEntry> DeserializeLine(std::string line);
std::string SerializeLine(const PatchEntry& entry);
void LoadPatchSection(const std::string& section, std::vector<Patch>* patches,
const IniFile& globalIni, const IniFile& localIni);
void SavePatchSection(IniFile* local_ini, const std::vector<Patch>& patches);
const Common::IniFile& globalIni, const Common::IniFile& localIni);
void SavePatchSection(Common::IniFile* local_ini, const std::vector<Patch>& patches);
void LoadPatches();

void AddMemoryPatch(std::size_t index);
@@ -33,13 +33,14 @@ ARCodeWidget::ARCodeWidget(std::string game_id, u16 game_revision, bool restart_

if (!m_game_id.empty())
{
IniFile game_ini_local;
Common::IniFile game_ini_local;

// We don't use LoadLocalGameIni() here because user cheat codes that are installed via the UI
// will always be stored in GS/${GAMEID}.ini
game_ini_local.Load(File::GetUserPath(D_GAMESETTINGS_IDX) + m_game_id + ".ini");

const IniFile game_ini_default = SConfig::LoadDefaultGameIni(m_game_id, m_game_revision);
const Common::IniFile game_ini_default =
SConfig::LoadDefaultGameIni(m_game_id, m_game_revision);
m_ar_codes = ActionReplay::LoadCodes(game_ini_default, game_ini_local);
}

@@ -185,7 +186,7 @@ void ARCodeWidget::SaveCodes()
const auto ini_path =
std::string(File::GetUserPath(D_GAMESETTINGS_IDX)).append(m_game_id).append(".ini");

IniFile game_ini_local;
Common::IniFile game_ini_local;
game_ini_local.Load(ini_path);
ActionReplay::SaveCodes(&game_ini_local, m_ar_codes);
game_ini_local.Save(ini_path);
@@ -63,6 +63,6 @@ class GameConfigWidget : public QWidget
const UICommon::GameFile& m_game;
std::string m_game_id;

IniFile m_gameini_local;
IniFile m_gameini_default;
Common::IniFile m_gameini_local;
Common::IniFile m_gameini_default;
};
@@ -40,13 +40,14 @@ GeckoCodeWidget::GeckoCodeWidget(std::string game_id, std::string gametdb_id, u1

if (!m_game_id.empty())
{
IniFile game_ini_local;
Common::IniFile game_ini_local;

// We don't use LoadLocalGameIni() here because user cheat codes that are installed via the UI
// will always be stored in GS/${GAMEID}.ini
game_ini_local.Load(File::GetUserPath(D_GAMESETTINGS_IDX) + m_game_id + ".ini");

const IniFile game_ini_default = SConfig::LoadDefaultGameIni(m_game_id, m_game_revision);
const Common::IniFile game_ini_default =
SConfig::LoadDefaultGameIni(m_game_id, m_game_revision);
m_gecko_codes = Gecko::LoadCodes(game_ini_default, game_ini_local);
}

@@ -245,7 +246,7 @@ void GeckoCodeWidget::SaveCodes()
const auto ini_path =
std::string(File::GetUserPath(D_GAMESETTINGS_IDX)).append(m_game_id).append(".ini");

IniFile game_ini_local;
Common::IniFile game_ini_local;
game_ini_local.Load(ini_path);
Gecko::SaveCodes(game_ini_local, m_gecko_codes);
game_ini_local.Save(ini_path);
@@ -299,7 +299,7 @@ void MappingWindow::OnLoadProfilePressed()

const QString profile_path = m_profiles_combo->currentData().toString();

IniFile ini;
Common::IniFile ini;
ini.Load(profile_path.toStdString());

m_controller->LoadConfig(ini.GetOrCreateSection("Profile"));
@@ -322,7 +322,7 @@ void MappingWindow::OnSaveProfilePressed()

File::CreateFullPath(profile_path);

IniFile ini;
Common::IniFile ini;

m_controller->SaveConfig(ini.GetOrCreateSection("Profile"));
ini.Save(profile_path);
@@ -542,7 +542,7 @@ void MappingWindow::OnDefaultFieldsPressed()
void MappingWindow::OnClearFieldsPressed()
{
// Loading an empty inifile section clears everything.
IniFile::Section sec;
Common::IniFile::Section sec;

// Keep the currently selected device.
const auto default_device = m_controller->GetDefaultDevice();
@@ -21,10 +21,11 @@
PatchesWidget::PatchesWidget(const UICommon::GameFile& game)
: m_game_id(game.GetGameID()), m_game_revision(game.GetRevision())
{
IniFile game_ini_local;
Common::IniFile game_ini_local;
game_ini_local.Load(File::GetUserPath(D_GAMESETTINGS_IDX) + m_game_id + ".ini");

IniFile game_ini_default = SConfig::GetInstance().LoadDefaultGameIni(m_game_id, m_game_revision);
Common::IniFile game_ini_default =
SConfig::GetInstance().LoadDefaultGameIni(m_game_id, m_game_revision);

PatchEngine::LoadPatchSection("OnFrame", &m_patches, game_ini_default, game_ini_local);

@@ -128,7 +129,7 @@ void PatchesWidget::SavePatches()
{
const std::string ini_path = File::GetUserPath(D_GAMESETTINGS_IDX) + m_game_id + ".ini";

IniFile game_ini_local;
Common::IniFile game_ini_local;
game_ini_local.Load(ini_path);
PatchEngine::SavePatchSection(&game_ini_local, m_patches);
game_ini_local.Save(ini_path);
@@ -337,7 +337,7 @@ void BreakpointWidget::OnEditBreakpoint(u32 address, bool is_instruction_bp)

void BreakpointWidget::OnLoad()
{
IniFile ini;
Common::IniFile ini;
if (!ini.Load(File::GetUserPath(D_GAMESETTINGS_IDX) + SConfig::GetInstance().GetGameID() + ".ini",
false))
{
@@ -367,7 +367,7 @@ void BreakpointWidget::OnLoad()

void BreakpointWidget::OnSave()
{
IniFile ini;
Common::IniFile ini;
ini.Load(File::GetUserPath(D_GAMESETTINGS_IDX) + SConfig::GetInstance().GetGameID() + ".ini",
false);
ini.SetLines("BreakPoints", m_system.GetPowerPC().GetBreakPoints().GetStrings());
@@ -289,7 +289,7 @@ void WatchWidget::OnNewWatch()

void WatchWidget::OnLoad()
{
IniFile ini;
Common::IniFile ini;

std::vector<std::string> watches;

@@ -317,7 +317,7 @@ void WatchWidget::OnLoad()

void WatchWidget::OnSave()
{
IniFile ini;
Common::IniFile ini;
ini.Load(File::GetUserPath(D_GAMESETTINGS_IDX) + SConfig::GetInstance().GetGameID() + ".ini",
false);
ini.SetLines("Watches", m_system.GetPowerPC().GetDebugInterface().SaveWatchesToStrings());
@@ -353,7 +353,7 @@ WiiTASInputWindow::WiiTASInputWindow(QWidget* parent, int num) : TASInputWindow(
}
else
{
IniFile ini;
Common::IniFile ini;
ini.Load(File::GetUserPath(D_CONFIG_IDX) + "WiimoteNew.ini");
const std::string section_name = "Wiimote" + std::to_string(num + 1);

@@ -50,7 +50,7 @@ void ControlGroup::AddDeadzoneSetting(SettingValue<double>* value, double maximu

ControlGroup::~ControlGroup() = default;

void ControlGroup::LoadConfig(IniFile::Section* sec, const std::string& defdev,
void ControlGroup::LoadConfig(Common::IniFile::Section* sec, const std::string& defdev,
const std::string& base)
{
const std::string group(base + name + "/");
@@ -103,7 +103,7 @@ void ControlGroup::LoadConfig(IniFile::Section* sec, const std::string& defdev,
}
}

void ControlGroup::SaveConfig(IniFile::Section* sec, const std::string& defdev,
void ControlGroup::SaveConfig(Common::IniFile::Section* sec, const std::string& defdev,
const std::string& base)
{
const std::string group(base + name + "/");
@@ -68,9 +68,9 @@ class ControlGroup
DefaultValue default_value = DefaultValue::AlwaysEnabled);
virtual ~ControlGroup();

virtual void LoadConfig(IniFile::Section* sec, const std::string& defdev = "",
virtual void LoadConfig(Common::IniFile::Section* sec, const std::string& defdev = "",
const std::string& base = "");
virtual void SaveConfig(IniFile::Section* sec, const std::string& defdev = "",
virtual void SaveConfig(Common::IniFile::Section* sec, const std::string& defdev = "",
const std::string& base = "");

void SetControlExpression(int index, const std::string& expression);
@@ -139,7 +139,7 @@ void EmulatedController::SetDefaultDevice(ciface::Core::DeviceQualifier devq)
}
}

void EmulatedController::LoadConfig(IniFile::Section* sec, const std::string& base)
void EmulatedController::LoadConfig(Common::IniFile::Section* sec, const std::string& base)
{
const auto lock = GetStateLock();
std::string defdev = GetDefaultDevice().ToString();
@@ -153,7 +153,7 @@ void EmulatedController::LoadConfig(IniFile::Section* sec, const std::string& ba
cg->LoadConfig(sec, defdev, base);
}

void EmulatedController::SaveConfig(IniFile::Section* sec, const std::string& base)
void EmulatedController::SaveConfig(Common::IniFile::Section* sec, const std::string& base)
{
const auto lock = GetStateLock();
const std::string defdev = GetDefaultDevice().ToString();
@@ -168,7 +168,7 @@ void EmulatedController::LoadDefaults(const ControllerInterface& ciface)
{
const auto lock = GetStateLock();
// load an empty inifile section, clears everything
IniFile::Section sec;
Common::IniFile::Section sec;
LoadConfig(&sec);

const std::string& default_device_string = ciface.GetDefaultDeviceString();
@@ -182,8 +182,8 @@ class EmulatedController

virtual void LoadDefaults(const ControllerInterface& ciface);

virtual void LoadConfig(IniFile::Section* sec, const std::string& base = "");
virtual void SaveConfig(IniFile::Section* sec, const std::string& base = "");
virtual void LoadConfig(Common::IniFile::Section* sec, const std::string& base = "");
virtual void SaveConfig(Common::IniFile::Section* sec, const std::string& base = "");

bool IsDefaultDeviceConnected() const;
const ciface::Core::DeviceQualifier& GetDefaultDevice() const;
@@ -60,8 +60,10 @@ class NumericSettingBase

virtual ~NumericSettingBase() = default;

virtual void LoadFromIni(const IniFile::Section& section, const std::string& group_name) = 0;
virtual void SaveToIni(IniFile::Section& section, const std::string& group_name) const = 0;
virtual void LoadFromIni(const Common::IniFile::Section& section,
const std::string& group_name) = 0;
virtual void SaveToIni(Common::IniFile::Section& section,
const std::string& group_name) const = 0;

virtual InputReference& GetInputReference() = 0;
virtual const InputReference& GetInputReference() const = 0;
@@ -111,7 +113,7 @@ class NumericSetting final : public NumericSettingBase

void SetToDefault() override { m_value.SetValue(m_default_value); }

void LoadFromIni(const IniFile::Section& section, const std::string& group_name) override
void LoadFromIni(const Common::IniFile::Section& section, const std::string& group_name) override
{
std::string str_value;
if (section.Get(group_name + m_details.ini_name, &str_value))
@@ -125,7 +127,7 @@ class NumericSetting final : public NumericSettingBase
}
}

void SaveToIni(IniFile::Section& section, const std::string& group_name) const override
void SaveToIni(Common::IniFile::Section& section, const std::string& group_name) const override
{
if (IsSimpleValue())
{
@@ -226,8 +226,8 @@ void ReshapableInput::SetCenter(ReshapableInput::ReshapeData center)
m_center = center;
}

void ReshapableInput::LoadConfig(IniFile::Section* section, const std::string& default_device,
const std::string& base_name)
void ReshapableInput::LoadConfig(Common::IniFile::Section* section,
const std::string& default_device, const std::string& base_name)
{
ControlGroup::LoadConfig(section, default_device, base_name);

@@ -269,8 +269,8 @@ void ReshapableInput::LoadConfig(IniFile::Section* section, const std::string& d
}
}

void ReshapableInput::SaveConfig(IniFile::Section* section, const std::string& default_device,
const std::string& base_name)
void ReshapableInput::SaveConfig(Common::IniFile::Section* section,
const std::string& default_device, const std::string& base_name)
{
ControlGroup::SaveConfig(section, default_device, base_name);

@@ -117,8 +117,8 @@ class ReshapableInput : public ControlGroup
virtual Control* GetModifierInput() const;

private:
void LoadConfig(IniFile::Section*, const std::string&, const std::string&) override;
void SaveConfig(IniFile::Section*, const std::string&, const std::string&) override;
void LoadConfig(Common::IniFile::Section*, const std::string&, const std::string&) override;
void SaveConfig(Common::IniFile::Section*, const std::string&, const std::string&) override;

CalibrationData m_calibration;
SettingValue<double> m_deadzone_setting;
@@ -39,7 +39,7 @@ void DynamicInputTextureManager::Load()
}
}

void DynamicInputTextureManager::GenerateTextures(const IniFile& file,
void DynamicInputTextureManager::GenerateTextures(const Common::IniFile& file,
const std::vector<std::string>& controller_names)
{
bool any_dirty = false;
@@ -20,7 +20,8 @@ class DynamicInputTextureManager
DynamicInputTextureManager();
~DynamicInputTextureManager();
void Load();
void GenerateTextures(const IniFile& file, const std::vector<std::string>& controller_names);
void GenerateTextures(const Common::IniFile& file,
const std::vector<std::string>& controller_names);

private:
std::vector<DynamicInputTextures::Configuration> m_configuration;
@@ -11,6 +11,7 @@

#include "Common/CommonPaths.h"
#include "Common/FileUtil.h"
#include "Common/IniFile.h"
#include "Common/Logging/Log.h"
#include "Common/StringUtil.h"
#include "Core/ConfigManager.h"
@@ -86,7 +87,7 @@ Configuration::Configuration(const std::string& json_file)

Configuration::~Configuration() = default;

bool Configuration::GenerateTextures(const IniFile& file,
bool Configuration::GenerateTextures(const Common::IniFile& file,
const std::vector<std::string>& controller_names) const
{
bool any_dirty = false;
@@ -98,7 +99,7 @@ bool Configuration::GenerateTextures(const IniFile& file,
return any_dirty;
}

bool Configuration::GenerateTexture(const IniFile& file,
bool Configuration::GenerateTexture(const Common::IniFile& file,
const std::vector<std::string>& controller_names,
const Data& texture_data) const
{
@@ -4,25 +4,29 @@
#pragma once

#include <string>
#include <unordered_map>
#include <vector>

#include "Common/CommonTypes.h"
#include "Common/IniFile.h"
#include "InputCommon/DynamicInputTextures/DITData.h"

namespace Common
{
class IniFile;
}

namespace InputCommon::DynamicInputTextures
{
class Configuration
{
public:
explicit Configuration(const std::string& json_file);
~Configuration();
bool GenerateTextures(const IniFile& file,
bool GenerateTextures(const Common::IniFile& file,
const std::vector<std::string>& controller_names) const;

private:
bool GenerateTexture(const IniFile& file, const std::vector<std::string>& controller_names,
bool GenerateTexture(const Common::IniFile& file,
const std::vector<std::string>& controller_names,
const Data& texture_data) const;

std::vector<Data> m_dynamic_input_textures;
@@ -29,7 +29,7 @@ InputConfig::~InputConfig() = default;

bool InputConfig::LoadConfig(InputClass type)
{
IniFile inifile;
Common::IniFile inifile;
bool useProfile[MAX_BBMOTES] = {false, false, false, false, false};
static constexpr std::array<std::string_view, MAX_BBMOTES> num = {"1", "2", "3", "4", "BB"};
std::string profile[MAX_BBMOTES];
@@ -57,8 +57,8 @@ bool InputConfig::LoadConfig(InputClass type)
break;
}

IniFile game_ini = SConfig::GetInstance().LoadGameIni();
IniFile::Section* control_section = game_ini.GetOrCreateSection("Controls");
Common::IniFile game_ini = SConfig::GetInstance().LoadGameIni();
auto* control_section = game_ini.GetOrCreateSection("Controls");

for (int i = 0; i < 4; i++)
{
@@ -95,7 +95,7 @@ bool InputConfig::LoadConfig(InputClass type)
std::vector<std::string> controller_names;
for (auto& controller : m_controllers)
{
IniFile::Section config;
Common::IniFile::Section config;
// Load settings from ini
if (useProfile[n])
{
@@ -146,7 +146,7 @@ void InputConfig::SaveConfig()
{
std::string ini_filename = File::GetUserPath(D_CONFIG_IDX) + m_ini_name + ".ini";

IniFile inifile;
Common::IniFile inifile;
inifile.Load(ini_filename);

std::vector<std::string> controller_names;
@@ -212,7 +212,7 @@ bool InputConfig::IsControllerControlledByGamepadDevice(int index) const
controller.name == "Keyboard Mouse")); // Windows Keyboard/Mouse
}

void InputConfig::GenerateControllerTextures(const IniFile& file)
void InputConfig::GenerateControllerTextures(const Common::IniFile& file)
{
std::vector<std::string> controller_names;
for (auto& controller : m_controllers)
@@ -11,6 +11,11 @@
#include "InputCommon/ControllerInterface/ControllerInterface.h"
#include "InputCommon/DynamicInputTextureManager.h"

namespace Common
{
class IniFile;
}

namespace ControllerEmu
{
class EmulatedController;
@@ -53,7 +58,7 @@ class InputConfig
void RegisterHotplugCallback();
void UnregisterHotplugCallback();

void GenerateControllerTextures(const IniFile& file);
void GenerateControllerTextures(const Common::IniFile& file);

private:
ControllerInterface::HotplugCallbackHandle m_hotplug_callback_handle;
@@ -78,7 +78,7 @@ void ProfileCycler::UpdateToProfile(const std::string& profile_filename,
std::string base;
SplitPath(profile_filename, nullptr, &base, nullptr);

IniFile ini_file;
Common::IniFile ini_file;
if (ini_file.Load(profile_filename))
{
Core::DisplayMessage("Loading input profile '" + base + "' for device '" +
@@ -180,8 +180,8 @@ void ProfileCycler::CycleProfileForGame(CycleDirection cycle_direction,

std::string ProfileCycler::GetWiimoteInputProfilesForGame(int controller_index)
{
IniFile game_ini = SConfig::GetInstance().LoadGameIni();
const IniFile::Section* const control_section = game_ini.GetOrCreateSection("Controls");
Common::IniFile game_ini = SConfig::GetInstance().LoadGameIni();
const auto* const control_section = game_ini.GetOrCreateSection("Controls");

std::string result;
control_section->Get(fmt::format("WiimoteProfile{}", controller_index + 1), &result);
@@ -17,11 +17,11 @@ namespace
std::vector<ResourcePack> packs;
std::string packs_path;

IniFile GetPackConfig()
Common::IniFile GetPackConfig()
{
packs_path = File::GetUserPath(D_RESOURCEPACK_IDX) + "/Packs.ini";

IniFile file;
Common::IniFile file;
file.Load(packs_path);

return file;
@@ -34,7 +34,7 @@ bool Init()
const std::vector<std::string> pack_list =
Common::DoFileSearch({File::GetUserPath(D_RESOURCEPACK_IDX)}, {".zip"});

IniFile file = GetPackConfig();
Common::IniFile file = GetPackConfig();

auto* order = file.GetOrCreateSection("Order");

@@ -123,7 +123,7 @@ ResourcePack* Add(const std::string& path, int offset)
if (!pack.IsValid())
return nullptr;

IniFile file = GetPackConfig();
Common::IniFile file = GetPackConfig();

auto* order = file.GetOrCreateSection("Order");

@@ -150,7 +150,7 @@ bool Remove(ResourcePack& pack)
if (pack_iterator == packs.end())
return false;

IniFile file = GetPackConfig();
Common::IniFile file = GetPackConfig();

auto* order = file.GetOrCreateSection("Order");

@@ -170,7 +170,7 @@ bool Remove(ResourcePack& pack)

void SetInstalled(const ResourcePack& pack, bool installed)
{
IniFile file = GetPackConfig();
Common::IniFile file = GetPackConfig();

auto* install = file.GetOrCreateSection("Installed");

@@ -184,7 +184,7 @@ void SetInstalled(const ResourcePack& pack, bool installed)

bool IsInstalled(const ResourcePack& pack)
{
IniFile file = GetPackConfig();
Common::IniFile file = GetPackConfig();

auto* install = file.GetOrCreateSection("Installed");

@@ -151,7 +151,7 @@ void PostProcessingConfiguration::LoadOptions(const std::string& code)
if (current_strings)
{
std::string key, value;
IniFile::ParseLine(line, &key, &value);
Common::IniFile::ParseLine(line, &key, &value);

if (!(key.empty() && value.empty()))
current_strings->m_options.emplace_back(key, value);
@@ -238,7 +238,7 @@ void PostProcessingConfiguration::LoadOptions(const std::string& code)

void PostProcessingConfiguration::LoadOptionsConfiguration()
{
IniFile ini;
Common::IniFile ini;
ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX));
std::string section = m_current_shader + "-options";

@@ -272,7 +272,7 @@ void PostProcessingConfiguration::LoadOptionsConfiguration()

void PostProcessingConfiguration::SaveOptionsConfiguration()
{
IniFile ini;
Common::IniFile ini;
ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX));
std::string section = m_current_shader + "-options";