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);
}
}