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<IChangeSet<ModlistMetadata, string>>(); + } }) // 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 @@ </ScrollViewer> </Border> <mahapps:ProgressRing x:Name="LoadingRing" Grid.Row="1" /> + <iconPacks:PackIconControl + x:Name="ErrorIcon" + Grid.Row="1" + Width="55" + Height="55" + HorizontalAlignment="Center" + VerticalAlignment="Center" + Foreground="{StaticResource ErrorBrush}" + Kind="{x:Static iconPacks:PackIconMaterialKind.AlertCircle}" + ToolTip="Error loading modlist gallery" /> <local:TopProgressView Title="Browsing Modlists" Grid.Row="0" diff --git a/Wabbajack/Views/ModListGalleryView.xaml.cs b/Wabbajack/Views/ModListGalleryView.xaml.cs index 83dd9f72..4e73dbb0 100644 --- a/Wabbajack/Views/ModListGalleryView.xaml.cs +++ b/Wabbajack/Views/ModListGalleryView.xaml.cs @@ -23,10 +23,22 @@ namespace Wabbajack this.WhenAny(x => 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); }); } }