mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-10-07 10:53:31 +00:00
Load and cache langValuesMapping on demand
This commit is contained in:
parent
4233e8dece
commit
93e5060137
@ -174,6 +174,19 @@ std::string* Section::GetLine(const char* key, std::string* valueOut, std::strin
|
||||
return 0;
|
||||
}
|
||||
|
||||
const std::string* Section::GetLine(const char* key, std::string* valueOut, std::string* commentOut) const
|
||||
{
|
||||
for (std::vector<std::string>::const_iterator iter = lines.begin(); iter != lines.end(); ++iter)
|
||||
{
|
||||
const std::string& line = *iter;
|
||||
std::string lineKey;
|
||||
ParseLine(line, &lineKey, valueOut, commentOut);
|
||||
if (!strcasecmp(lineKey.c_str(), key))
|
||||
return &line;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Section::Set(const char* key, uint32_t newValue) {
|
||||
Set(key, StringFromFormat("0x%08x", newValue).c_str());
|
||||
}
|
||||
@ -218,7 +231,7 @@ void Section::Set(const char* key, const std::string& newValue, const std::strin
|
||||
Delete(key);
|
||||
}
|
||||
|
||||
bool Section::Get(const char* key, std::string* value, const char* defaultValue)
|
||||
bool Section::Get(const char* key, std::string* value, const char* defaultValue) const
|
||||
{
|
||||
const std::string* line = GetLine(key, value, 0);
|
||||
if (!line)
|
||||
@ -275,7 +288,7 @@ void Section::AddComment(const std::string &comment) {
|
||||
lines.emplace_back("# " + comment);
|
||||
}
|
||||
|
||||
bool Section::Get(const char* key, std::vector<std::string>& values)
|
||||
bool Section::Get(const char* key, std::vector<std::string>& values) const
|
||||
{
|
||||
std::string temp;
|
||||
bool retval = Get(key, &temp, 0);
|
||||
@ -303,7 +316,7 @@ bool Section::Get(const char* key, std::vector<std::string>& values)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Section::Get(const char* key, int* value, int defaultValue)
|
||||
bool Section::Get(const char* key, int* value, int defaultValue) const
|
||||
{
|
||||
std::string temp;
|
||||
bool retval = Get(key, &temp, 0);
|
||||
@ -313,7 +326,7 @@ bool Section::Get(const char* key, int* value, int defaultValue)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Section::Get(const char* key, uint32_t* value, uint32_t defaultValue)
|
||||
bool Section::Get(const char* key, uint32_t* value, uint32_t defaultValue) const
|
||||
{
|
||||
std::string temp;
|
||||
bool retval = Get(key, &temp, 0);
|
||||
@ -323,7 +336,7 @@ bool Section::Get(const char* key, uint32_t* value, uint32_t defaultValue)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Section::Get(const char* key, uint64_t* value, uint64_t defaultValue)
|
||||
bool Section::Get(const char* key, uint64_t* value, uint64_t defaultValue) const
|
||||
{
|
||||
std::string temp;
|
||||
bool retval = Get(key, &temp, 0);
|
||||
@ -333,7 +346,7 @@ bool Section::Get(const char* key, uint64_t* value, uint64_t defaultValue)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Section::Get(const char* key, bool* value, bool defaultValue)
|
||||
bool Section::Get(const char* key, bool* value, bool defaultValue) const
|
||||
{
|
||||
std::string temp;
|
||||
bool retval = Get(key, &temp, 0);
|
||||
@ -343,7 +356,7 @@ bool Section::Get(const char* key, bool* value, bool defaultValue)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Section::Get(const char* key, float* value, float defaultValue)
|
||||
bool Section::Get(const char* key, float* value, float defaultValue) const
|
||||
{
|
||||
std::string temp;
|
||||
bool retval = Get(key, &temp, 0);
|
||||
@ -353,7 +366,7 @@ bool Section::Get(const char* key, float* value, float defaultValue)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Section::Get(const char* key, double* value, double defaultValue)
|
||||
bool Section::Get(const char* key, double* value, double defaultValue) const
|
||||
{
|
||||
std::string temp;
|
||||
bool retval = Get(key, &temp, 0);
|
||||
|
@ -25,14 +25,16 @@ public:
|
||||
|
||||
std::map<std::string, std::string> ToMap() const;
|
||||
|
||||
std::string* GetLine(const char* key, std::string* valueOut, std::string* commentOut);
|
||||
std::string *GetLine(const char* key, std::string* valueOut, std::string* commentOut);
|
||||
const std::string *GetLine(const char* key, std::string* valueOut, std::string* commentOut) const;
|
||||
|
||||
void Set(const char* key, const char* newValue);
|
||||
void Set(const char* key, const std::string& newValue, const std::string& defaultValue);
|
||||
|
||||
void Set(const std::string &key, const std::string &value) {
|
||||
Set(key.c_str(), value.c_str());
|
||||
}
|
||||
bool Get(const char* key, std::string* value, const char* defaultValue);
|
||||
bool Get(const char* key, std::string* value, const char* defaultValue) const;
|
||||
|
||||
void Set(const char* key, uint32_t newValue);
|
||||
void Set(const char* key, uint64_t newValue);
|
||||
@ -57,13 +59,13 @@ public:
|
||||
|
||||
void AddComment(const std::string &comment);
|
||||
|
||||
bool Get(const char* key, int* value, int defaultValue = 0);
|
||||
bool Get(const char* key, uint32_t* value, uint32_t defaultValue = 0);
|
||||
bool Get(const char* key, uint64_t* value, uint64_t defaultValue = 0);
|
||||
bool Get(const char* key, bool* value, bool defaultValue = false);
|
||||
bool Get(const char* key, float* value, float defaultValue = false);
|
||||
bool Get(const char* key, double* value, double defaultValue = false);
|
||||
bool Get(const char* key, std::vector<std::string>& values);
|
||||
bool Get(const char* key, int* value, int defaultValue = 0) const;
|
||||
bool Get(const char* key, uint32_t* value, uint32_t defaultValue = 0) const;
|
||||
bool Get(const char* key, uint64_t* value, uint64_t defaultValue = 0) const;
|
||||
bool Get(const char* key, bool* value, bool defaultValue = false) const;
|
||||
bool Get(const char* key, float* value, float defaultValue = false) const;
|
||||
bool Get(const char* key, double* value, double defaultValue = false) const;
|
||||
bool Get(const char* key, std::vector<std::string>& values) const;
|
||||
|
||||
bool operator < (const Section& other) const {
|
||||
return name_ < other.name_;
|
||||
|
@ -1124,9 +1124,10 @@ static int DefaultSystemParamLanguage() {
|
||||
int defaultLang = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH;
|
||||
if (g_Config.bFirstRun) {
|
||||
// TODO: Be smart about same language, different country
|
||||
auto langValuesMapping = GetLangValuesMapping();
|
||||
if (langValuesMapping.find(g_Config.sLanguageIni) != langValuesMapping.end()) {
|
||||
defaultLang = langValuesMapping[g_Config.sLanguageIni].second;
|
||||
auto &langValuesMapping = g_Config.GetLangValuesMapping();
|
||||
auto iter = langValuesMapping.find(g_Config.sLanguageIni);
|
||||
if (iter != langValuesMapping.end()) {
|
||||
defaultLang = iter->second.second;
|
||||
}
|
||||
}
|
||||
return defaultLang;
|
||||
@ -1273,14 +1274,12 @@ Config::~Config() {
|
||||
delete private_;
|
||||
}
|
||||
|
||||
std::map<std::string, std::pair<std::string, int>> GetLangValuesMapping() {
|
||||
std::map<std::string, std::pair<std::string, int>> langValuesMapping;
|
||||
void Config::LoadLangValuesMapping() {
|
||||
IniFile mapping;
|
||||
mapping.LoadFromVFS("langregion.ini");
|
||||
std::vector<std::string> keys;
|
||||
mapping.GetKeys("LangRegionNames", keys);
|
||||
|
||||
|
||||
std::map<std::string, int> langCodeMapping;
|
||||
langCodeMapping["JAPANESE"] = PSP_SYSTEMPARAM_LANGUAGE_JAPANESE;
|
||||
langCodeMapping["ENGLISH"] = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH;
|
||||
@ -1306,9 +1305,15 @@ std::map<std::string, std::pair<std::string, int>> GetLangValuesMapping() {
|
||||
int iLangCode = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH;
|
||||
if (langCodeMapping.find(langCode) != langCodeMapping.end())
|
||||
iLangCode = langCodeMapping[langCode];
|
||||
langValuesMapping[keys[i]] = std::make_pair(langName, iLangCode);
|
||||
langValuesMapping_[keys[i]] = std::make_pair(langName, iLangCode);
|
||||
}
|
||||
return langValuesMapping;
|
||||
}
|
||||
|
||||
const std::map<std::string, std::pair<std::string, int>> &Config::GetLangValuesMapping() {
|
||||
if (langValuesMapping_.empty()) {
|
||||
LoadLangValuesMapping();
|
||||
}
|
||||
return langValuesMapping_;
|
||||
}
|
||||
|
||||
void Config::Reload() {
|
||||
|
@ -568,21 +568,24 @@ public:
|
||||
bool HasRecentIsos() const;
|
||||
void ClearRecentIsos();
|
||||
|
||||
const std::map<std::string, std::pair<std::string, int>> &GetLangValuesMapping();
|
||||
|
||||
protected:
|
||||
void LoadStandardControllerIni();
|
||||
void LoadLangValuesMapping();
|
||||
|
||||
private:
|
||||
bool reload_ = false;
|
||||
std::string gameId_;
|
||||
std::string gameIdTitle_;
|
||||
std::vector<std::string> recentIsos;
|
||||
std::map<std::string, std::pair<std::string, int>> langValuesMapping_;
|
||||
Path iniFilename_;
|
||||
Path controllerIniFilename_;
|
||||
Path searchPath_;
|
||||
ConfigPrivate *private_ = nullptr;
|
||||
};
|
||||
|
||||
std::map<std::string, std::pair<std::string, int>> GetLangValuesMapping();
|
||||
std::string CreateRandMAC();
|
||||
|
||||
// TODO: Find a better place for this.
|
||||
|
@ -346,7 +346,7 @@ int PSPOskDialog::Init(u32 oskPtr) {
|
||||
inputChars += c;
|
||||
}
|
||||
|
||||
languageMapping = GetLangValuesMapping();
|
||||
languageMapping = g_Config.GetLangValuesMapping();
|
||||
|
||||
// Eat any keys pressed before the dialog inited.
|
||||
UpdateButtons();
|
||||
|
@ -619,7 +619,7 @@ NewLanguageScreen::NewLanguageScreen(const std::string &title) : ListPopupScreen
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(disable:4566)
|
||||
#endif
|
||||
langValuesMapping = GetLangValuesMapping();
|
||||
auto &langValuesMapping = g_Config.GetLangValuesMapping();
|
||||
|
||||
std::vector<File::FileInfo> tempLangs;
|
||||
VFSGetFileListing("lang", &tempLangs, "ini");
|
||||
@ -655,11 +655,12 @@ NewLanguageScreen::NewLanguageScreen(const std::string &title) : ListPopupScreen
|
||||
std::string buttonTitle = lang.name;
|
||||
|
||||
if (!code.empty()) {
|
||||
if (langValuesMapping.find(code) == langValuesMapping.end()) {
|
||||
auto iter = langValuesMapping.find(code);
|
||||
if (iter == langValuesMapping.end()) {
|
||||
// No title found, show locale code
|
||||
buttonTitle = code;
|
||||
} else {
|
||||
buttonTitle = langValuesMapping[code].first;
|
||||
buttonTitle = iter->second.first;
|
||||
}
|
||||
}
|
||||
if (g_Config.sLanguageIni == code)
|
||||
@ -700,11 +701,14 @@ void NewLanguageScreen::OnCompleted(DialogResult result) {
|
||||
|
||||
if (iniLoadedSuccessfully) {
|
||||
// Dunno what else to do here.
|
||||
if (langValuesMapping.find(code) == langValuesMapping.end()) {
|
||||
auto &langValuesMapping = g_Config.GetLangValuesMapping();
|
||||
|
||||
auto iter = langValuesMapping.find(code);
|
||||
if (iter == langValuesMapping.end()) {
|
||||
// Fallback to English
|
||||
g_Config.iLanguage = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH;
|
||||
} else {
|
||||
g_Config.iLanguage = langValuesMapping[code].second;
|
||||
g_Config.iLanguage = iter->second.second;
|
||||
}
|
||||
RecreateViews();
|
||||
} else {
|
||||
|
@ -106,7 +106,6 @@ public:
|
||||
private:
|
||||
void OnCompleted(DialogResult result) override;
|
||||
bool ShowButtons() const override { return true; }
|
||||
std::map<std::string, std::pair<std::string, int>> langValuesMapping;
|
||||
std::map<std::string, std::string> titleCodeMapping;
|
||||
std::vector<File::FileInfo> langs_;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user