From b5edd9ce267f67e2e670e6dd00e46d95653f61ec Mon Sep 17 00:00:00 2001 From: Justin Swanson Date: Sat, 18 Jan 2020 22:37:21 -0600 Subject: [PATCH] ModListGallery loading error display --- Wabbajack/View Models/ModListGalleryVM.cs | 19 +++++++++++++++++-- Wabbajack/Views/ModListGalleryView.xaml | 10 ++++++++++ Wabbajack/Views/ModListGalleryView.xaml.cs | 16 ++++++++++++++-- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/Wabbajack/View Models/ModListGalleryVM.cs b/Wabbajack/View Models/ModListGalleryVM.cs index 5204b99c..1e108998 100644 --- a/Wabbajack/View Models/ModListGalleryVM.cs +++ b/Wabbajack/View Models/ModListGalleryVM.cs @@ -10,6 +10,8 @@ using System.Threading.Tasks; using DynamicData; using DynamicData.Binding; using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Wabbajack.Common; using Wabbajack.Lib; using Wabbajack.Lib.ModListRegistry; @@ -23,6 +25,9 @@ namespace Wabbajack private int missingHashFallbackCounter; + [Reactive] + public IErrorResponse Error { get; set; } + public ModListGalleryVM(MainWindowVM mainWindowVM) : base(mainWindowVM) { @@ -32,8 +37,18 @@ namespace Wabbajack .ObserveOn(RxApp.TaskpoolScheduler) .SelectTask(async _ => { - return (await ModlistMetadata.LoadFromGithub()) - .AsObservableChangeSet(x => x.DownloadMetadata?.Hash ?? $"Fallback{missingHashFallbackCounter++}"); + try + { + Error = null; + var list = await ModlistMetadata.LoadFromGithub(); + return list.AsObservableChangeSet(x => x.DownloadMetadata?.Hash ?? $"Fallback{missingHashFallbackCounter++}"); + } + catch (Exception ex) + { + Utils.Error(ex); + Error = ErrorResponse.Fail(ex); + return Observable.Empty>(); + } }) // Unsubscribe and release when not active .FlowSwitch( diff --git a/Wabbajack/Views/ModListGalleryView.xaml b/Wabbajack/Views/ModListGalleryView.xaml index 10f13906..853455d2 100644 --- a/Wabbajack/Views/ModListGalleryView.xaml +++ b/Wabbajack/Views/ModListGalleryView.xaml @@ -52,6 +52,16 @@ + x.ViewModel.ModLists) .BindToStrict(this, x => x.ModListGalleryControl.ItemsSource) .DisposeWith(dispose); - this.WhenAny(x => x.ViewModel.ModLists.Count) - .Select(x => x > 0 ? Visibility.Collapsed : Visibility.Visible) + Observable.CombineLatest( + this.WhenAny(x => x.ViewModel.ModLists.Count) + .Select(x => x > 0), + this.WhenAny(x => x.ViewModel.Error) + .Select(e => e?.Succeeded ?? true), + resultSelector: (hasContent, succeeded) => + { + return !hasContent && succeeded; + }) + .Select(x => x ? Visibility.Visible : Visibility.Collapsed) .BindToStrict(this, x => x.LoadingRing.Visibility) .DisposeWith(dispose); + this.WhenAny(x => x.ViewModel.Error) + .Select(e => (e?.Succeeded ?? true) ? Visibility.Collapsed : Visibility.Visible) + .BindToStrict(this, x => x.ErrorIcon.Visibility) + .DisposeWith(dispose); }); } }