From d5b668cb8d00be0b1c3f0af0a328eb5a98d7118a Mon Sep 17 00:00:00 2001 From: Lightczx <1686188646@qq.com> Date: Fri, 7 Apr 2023 16:41:57 +0800 Subject: [PATCH] fix cloud gacha download crash --- .../Extension/EnumerableExtension.Collection.cs | 14 ++++++++++++++ .../Snap.Hutao/Service/GachaLog/GachaLogService.cs | 4 ++-- .../ViewModel/GachaLog/GachaLogViewModel.cs | 1 + 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/Snap.Hutao/Snap.Hutao/Extension/EnumerableExtension.Collection.cs b/src/Snap.Hutao/Snap.Hutao/Extension/EnumerableExtension.Collection.cs index 44acaee3..f1487570 100644 --- a/src/Snap.Hutao/Snap.Hutao/Extension/EnumerableExtension.Collection.cs +++ b/src/Snap.Hutao/Snap.Hutao/Extension/EnumerableExtension.Collection.cs @@ -10,6 +10,20 @@ namespace Snap.Hutao.Extension; /// internal static partial class EnumerableExtension { + /// + /// 尝试添加物品 + /// + /// 物品类型 + /// 集合 + /// 物品 + public static void AddIfNotContains(this Collection collection, T item) + { + if (!collection.Contains(item)) + { + collection.Add(item); + } + } + /// /// 移除集合中满足条件的项 /// diff --git a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaLogService.cs b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaLogService.cs index 3772b6c3..04f01d78 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaLogService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaLogService.cs @@ -311,7 +311,7 @@ internal sealed class GachaLogService : IGachaLogService { if (archive == null) { - archive = appDbContext.GachaArchives.SingleOrDefault(a => a.Uid == uid); + archive = appDbContext.GachaArchives.AsNoTracking().SingleOrDefault(a => a.Uid == uid); if (archive == null) { @@ -320,7 +320,7 @@ internal sealed class GachaLogService : IGachaLogService // System.InvalidOperationException: Sequence contains no elements // ? how this happen here? - archive = appDbContext.GachaArchives.Single(a => a.Uid == uid); + archive = appDbContext.GachaArchives.AsNoTracking().Single(a => a.Uid == uid); GachaArchive temp = archive; ThreadHelper.InvokeOnMainThread(() => archiveCollection!.Add(temp)); } diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/GachaLog/GachaLogViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/GachaLog/GachaLogViewModel.cs index 656011cb..0a6ca61d 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/GachaLog/GachaLogViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/GachaLog/GachaLogViewModel.cs @@ -321,6 +321,7 @@ internal sealed class GachaLogViewModel : Abstraction.ViewModel if (isOk) { await ThreadHelper.SwitchToMainThreadAsync(); + Archives?.AddIfNotContains(archive!); SetSelectedArchiveAndUpdateStatistics(archive, true); } }