forked from eden-emu/eden
		
	Pick game icon based on the configured system language
This commit is contained in:
		
							parent
							
								
									d4261e6017
								
							
						
					
					
						commit
						7f4c596af2
					
				
					 1 changed files with 32 additions and 1 deletions
				
			
		|  | @ -24,6 +24,8 @@ | ||||||
| #include "core/file_sys/vfs_layered.h" | #include "core/file_sys/vfs_layered.h" | ||||||
| #include "core/file_sys/vfs_vector.h" | #include "core/file_sys/vfs_vector.h" | ||||||
| #include "core/hle/service/filesystem/filesystem.h" | #include "core/hle/service/filesystem/filesystem.h" | ||||||
|  | #include "core/hle/service/ns/language.h" | ||||||
|  | #include "core/hle/service/set/set.h" | ||||||
| #include "core/loader/loader.h" | #include "core/loader/loader.h" | ||||||
| #include "core/loader/nso.h" | #include "core/loader/nso.h" | ||||||
| #include "core/memory/cheat_engine.h" | #include "core/memory/cheat_engine.h" | ||||||
|  | @ -623,8 +625,37 @@ PatchManager::Metadata PatchManager::ParseControlNCA(const NCA& nca) const { | ||||||
| 
 | 
 | ||||||
|     auto nacp = nacp_file == nullptr ? nullptr : std::make_unique<NACP>(nacp_file); |     auto nacp = nacp_file == nullptr ? nullptr : std::make_unique<NACP>(nacp_file); | ||||||
| 
 | 
 | ||||||
|  |     // Get language code from settings
 | ||||||
|  |     const auto language_code = | ||||||
|  |         Service::Set::GetLanguageCodeFromIndex(Settings::values.language_index.GetValue()); | ||||||
|  | 
 | ||||||
|  |     // Convert to application language and get priority list
 | ||||||
|  |     const auto application_language = | ||||||
|  |         Service::NS::ConvertToApplicationLanguage(language_code) | ||||||
|  |             .value_or(Service::NS::ApplicationLanguage::AmericanEnglish); | ||||||
|  |     const auto language_priority_list = | ||||||
|  |         Service::NS::GetApplicationLanguagePriorityList(application_language); | ||||||
|  | 
 | ||||||
|  |     // Convert to language names
 | ||||||
|  |     auto priority_language_names = FileSys::LANGUAGE_NAMES; // Copy
 | ||||||
|  |     if (language_priority_list) { | ||||||
|  |         for (size_t i = 0; i < priority_language_names.size(); ++i) { | ||||||
|  |             // Relies on FileSys::LANGUAGE_NAMES being in the same order as
 | ||||||
|  |             // Service::NS::ApplicationLanguage
 | ||||||
|  |             const auto language_index = static_cast<u8>(language_priority_list->at(i)); | ||||||
|  | 
 | ||||||
|  |             if (language_index < FileSys::LANGUAGE_NAMES.size()) { | ||||||
|  |                 priority_language_names[i] = FileSys::LANGUAGE_NAMES[language_index]; | ||||||
|  |             } else { | ||||||
|  |                 // Not a catastrophy, unlikely to happen
 | ||||||
|  |                 LOG_WARNING(Loader, "Invalid language index {}", language_index); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // Get first matching icon
 | ||||||
|     VirtualFile icon_file; |     VirtualFile icon_file; | ||||||
|     for (const auto& language : FileSys::LANGUAGE_NAMES) { |     for (const auto& language : priority_language_names) { | ||||||
|         icon_file = extracted->GetFile(std::string("icon_").append(language).append(".dat")); |         icon_file = extracted->GetFile(std::string("icon_").append(language).append(".dat")); | ||||||
|         if (icon_file != nullptr) { |         if (icon_file != nullptr) { | ||||||
|             break; |             break; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Keve1227
						Keve1227