diff --git a/CollapseLauncher/Classes/Properties/InnerLauncherConfig.cs b/CollapseLauncher/Classes/Properties/InnerLauncherConfig.cs index c87a355b2..21586ce22 100644 --- a/CollapseLauncher/Classes/Properties/InnerLauncherConfig.cs +++ b/CollapseLauncher/Classes/Properties/InnerLauncherConfig.cs @@ -241,24 +241,54 @@ public static void SaveLocalNotificationData() public static async Task LoadLocalNotificationData() { - await using FileStream fileStream = File.Open(AppNotifIgnoreFile, FileMode.OpenOrCreate, FileAccess.ReadWrite); - if (!File.Exists(AppNotifIgnoreFile)) + FileStream? fileStream = null; + + bool forceCreate = false; + while (true) { - await new NotificationPush().SerializeAsync(fileStream, NotificationPushJsonContext.Default.NotificationPush).ConfigureAwait(false); - } + try + { + fileStream = File.Open(AppNotifIgnoreFile, forceCreate ? FileMode.Create : FileMode.OpenOrCreate, FileAccess.ReadWrite); + if (fileStream.Length == 0) + { + await new NotificationPush() + .SerializeAsync(fileStream, NotificationPushJsonContext.Default.NotificationPush) + .ConfigureAwait(false); + } - fileStream.Position = 0; - NotificationPush? localNotificationData = await fileStream.DeserializeAsync(NotificationPushJsonContext.Default.NotificationPush).ConfigureAwait(false); + fileStream.Position = 0; + NotificationPush? localNotificationData = await fileStream + .DeserializeAsync(NotificationPushJsonContext.Default.NotificationPush) + .ConfigureAwait(false); - if (NotificationData == null) - { - return; - } + if (NotificationData == null) + { + return; + } + + NotificationData.AppPushIgnoreMsgIds = localNotificationData?.AppPushIgnoreMsgIds; + NotificationData.RegionPushIgnoreMsgIds = localNotificationData?.RegionPushIgnoreMsgIds; + NotificationData.CurrentShowMsgIds = localNotificationData?.CurrentShowMsgIds; + NotificationData.EliminatePushList(); - NotificationData.AppPushIgnoreMsgIds = localNotificationData?.AppPushIgnoreMsgIds; - NotificationData.RegionPushIgnoreMsgIds = localNotificationData?.RegionPushIgnoreMsgIds; - NotificationData.CurrentShowMsgIds = localNotificationData?.CurrentShowMsgIds; - NotificationData.EliminatePushList(); + return; + } + catch + { + if (forceCreate) + { + throw; + } + forceCreate = true; + } + finally + { + if (fileStream != null) + { + await fileStream.DisposeAsync(); + } + } + } } } } \ No newline at end of file