mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-16 17:15:46 -04:00
Settings: Add memory card directory option
This commit is contained in:
@ -586,9 +586,10 @@ void HostInterface::SetDefaultSettings(SettingsInterface& si)
|
||||
}
|
||||
|
||||
si.SetStringValue("MemoryCards", "Card1Type", Settings::GetMemoryCardTypeName(Settings::DEFAULT_MEMORY_CARD_1_TYPE));
|
||||
si.SetStringValue("MemoryCards", "Card1Path", "memcards" FS_OSPATH_SEPARATOR_STR "shared_card_1.mcd");
|
||||
si.SetStringValue("MemoryCards", "Card2Type", Settings::GetMemoryCardTypeName(Settings::DEFAULT_MEMORY_CARD_2_TYPE));
|
||||
si.SetStringValue("MemoryCards", "Card2Path", "memcards" FS_OSPATH_SEPARATOR_STR "shared_card_2.mcd");
|
||||
si.DeleteValue("MemoryCards", "Card1Path");
|
||||
si.DeleteValue("MemoryCards", "Card2Path");
|
||||
si.DeleteValue("MemoryCards", "Directory");
|
||||
si.SetBoolValue("MemoryCards", "UsePlaylistTitle", true);
|
||||
|
||||
si.SetStringValue("ControllerPorts", "MultitapMode", Settings::GetMultitapModeName(Settings::DEFAULT_MULTITAP_MODE));
|
||||
@ -837,7 +838,8 @@ void HostInterface::CheckForSettingsChanges(const Settings& old_settings)
|
||||
if (g_settings.memory_card_types != old_settings.memory_card_types ||
|
||||
g_settings.memory_card_paths != old_settings.memory_card_paths ||
|
||||
(g_settings.memory_card_use_playlist_title != old_settings.memory_card_use_playlist_title &&
|
||||
System::HasMediaSubImages()))
|
||||
System::HasMediaSubImages()) ||
|
||||
g_settings.memory_card_directory != old_settings.memory_card_directory)
|
||||
{
|
||||
System::UpdateMemoryCards();
|
||||
}
|
||||
@ -952,14 +954,38 @@ TinyString HostInterface::GetTimestampStringForFileName()
|
||||
return str;
|
||||
}
|
||||
|
||||
std::string HostInterface::GetMemoryCardDirectory() const
|
||||
{
|
||||
if (g_settings.memory_card_directory.empty())
|
||||
return GetUserDirectoryRelativePath("memcards");
|
||||
else
|
||||
return g_settings.memory_card_directory;
|
||||
}
|
||||
|
||||
std::string HostInterface::GetSharedMemoryCardPath(u32 slot) const
|
||||
{
|
||||
return GetUserDirectoryRelativePath("memcards" FS_OSPATH_SEPARATOR_STR "shared_card_%u.mcd", slot + 1);
|
||||
if (g_settings.memory_card_directory.empty())
|
||||
{
|
||||
return GetUserDirectoryRelativePath("memcards" FS_OSPATH_SEPARATOR_STR "shared_card_%u.mcd", slot + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
return StringUtil::StdStringFromFormat("%s" FS_OSPATH_SEPARATOR_STR "shared_card_%u.mcd",
|
||||
g_settings.memory_card_directory.c_str(), slot + 1);
|
||||
}
|
||||
}
|
||||
|
||||
std::string HostInterface::GetGameMemoryCardPath(const char* game_code, u32 slot) const
|
||||
{
|
||||
return GetUserDirectoryRelativePath("memcards" FS_OSPATH_SEPARATOR_STR "%s_%u.mcd", game_code, slot + 1);
|
||||
if (g_settings.memory_card_directory.empty())
|
||||
{
|
||||
return GetUserDirectoryRelativePath("memcards" FS_OSPATH_SEPARATOR_STR "%s_%u.mcd", game_code, slot + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
return StringUtil::StdStringFromFormat("%s" FS_OSPATH_SEPARATOR_STR "%s_%u.mcd",
|
||||
g_settings.memory_card_directory.c_str(), game_code, slot + 1);
|
||||
}
|
||||
}
|
||||
|
||||
bool HostInterface::GetBoolSettingValue(const char* section, const char* key, bool default_value /*= false*/)
|
||||
|
@ -93,6 +93,9 @@ public:
|
||||
/// Retrieves information about specified game from game list.
|
||||
virtual void GetGameInfo(const char* path, CDImage* image, std::string* code, std::string* title);
|
||||
|
||||
/// Returns the directory where per-game memory cards will be saved.
|
||||
virtual std::string GetMemoryCardDirectory() const;
|
||||
|
||||
/// Returns the default path to a memory card.
|
||||
virtual std::string GetSharedMemoryCardPath(u32 slot) const;
|
||||
|
||||
|
@ -275,14 +275,13 @@ void Settings::Load(SettingsInterface& si)
|
||||
ParseMemoryCardTypeName(
|
||||
si.GetStringValue("MemoryCards", "Card1Type", GetMemoryCardTypeName(DEFAULT_MEMORY_CARD_1_TYPE)).c_str())
|
||||
.value_or(DEFAULT_MEMORY_CARD_1_TYPE);
|
||||
memory_card_paths[0] =
|
||||
si.GetStringValue("MemoryCards", "Card1Path", "memcards" FS_OSPATH_SEPARATOR_STR "shared_card_1.mcd");
|
||||
memory_card_types[1] =
|
||||
ParseMemoryCardTypeName(
|
||||
si.GetStringValue("MemoryCards", "Card2Type", GetMemoryCardTypeName(DEFAULT_MEMORY_CARD_2_TYPE)).c_str())
|
||||
.value_or(DEFAULT_MEMORY_CARD_2_TYPE);
|
||||
memory_card_paths[1] =
|
||||
si.GetStringValue("MemoryCards", "Card2Path", "memcards" FS_OSPATH_SEPARATOR_STR "shared_card_2.mcd");
|
||||
memory_card_paths[0] = si.GetStringValue("MemoryCards", "Card1Path", "");
|
||||
memory_card_paths[1] = si.GetStringValue("MemoryCards", "Card2Path", "");
|
||||
memory_card_directory = si.GetStringValue("MemoryCards", "Directory", "");
|
||||
memory_card_use_playlist_title = si.GetBoolValue("MemoryCards", "UsePlaylistTitle", true);
|
||||
|
||||
multitap_mode =
|
||||
@ -434,9 +433,21 @@ void Settings::Save(SettingsInterface& si) const
|
||||
}
|
||||
|
||||
si.SetStringValue("MemoryCards", "Card1Type", GetMemoryCardTypeName(memory_card_types[0]));
|
||||
si.SetStringValue("MemoryCards", "Card1Path", memory_card_paths[0].c_str());
|
||||
si.SetStringValue("MemoryCards", "Card2Type", GetMemoryCardTypeName(memory_card_types[1]));
|
||||
si.SetStringValue("MemoryCards", "Card2Path", memory_card_paths[1].c_str());
|
||||
if (!memory_card_paths[0].empty())
|
||||
si.SetStringValue("MemoryCards", "Card1Path", memory_card_paths[0].c_str());
|
||||
else
|
||||
si.DeleteValue("MemoryCards", "Card1Path");
|
||||
|
||||
if (!memory_card_paths[1].empty())
|
||||
si.SetStringValue("MemoryCards", "Card2Path", memory_card_paths[1].c_str());
|
||||
else
|
||||
si.DeleteValue("MemoryCards", "Card2Path");
|
||||
|
||||
if (!memory_card_directory.empty())
|
||||
si.SetStringValue("MemoryCards", "Directory", memory_card_directory.c_str());
|
||||
else
|
||||
si.DeleteValue("MemoryCards", "Directory");
|
||||
si.SetBoolValue("MemoryCards", "UsePlaylistTitle", memory_card_use_playlist_title);
|
||||
|
||||
si.SetStringValue("ControllerPorts", "MultitapMode", GetMultitapModeName(multitap_mode));
|
||||
|
@ -216,6 +216,7 @@ struct Settings
|
||||
|
||||
std::array<MemoryCardType, NUM_CONTROLLER_AND_CARD_PORTS> memory_card_types{};
|
||||
std::array<std::string, NUM_CONTROLLER_AND_CARD_PORTS> memory_card_paths{};
|
||||
std::string memory_card_directory;
|
||||
bool memory_card_use_playlist_title = true;
|
||||
|
||||
MultitapMode multitap_mode = MultitapMode::Disabled;
|
||||
|
@ -1821,17 +1821,9 @@ void UpdateMemoryCards()
|
||||
case MemoryCardType::Shared:
|
||||
{
|
||||
if (g_settings.memory_card_paths[i].empty())
|
||||
{
|
||||
g_host_interface->AddFormattedOSDMessage(
|
||||
10.0f,
|
||||
g_host_interface->TranslateString("System", "Memory card path for slot %u is missing, using default."),
|
||||
i + 1u);
|
||||
card = MemoryCard::Open(g_host_interface->GetSharedMemoryCardPath(i));
|
||||
}
|
||||
else
|
||||
{
|
||||
card = MemoryCard::Open(g_settings.memory_card_paths[i]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user