From dd7a924596ff5925baa8b7f3ec85ceda8cb1cd8a Mon Sep 17 00:00:00 2001 From: Phi <7350221+PhiZero@users.noreply.github.com> Date: Sat, 21 Jan 2023 01:36:57 +0100 Subject: [PATCH] Catch Profile.json parse to prevent crash on launch (#3393) * Catch Profile.json parse to prevent crash on launch * Update Ryujinx.HLE/HOS/Services/Account/Acc/AccountSaveDataManager.cs Co-authored-by: Ac_K Co-authored-by: PhiZero Co-authored-by: Ac_K --- .../Account/Acc/AccountSaveDataManager.cs | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/Ryujinx.HLE/HOS/Services/Account/Acc/AccountSaveDataManager.cs b/Ryujinx.HLE/HOS/Services/Account/Acc/AccountSaveDataManager.cs index 44ef3f335..3bd0e2da4 100644 --- a/Ryujinx.HLE/HOS/Services/Account/Acc/AccountSaveDataManager.cs +++ b/Ryujinx.HLE/HOS/Services/Account/Acc/AccountSaveDataManager.cs @@ -1,5 +1,7 @@ using Ryujinx.Common.Configuration; using Ryujinx.Common.Utilities; +using Ryujinx.Common.Logging; +using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; @@ -43,16 +45,25 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc if (File.Exists(_profilesJsonPath)) { - ProfilesJson profilesJson = JsonHelper.DeserializeFromFile(_profilesJsonPath); - - foreach (var profile in profilesJson.Profiles) + try { - UserProfile addedProfile = new UserProfile(new UserId(profile.UserId), profile.Name, profile.Image, profile.LastModifiedTimestamp); + ProfilesJson profilesJson = JsonHelper.DeserializeFromFile(_profilesJsonPath); - profiles.AddOrUpdate(profile.UserId, addedProfile, (key, old) => addedProfile); + foreach (var profile in profilesJson.Profiles) + { + UserProfile addedProfile = new UserProfile(new UserId(profile.UserId), profile.Name, profile.Image, profile.LastModifiedTimestamp); + + profiles.AddOrUpdate(profile.UserId, addedProfile, (key, old) => addedProfile); + } + + LastOpened = new UserId(profilesJson.LastOpened); } + catch (Exception e) + { + Logger.Error?.Print(LogClass.Application, $"Failed to parse {_profilesJsonPath}: {e.Message} Loading default profile!"); - LastOpened = new UserId(profilesJson.LastOpened); + LastOpened = AccountManager.DefaultUserId; + } } else {