using System; using System.Threading; using System.Threading.Tasks; using Artemis.UI.Screens.Workshop.Entries.Details; 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.Plugin; public partial class PluginDetailsViewModel : RoutableScreen { private readonly IWorkshopClient _client; private readonly Func _getEntryInfoViewModel; private readonly Func _getEntryReleasesViewModel; private readonly Func _getEntryImagesViewModel; [Notify] private IGetEntryById_Entry? _entry; [Notify] private EntryInfoViewModel? _entryInfoViewModel; [Notify] private EntryReleasesViewModel? _entryReleasesViewModel; [Notify] private EntryImagesViewModel? _entryImagesViewModel; public PluginDetailsViewModel(IWorkshopClient client, Func getEntryInfoViewModel, Func getEntryReleasesViewModel, Func getEntryImagesViewModel) { _client = client; _getEntryInfoViewModel = getEntryInfoViewModel; _getEntryReleasesViewModel = getEntryReleasesViewModel; _getEntryImagesViewModel = getEntryImagesViewModel; } public override async Task OnNavigating(WorkshopDetailParameters parameters, NavigationArguments args, CancellationToken cancellationToken) { await GetEntry(parameters.EntryId, cancellationToken); } private async Task GetEntry(long entryId, CancellationToken cancellationToken) { IOperationResult result = await _client.GetEntryById.ExecuteAsync(entryId, cancellationToken); if (result.IsErrorResult()) return; Entry = result.Data?.Entry; if (Entry == null) { EntryInfoViewModel = null; EntryReleasesViewModel = null; } else { EntryInfoViewModel = _getEntryInfoViewModel(Entry); EntryReleasesViewModel = _getEntryReleasesViewModel(Entry); EntryImagesViewModel = _getEntryImagesViewModel(Entry); } } }