From 0334a4f21743bf6a19c916356b7bf5df60dd8b0f Mon Sep 17 00:00:00 2001 From: Timothy Baldridge Date: Wed, 3 Nov 2021 21:43:20 -0600 Subject: [PATCH] Remove SelectAsync, replace with SelectMany --- Wabbajack.App/Extensions/IObservableExtensions.cs | 15 --------------- Wabbajack.App/Extensions/ReactiveUIExtensions.cs | 9 +++++++++ Wabbajack.App/Screens/LauncherViewModel.cs | 6 +++--- .../Screens/StandardInstallationView.axaml.cs | 8 ++++---- .../ViewModels/InstallConfigurationViewModel.cs | 12 ++++++------ 5 files changed, 22 insertions(+), 28 deletions(-) diff --git a/Wabbajack.App/Extensions/IObservableExtensions.cs b/Wabbajack.App/Extensions/IObservableExtensions.cs index f3a8ca9b..c28f9bf6 100644 --- a/Wabbajack.App/Extensions/IObservableExtensions.cs +++ b/Wabbajack.App/Extensions/IObservableExtensions.cs @@ -11,21 +11,6 @@ namespace Wabbajack.App.Extensions; public static class IObservableExtensions { - public static IObservable SelectAsync(this IObservable input, - CompositeDisposable disposable, - Func> func) - { - Subject returnObs = new(); - - input.Subscribe(x => Task.Run(async () => - { - var result = await func(x); - returnObs.OnNext(result); - })).DisposeWith(disposable); - - return returnObs; - } - public static IDisposable SimpleOneWayBind( this TView view, TViewModel? viewModel, diff --git a/Wabbajack.App/Extensions/ReactiveUIExtensions.cs b/Wabbajack.App/Extensions/ReactiveUIExtensions.cs index 50f47067..22b190a3 100644 --- a/Wabbajack.App/Extensions/ReactiveUIExtensions.cs +++ b/Wabbajack.App/Extensions/ReactiveUIExtensions.cs @@ -1,5 +1,14 @@ +using System; +using System.Reactive.Linq; +using Avalonia.Threading; +using ReactiveUI; + namespace Wabbajack.App.Extensions; public static class ReactiveUIExtensions { + public static IObservable OnUIThread(this IObservable src) + { + return src.ObserveOn(AvaloniaScheduler.Instance); + } } \ No newline at end of file diff --git a/Wabbajack.App/Screens/LauncherViewModel.cs b/Wabbajack.App/Screens/LauncherViewModel.cs index 58f5bbfc..f62793a5 100644 --- a/Wabbajack.App/Screens/LauncherViewModel.cs +++ b/Wabbajack.App/Screens/LauncherViewModel.cs @@ -35,14 +35,14 @@ public class LauncherViewModel : ViewModelBase _logger = logger; MessageBus.Current.Listen() - .Subscribe(v => Receive(v)) + .Subscribe(Receive) .DisposeWith(VMDisposables); this.WhenActivated(disposables => { this.WhenAnyValue(v => v.InstallFolder) - .SelectAsync(disposables, async folder => await manager.GetByInstallFolder(folder)) - .ObserveOn(RxApp.MainThreadScheduler) + .SelectMany(async folder => await manager.GetByInstallFolder(folder)) + .OnUIThread() .Where(v => v != null) .BindTo(this, vm => vm.Setting) .DisposeWith(disposables); diff --git a/Wabbajack.App/Screens/StandardInstallationView.axaml.cs b/Wabbajack.App/Screens/StandardInstallationView.axaml.cs index ddc5b185..c1e76e10 100644 --- a/Wabbajack.App/Screens/StandardInstallationView.axaml.cs +++ b/Wabbajack.App/Screens/StandardInstallationView.axaml.cs @@ -16,7 +16,7 @@ public partial class StandardInstallationView : ScreenBase { - this.Bind(ViewModel, vm => vm.Slide.Image, view => view.SlideImage.Source) + this.OneWayBind(ViewModel, vm => vm.Slide.Image, view => view.SlideImage.Source) .DisposeWith(disposables); this.BindCommand(ViewModel, vm => vm.NextCommand, view => view.NextSlide) @@ -31,13 +31,13 @@ public partial class StandardInstallationView : ScreenBase vm.PlayCommand, view => view.PlaySlides) .DisposeWith(disposables); - this.SimpleOneWayBind(ViewModel, vm => vm.StatusText, view => view.StatusText.Text) + this.OneWayBind(ViewModel, vm => vm.StatusText, view => view.StatusText.Text) .DisposeWith(disposables); - this.SimpleOneWayBind(ViewModel, vm => vm.StepsProgress, view => view.StepsProgress.Value, p => p.Value * 1000) + this.OneWayBind(ViewModel, vm => vm.StepsProgress, view => view.StepsProgress.Value, p => p.Value * 1000) .DisposeWith(disposables); - this.SimpleOneWayBind(ViewModel, vm => vm.StepProgress, p => p.StepProgress.Value, p => p.Value * 10000) + this.OneWayBind(ViewModel, vm => vm.StepProgress, p => p.StepProgress.Value, p => p.Value * 10000) .DisposeWith(disposables); }); diff --git a/Wabbajack.App/ViewModels/InstallConfigurationViewModel.cs b/Wabbajack.App/ViewModels/InstallConfigurationViewModel.cs index 47a9b587..d886a481 100644 --- a/Wabbajack.App/ViewModels/InstallConfigurationViewModel.cs +++ b/Wabbajack.App/ViewModels/InstallConfigurationViewModel.cs @@ -53,22 +53,22 @@ public class InstallConfigurationViewModel : ViewModelBase, IActivatableViewMode this.WhenAnyValue(t => t.ModListPath) .Where(t => t != default) - .SelectAsync(disposables, async x => await LoadModList(x)) - .Select(x => x) + .SelectMany(async x => await LoadModList(x)) + .OnUIThread() .ObserveOn(AvaloniaScheduler.Instance) .BindTo(this, t => t.ModList) .DisposeWith(disposables); this.WhenAnyValue(t => t.ModListPath) .Where(t => t != default) - .SelectAsync(disposables, async x => await LoadModListImage(x)) - .ObserveOn(AvaloniaScheduler.Instance) + .SelectMany(async x => await LoadModListImage(x)) + .OnUIThread() .BindTo(this, t => t.ModListImage) .DisposeWith(disposables); var settings = this.WhenAnyValue(t => t.ModListPath) - .SelectAsync(disposables, async v => await _stateManager.Get(v)) - .ObserveOn(RxApp.MainThreadScheduler) + .SelectMany(async v => await _stateManager.Get(v)) + .OnUIThread() .Where(s => s != null); settings.Select(s => s!.Install)