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:
parent
1146049de0
commit
cf946312ca
|
@ -1244,13 +1244,24 @@ void GMainWindow::OnGameListOpenFolder(u64 program_id, GameListOpenTarget target
|
||||||
std::string path;
|
std::string path;
|
||||||
QString open_target;
|
QString open_target;
|
||||||
|
|
||||||
|
const auto [user_save_size, device_save_size] = [this, &program_id, &game_path] {
|
||||||
FileSys::PatchManager pm{program_id};
|
FileSys::PatchManager pm{program_id};
|
||||||
const auto control = pm.GetControlMetadata();
|
const auto control = pm.GetControlMetadata().first;
|
||||||
const auto v_file = Core::GetGameFileFromPath(vfs, game_path);
|
if (control != nullptr) {
|
||||||
const auto loader = Loader::GetLoader(v_file);
|
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