mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-01-02 10:43:31 +00:00
Workshop - Auto-enable plugins after installing them Workshop - Show the latest release above the details page
70 lines
2.9 KiB
C#
70 lines
2.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Artemis.UI.Screens.Workshop.Entries.Details;
|
|
using Artemis.UI.Screens.Workshop.EntryReleases;
|
|
using Artemis.UI.Screens.Workshop.Parameters;
|
|
using Artemis.UI.Shared.Routing;
|
|
using Artemis.WebClient.Workshop;
|
|
using PropertyChanged.SourceGenerator;
|
|
using StrawberryShake;
|
|
|
|
namespace Artemis.UI.Screens.Workshop.Profile;
|
|
|
|
public partial class ProfileDetailsViewModel : RoutableHostScreen<RoutableScreen, WorkshopDetailParameters>
|
|
{
|
|
private readonly IWorkshopClient _client;
|
|
private readonly ProfileDescriptionViewModel _profileDescriptionViewModel;
|
|
private readonly Func<IEntryDetails, EntryReleasesViewModel> _getEntryReleasesViewModel;
|
|
private readonly Func<IEntryDetails, EntryImagesViewModel> _getEntryImagesViewModel;
|
|
|
|
[Notify] private IEntryDetails? _entry;
|
|
[Notify] private EntryReleasesViewModel? _entryReleasesViewModel;
|
|
[Notify] private EntryImagesViewModel? _entryImagesViewModel;
|
|
|
|
public ProfileDetailsViewModel(IWorkshopClient client,
|
|
ProfileDescriptionViewModel profileDescriptionViewModel,
|
|
EntryInfoViewModel entryInfoViewModel,
|
|
Func<IEntryDetails, EntryReleasesViewModel> getEntryReleasesViewModel,
|
|
Func<IEntryDetails, EntryImagesViewModel> getEntryImagesViewModel)
|
|
{
|
|
_client = client;
|
|
_profileDescriptionViewModel = profileDescriptionViewModel;
|
|
_getEntryReleasesViewModel = getEntryReleasesViewModel;
|
|
_getEntryImagesViewModel = getEntryImagesViewModel;
|
|
|
|
EntryInfoViewModel = entryInfoViewModel;
|
|
RecycleScreen = false;
|
|
}
|
|
|
|
public override RoutableScreen DefaultScreen => _profileDescriptionViewModel;
|
|
public EntryInfoViewModel EntryInfoViewModel { get; }
|
|
|
|
public override async Task OnNavigating(WorkshopDetailParameters parameters, NavigationArguments args, CancellationToken cancellationToken)
|
|
{
|
|
if (Entry?.Id != parameters.EntryId)
|
|
await GetEntry(parameters.EntryId, cancellationToken);
|
|
}
|
|
|
|
private async Task GetEntry(long entryId, CancellationToken cancellationToken)
|
|
{
|
|
Task grace = Task.Delay(300, cancellationToken);
|
|
IOperationResult<IGetEntryByIdResult> result = await _client.GetEntryById.ExecuteAsync(entryId, cancellationToken);
|
|
if (result.IsErrorResult())
|
|
return;
|
|
|
|
// Let the UI settle to avoid lag when deep linking
|
|
await grace;
|
|
|
|
Entry = result.Data?.Entry;
|
|
EntryInfoViewModel.SetEntry(Entry);
|
|
EntryReleasesViewModel = Entry != null ? _getEntryReleasesViewModel(Entry) : null;
|
|
EntryImagesViewModel = Entry != null ? _getEntryImagesViewModel(Entry) : null;
|
|
|
|
await _profileDescriptionViewModel.SetEntry(Entry, cancellationToken);
|
|
_profileDescriptionViewModel.ReleaseInfoViewModel.Release = result.Data?.Entry?.LatestRelease;
|
|
}
|
|
} |