mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-30 15:39:02 -05:00 
			
		
		
		
	main: Fallback to loader if no control nca is found with patch manager
In some rare instances, the patch manager is not able to find a control nca, fallback to the previous method of parsing a control nca through the loader if this occurs.
This commit is contained in:
		| @@ -1244,13 +1244,24 @@ void GMainWindow::OnGameListOpenFolder(u64 program_id, GameListOpenTarget target | |||||||
|     std::string path; |     std::string path; | ||||||
|     QString open_target; |     QString open_target; | ||||||
|  |  | ||||||
|     FileSys::PatchManager pm{program_id}; |     const auto [user_save_size, device_save_size] = [this, &program_id, &game_path] { | ||||||
|     const auto control = pm.GetControlMetadata(); |         FileSys::PatchManager pm{program_id}; | ||||||
|     const auto v_file = Core::GetGameFileFromPath(vfs, game_path); |         const auto control = pm.GetControlMetadata().first; | ||||||
|     const auto loader = Loader::GetLoader(v_file); |         if (control != nullptr) { | ||||||
|  |             return std::make_pair(control->GetDefaultNormalSaveSize(), | ||||||
|  |                                   control->GetDeviceSaveDataSize()); | ||||||
|  |         } else { | ||||||
|  |             const auto file = Core::GetGameFileFromPath(vfs, game_path); | ||||||
|  |             const auto loader = Loader::GetLoader(file); | ||||||
|  |  | ||||||
|     const bool has_user_save{control.first->GetDefaultNormalSaveSize() > 0}; |             FileSys::NACP nacp{}; | ||||||
|     const bool has_device_save{control.first->GetDeviceSaveDataSize() > 0}; |             loader->ReadControlData(nacp); | ||||||
|  |             return std::make_pair(nacp.GetDefaultNormalSaveSize(), nacp.GetDeviceSaveDataSize()); | ||||||
|  |         } | ||||||
|  |     }(); | ||||||
|  |  | ||||||
|  |     const bool has_user_save{user_save_size > 0}; | ||||||
|  |     const bool has_device_save{device_save_size > 0}; | ||||||
|  |  | ||||||
|     ASSERT_MSG(has_user_save != has_device_save, "Game uses both user and device savedata?"); |     ASSERT_MSG(has_user_save != has_device_save, "Game uses both user and device savedata?"); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Morph
					Morph