mirror of
https://github.com/wangdage12/Snap.Hutao.git
synced 2026-03-28 12:35:16 +08:00
fix #26
This commit is contained in:
@@ -38,6 +38,15 @@ internal sealed partial class GachaLogService : IGachaLogService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async ValueTask<IAdvancedDbCollectionView<GachaArchive>> RefreshArchiveCollectionAsync()
|
||||||
|
{
|
||||||
|
using (await archivesLock.LockAsync().ConfigureAwait(false))
|
||||||
|
{
|
||||||
|
archives = null;
|
||||||
|
return archives = gachaLogRepository.GetGachaArchiveCollection().ToAdvancedDbCollectionView(serviceProvider);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async ValueTask<GachaStatistics> GetStatisticsAsync(GachaLogServiceMetadataContext context, GachaArchive archive)
|
public async ValueTask<GachaStatistics> GetStatisticsAsync(GachaLogServiceMetadataContext context, GachaArchive archive)
|
||||||
{
|
{
|
||||||
using (ValueStopwatch.MeasureExecution(logger))
|
using (ValueStopwatch.MeasureExecution(logger))
|
||||||
|
|||||||
@@ -22,4 +22,6 @@ internal interface IGachaLogService
|
|||||||
ValueTask RemoveArchiveAsync(GachaArchive archive);
|
ValueTask RemoveArchiveAsync(GachaArchive archive);
|
||||||
|
|
||||||
ValueTask<IAdvancedDbCollectionView<GachaArchive>> GetArchiveCollectionAsync();
|
ValueTask<IAdvancedDbCollectionView<GachaArchive>> GetArchiveCollectionAsync();
|
||||||
|
|
||||||
|
ValueTask<IAdvancedDbCollectionView<GachaArchive>> RefreshArchiveCollectionAsync();
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,7 @@ using Snap.Hutao.Core.ExceptionService;
|
|||||||
using Snap.Hutao.Model.Entity;
|
using Snap.Hutao.Model.Entity;
|
||||||
using Snap.Hutao.Model.InterChange.GachaLog;
|
using Snap.Hutao.Model.InterChange.GachaLog;
|
||||||
using Snap.Hutao.Service.GachaLog;
|
using Snap.Hutao.Service.GachaLog;
|
||||||
|
using Snap.Hutao.ViewModel.GachaLog;
|
||||||
using Snap.Hutao.Web.Hoyolab.Hk4e.Event.GachaInfo;
|
using Snap.Hutao.Web.Hoyolab.Hk4e.Event.GachaInfo;
|
||||||
using System.Collections.Immutable;
|
using System.Collections.Immutable;
|
||||||
|
|
||||||
@@ -13,6 +14,7 @@ internal abstract partial class AbstractUIGF40ImportService : IUIGFImportService
|
|||||||
{
|
{
|
||||||
private readonly IServiceProvider serviceProvider;
|
private readonly IServiceProvider serviceProvider;
|
||||||
private readonly ITaskContext taskContext;
|
private readonly ITaskContext taskContext;
|
||||||
|
private readonly IMessenger messenger;
|
||||||
|
|
||||||
[GeneratedConstructor]
|
[GeneratedConstructor]
|
||||||
public partial AbstractUIGF40ImportService(IServiceProvider serviceProvider);
|
public partial AbstractUIGF40ImportService(IServiceProvider serviceProvider);
|
||||||
@@ -21,6 +23,7 @@ internal abstract partial class AbstractUIGF40ImportService : IUIGFImportService
|
|||||||
{
|
{
|
||||||
await taskContext.SwitchToBackgroundAsync();
|
await taskContext.SwitchToBackgroundAsync();
|
||||||
ImportGachaArchives(importOptions.UIGF.Hk4e, importOptions.GachaArchiveUids);
|
ImportGachaArchives(importOptions.UIGF.Hk4e, importOptions.GachaArchiveUids);
|
||||||
|
messenger.Send(GachaLogImportedMessage.Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ImportGachaArchives(ImmutableArray<UIGFEntry<Hk4eItem>> entries, HashSet<uint> uids)
|
private void ImportGachaArchives(ImmutableArray<UIGFEntry<Hk4eItem>> entries, HashSet<uint> uids)
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
// Copyright (c) DGP Studio. All rights reserved.
|
||||||
|
// Licensed under the MIT license.
|
||||||
|
|
||||||
|
namespace Snap.Hutao.ViewModel.GachaLog;
|
||||||
|
|
||||||
|
internal sealed class GachaLogImportedMessage
|
||||||
|
{
|
||||||
|
public static readonly GachaLogImportedMessage Empty = new();
|
||||||
|
|
||||||
|
private GachaLogImportedMessage()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,7 +26,7 @@ namespace Snap.Hutao.ViewModel.GachaLog;
|
|||||||
|
|
||||||
[BindableCustomPropertyProvider]
|
[BindableCustomPropertyProvider]
|
||||||
[Service(ServiceLifetime.Scoped)]
|
[Service(ServiceLifetime.Scoped)]
|
||||||
internal sealed partial class GachaLogViewModel : Abstraction.ViewModel
|
internal sealed partial class GachaLogViewModel : Abstraction.ViewModel, IRecipient<GachaLogImportedMessage>
|
||||||
{
|
{
|
||||||
private readonly IContentDialogFactory contentDialogFactory;
|
private readonly IContentDialogFactory contentDialogFactory;
|
||||||
private readonly IServiceProvider serviceProvider;
|
private readonly IServiceProvider serviceProvider;
|
||||||
@@ -127,6 +127,22 @@ internal sealed partial class GachaLogViewModel : Abstraction.ViewModel
|
|||||||
UpdateStatisticsAsync(Archives?.CurrentItem).SafeForget();
|
UpdateStatisticsAsync(Archives?.CurrentItem).SafeForget();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async void Receive(GachaLogImportedMessage message)
|
||||||
|
{
|
||||||
|
await RefreshArchiveCollectionAsync().ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async ValueTask RefreshArchiveCollectionAsync()
|
||||||
|
{
|
||||||
|
using (await EnterCriticalSectionAsync().ConfigureAwait(false))
|
||||||
|
{
|
||||||
|
IAdvancedDbCollectionView<GachaArchive> archives = await gachaLogService.RefreshArchiveCollectionAsync().ConfigureAwait(false);
|
||||||
|
await taskContext.SwitchToMainThreadAsync();
|
||||||
|
Archives = archives;
|
||||||
|
Archives.MoveCurrentTo(Archives.Source.SelectedOrFirstOrDefault());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Command("RefreshByWebCacheCommand")]
|
[Command("RefreshByWebCacheCommand")]
|
||||||
private async Task RefreshByWebCacheAsync()
|
private async Task RefreshByWebCacheAsync()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user