Skip to content

Commit

Permalink
Merge pull request dolphin-emu#12561 from JosJuice/profile-consistency
Browse files Browse the repository at this point in the history
InputCommon: Fix profile path inconsistencies
  • Loading branch information
lioncash authored Feb 5, 2024
2 parents abbc4bd + 1315b54 commit 9240f57
Show file tree
Hide file tree
Showing 14 changed files with 78 additions and 70 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,11 @@ class EmulatedController private constructor(private val pointer: Long) {

external fun saveProfile(path: String)

external fun getProfileName(): String
external fun getProfileKey(): String

external fun getUserProfileDirectoryPath(): String

external fun getSysProfileDirectoryPath(): String

companion object {
@JvmStatic
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,11 +101,11 @@ class ProfileDialogPresenter {
}

private fun getProfileDirectoryPath(stock: Boolean): String {
val profileDirectoryName = menuTag.correspondingEmulatedController.getProfileName()
val controller = menuTag.correspondingEmulatedController
return if (stock) {
"${DirectoryInitialization.getSysDirectory()}/Profiles/$profileDirectoryName/"
controller.getSysProfileDirectoryPath()
} else {
"${DirectoryInitialization.getUserDirectory()}/Config/Profiles/$profileDirectoryName/"
controller.getUserProfileDirectoryPath()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2237,7 +2237,7 @@ class SettingsFragmentPresenter(
controllerNumber: Int
) {
val profiles = ProfileDialogPresenter(menuTag).getProfileNames(false)
val profileKey = controller.getProfileName() + "Profile" + (controllerNumber + 1)
val profileKey = controller.getProfileKey() + "Profile" + (controllerNumber + 1)
sl.add(
StringSingleChoiceSetting(
context,
Expand Down
20 changes: 18 additions & 2 deletions Source/Android/jni/Input/EmulatedController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,10 +126,26 @@ Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_EmulatedContro
}

JNIEXPORT jstring JNICALL
Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_EmulatedController_getProfileName(
Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_EmulatedController_getProfileKey(
JNIEnv* env, jobject obj)
{
return ToJString(env, EmulatedControllerFromJava(env, obj)->GetConfig()->GetProfileName());
return ToJString(env, EmulatedControllerFromJava(env, obj)->GetConfig()->GetProfileKey());
}

JNIEXPORT jstring JNICALL
Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_EmulatedController_getUserProfileDirectoryPath(
JNIEnv* env, jobject obj)
{
return ToJString(
env, EmulatedControllerFromJava(env, obj)->GetConfig()->GetUserProfileDirectoryPath());
}

JNIEXPORT jstring JNICALL
Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_EmulatedController_getSysProfileDirectoryPath(
JNIEnv* env, jobject obj)
{
return ToJString(env,
EmulatedControllerFromJava(env, obj)->GetConfig()->GetSysProfileDirectoryPath());
}

JNIEXPORT jobject JNICALL
Expand Down
7 changes: 4 additions & 3 deletions Source/Core/Core/FreeLookManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,8 @@ void FreeLookController::UpdateInput(CameraControllerInput* camera_controller)

namespace FreeLook
{
static InputConfig s_config("FreeLookController", _trans("FreeLook"), "FreeLookController");
static InputConfig s_config("FreeLookController", _trans("FreeLook"), "FreeLookController",
"FreeLookController");
InputConfig* GetInputConfig()
{
return &s_config;
Expand All @@ -336,12 +337,12 @@ void Initialize()

FreeLook::GetConfig().Refresh();

s_config.LoadConfig(InputConfig::InputClass::GC);
s_config.LoadConfig();
}

void LoadInputConfig()
{
s_config.LoadConfig(InputConfig::InputClass::GC);
s_config.LoadConfig();
}

bool IsInitialized()
Expand Down
6 changes: 3 additions & 3 deletions Source/Core/Core/HW/GBAPad.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

namespace Pad
{
static InputConfig s_config("GBA", _trans("Pad"), "GBA");
static InputConfig s_config("GBA", _trans("Pad"), "GBA", "GBA");
InputConfig* GetGBAConfig()
{
return &s_config;
Expand All @@ -34,12 +34,12 @@ void InitializeGBA()
s_config.RegisterHotplugCallback();

// Load the saved controller config
s_config.LoadConfig(InputConfig::InputClass::GBA);
s_config.LoadConfig();
}

void LoadGBAConfig()
{
s_config.LoadConfig(InputConfig::InputClass::GBA);
s_config.LoadConfig();
}

bool IsGBAInitialized()
Expand Down
6 changes: 3 additions & 3 deletions Source/Core/Core/HW/GCKeyboard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

namespace Keyboard
{
static InputConfig s_config("GCKeyNew", _trans("Keyboard"), "GCKey");
static InputConfig s_config("GCKeyNew", _trans("Keyboard"), "GCKey", "GCKey");
InputConfig* GetConfig()
{
return &s_config;
Expand All @@ -41,12 +41,12 @@ void Initialize()
s_config.RegisterHotplugCallback();

// Load the saved controller config
s_config.LoadConfig(InputConfig::InputClass::GC);
s_config.LoadConfig();
}

void LoadConfig()
{
s_config.LoadConfig(InputConfig::InputClass::GC);
s_config.LoadConfig();
}

ControllerEmu::ControlGroup* GetGroup(int port, KeyboardGroup group)
Expand Down
6 changes: 3 additions & 3 deletions Source/Core/Core/HW/GCPad.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

namespace Pad
{
static InputConfig s_config("GCPadNew", _trans("Pad"), "GCPad");
static InputConfig s_config("GCPadNew", _trans("Pad"), "GCPad", "Pad");
InputConfig* GetConfig()
{
return &s_config;
Expand All @@ -38,12 +38,12 @@ void Initialize()
s_config.RegisterHotplugCallback();

// Load the saved controller config
s_config.LoadConfig(InputConfig::InputClass::GC);
s_config.LoadConfig();
}

void LoadConfig()
{
s_config.LoadConfig(InputConfig::InputClass::GC);
s_config.LoadConfig();
}

bool IsInitialized()
Expand Down
4 changes: 2 additions & 2 deletions Source/Core/Core/HW/Wiimote.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ HIDWiimote* GetHIDWiimoteSource(unsigned int index)

namespace Wiimote
{
static InputConfig s_config(WIIMOTE_INI_NAME, _trans("Wii Remote"), "Wiimote");
static InputConfig s_config(WIIMOTE_INI_NAME, _trans("Wii Remote"), "Wiimote", "Wiimote");

InputConfig* GetConfig()
{
Expand Down Expand Up @@ -206,7 +206,7 @@ void ResetAllWiimotes()

void LoadConfig()
{
s_config.LoadConfig(InputConfig::InputClass::Wii);
s_config.LoadConfig();
s_last_connect_request_counter.fill(0);
}

Expand Down
4 changes: 2 additions & 2 deletions Source/Core/Core/HotkeyManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ static std::array<u32, NUM_HOTKEY_GROUPS> s_hotkey_down;
static HotkeyStatus s_hotkey;
static bool s_enabled;

static InputConfig s_config("Hotkeys", _trans("Hotkeys"), "Hotkeys");
static InputConfig s_config("Hotkeys", _trans("Hotkeys"), "Hotkeys", "Hotkeys");

InputConfig* GetConfig()
{
Expand Down Expand Up @@ -304,7 +304,7 @@ void Initialize()

void LoadConfig()
{
s_config.LoadConfig(InputConfig::InputClass::GC);
s_config.LoadConfig();
LoadLegacyConfig(s_config.GetController(0));
}

Expand Down
13 changes: 5 additions & 8 deletions Source/Core/DolphinQt/Config/Mapping/MappingWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -319,9 +319,8 @@ void MappingWindow::OnSaveProfilePressed()
if (profile_name.isEmpty())
return;

const std::string profile_path = File::GetUserPath(D_CONFIG_IDX) + PROFILES_DIR +
m_config->GetProfileName() + "/" + profile_name.toStdString() +
".ini";
const std::string profile_path =
m_config->GetUserProfileDirectoryPath() + profile_name.toStdString() + ".ini";

File::CreateFullPath(profile_path);

Expand Down Expand Up @@ -487,8 +486,7 @@ void MappingWindow::PopulateProfileSelection()
{
m_profiles_combo->clear();

const std::string profiles_path =
File::GetUserPath(D_CONFIG_IDX) + PROFILES_DIR + m_config->GetProfileName();
const std::string profiles_path = m_config->GetUserProfileDirectoryPath();
for (const auto& filename : Common::DoFileSearch({profiles_path}, {".ini"}))
{
std::string basename;
Expand All @@ -499,9 +497,8 @@ void MappingWindow::PopulateProfileSelection()

m_profiles_combo->insertSeparator(m_profiles_combo->count());

const std::string builtin_profiles_path =
File::GetSysDirectory() + PROFILES_DIR + m_config->GetProfileName();
for (const auto& filename : Common::DoFileSearch({builtin_profiles_path}, {".ini"}))
for (const auto& filename :
Common::DoFileSearch({m_config->GetSysProfileDirectoryPath()}, {".ini"}))
{
std::string basename;
SplitPath(filename, nullptr, &basename, nullptr);
Expand Down
41 changes: 17 additions & 24 deletions Source/Core/InputCommon/InputConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,57 +20,40 @@
#include "InputCommon/InputProfile.h"

InputConfig::InputConfig(const std::string& ini_name, const std::string& gui_name,
const std::string& profile_name)
: m_ini_name(ini_name), m_gui_name(gui_name), m_profile_name(profile_name)
const std::string& profile_directory_name, const std::string& profile_key)
: m_ini_name(ini_name), m_gui_name(gui_name), m_profile_directory_name(profile_directory_name),
m_profile_key(profile_key)
{
}

InputConfig::~InputConfig() = default;

bool InputConfig::LoadConfig(InputClass type)
bool InputConfig::LoadConfig()
{
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];
std::string path;

m_dynamic_input_tex_config_manager.Load();

if (SConfig::GetInstance().GetGameID() != "00000000")
{
std::string type_str;
switch (type)
{
case InputClass::GBA:
type_str = "GBA";
path = "Profiles/GBA/";
break;
case InputClass::Wii:
type_str = "Wiimote";
path = "Profiles/Wiimote/";
break;
case InputClass::GC:
default:
type_str = "Pad";
path = "Profiles/GCPad/";
break;
}
const std::string profile_directory = GetUserProfileDirectoryPath();

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

for (int i = 0; i < 4; i++)
{
const auto profile_name = fmt::format("{}Profile{}", type_str, num[i]);
const auto profile_name = fmt::format("{}Profile{}", GetProfileKey(), num[i]);

if (control_section->Exists(profile_name))
{
std::string profile_setting;
if (control_section->Get(profile_name, &profile_setting))
{
auto profiles = InputProfile::GetProfilesFromSetting(
profile_setting, File::GetUserPath(D_CONFIG_IDX) + path);
auto profiles = InputProfile::GetProfilesFromSetting(profile_setting, profile_directory);

if (profiles.empty())
{
Expand Down Expand Up @@ -176,6 +159,16 @@ bool InputConfig::ControllersNeedToBeCreated() const
return m_controllers.empty();
}

std::string InputConfig::GetUserProfileDirectoryPath() const
{
return fmt::format("{}Profiles/{}/", File::GetUserPath(D_CONFIG_IDX), GetProfileDirectoryName());
}

std::string InputConfig::GetSysProfileDirectoryPath() const
{
return fmt::format("{}Profiles/{}/", File::GetSysDirectory(), GetProfileDirectoryName());
}

int InputConfig::GetControllerCount() const
{
return static_cast<int>(m_controllers.size());
Expand Down
19 changes: 8 additions & 11 deletions Source/Core/InputCommon/InputConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,11 @@ class InputConfig
{
public:
InputConfig(const std::string& ini_name, const std::string& gui_name,
const std::string& profile_name);
const std::string& profile_directory_name, const std::string& profile_key);

~InputConfig();

enum class InputClass
{
GC,
Wii,
GBA,
};

bool LoadConfig(InputClass type);
bool LoadConfig();
void SaveConfig();

template <typename T, typename... Args>
Expand All @@ -51,7 +44,10 @@ class InputConfig
bool IsControllerControlledByGamepadDevice(int index) const;

std::string GetGUIName() const { return m_gui_name; }
std::string GetProfileName() const { return m_profile_name; }
std::string GetProfileKey() const { return m_profile_key; }
std::string GetProfileDirectoryName() const { return m_profile_directory_name; }
std::string GetUserProfileDirectoryPath() const;
std::string GetSysProfileDirectoryPath() const;
int GetControllerCount() const;

// These should be used after creating all controllers and before clearing them, respectively.
Expand All @@ -65,6 +61,7 @@ class InputConfig
std::vector<std::unique_ptr<ControllerEmu::EmulatedController>> m_controllers;
const std::string m_ini_name;
const std::string m_gui_name;
const std::string m_profile_name;
const std::string m_profile_directory_name;
const std::string m_profile_key;
InputCommon::DynamicInputTextureManager m_dynamic_input_tex_config_manager;
};
8 changes: 4 additions & 4 deletions Source/Core/InputCommon/InputProfile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ std::vector<std::string> GetProfilesFromSetting(const std::string& setting, cons

std::vector<std::string> ProfileCycler::GetProfilesForDevice(InputConfig* device_configuration)
{
const std::string device_profile_root_location(File::GetUserPath(D_CONFIG_IDX) + "Profiles/" +
device_configuration->GetProfileName());
const std::string device_profile_root_location(
device_configuration->GetUserProfileDirectoryPath());
return Common::DoFileSearch({device_profile_root_location}, {".ini"}, true);
}

Expand Down Expand Up @@ -101,8 +101,8 @@ ProfileCycler::GetMatchingProfilesFromSetting(const std::string& setting,
const std::vector<std::string>& profiles,
InputConfig* device_configuration)
{
const std::string device_profile_root_location(File::GetUserPath(D_CONFIG_IDX) + "Profiles/" +
device_configuration->GetProfileName() + "/");
const std::string device_profile_root_location(
device_configuration->GetUserProfileDirectoryPath());

const auto& profiles_from_setting = GetProfilesFromSetting(setting, device_profile_root_location);
if (profiles_from_setting.empty())
Expand Down

0 comments on commit 9240f57

Please sign in to comment.