From 1b93cbdebe69bb53314eeaa1b94ef402940fcd09 Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 27 Aug 2020 13:36:20 -0500 Subject: [PATCH] Crash fix Fix crash when a user has no detected Warcraft installs. --- WowUp.Common/Enums/WowClientType.cs | 3 +- .../AddonProviders/CurseAddonProvider.cs | 6 ++- .../AddonProviders/TukUiAddonProvider.cs | 6 ++- WowUp.WPF/MainWindow.xaml | 19 ++++----- WowUp.WPF/MainWindow.xaml.cs | 5 --- WowUp.WPF/Services/SessionService.cs | 3 +- WowUp.WPF/Services/WarcraftService.cs | 8 ++++ WowUp.WPF/ViewModels/AddonsViewViewModel.cs | 5 +++ WowUp.WPF/ViewModels/GetAddonsViewModel.cs | 40 ++++++++++++------- WowUp.WPF/ViewModels/MainWindowViewModel.cs | 3 +- WowUp.WPF/WowUp.WPF.csproj | 1 + 11 files changed, 59 insertions(+), 40 deletions(-) diff --git a/WowUp.Common/Enums/WowClientType.cs b/WowUp.Common/Enums/WowClientType.cs index 3bf3423d..a54f75c2 100644 --- a/WowUp.Common/Enums/WowClientType.cs +++ b/WowUp.Common/Enums/WowClientType.cs @@ -13,6 +13,7 @@ namespace WowUp.Common.Enums [Display(Name = "Classic PTR")] ClassicPtr, [Display(Name = "Beta")] - Beta + Beta, + None } } diff --git a/WowUp.WPF/AddonProviders/CurseAddonProvider.cs b/WowUp.WPF/AddonProviders/CurseAddonProvider.cs index 6673a28f..606ce0c5 100644 --- a/WowUp.WPF/AddonProviders/CurseAddonProvider.cs +++ b/WowUp.WPF/AddonProviders/CurseAddonProvider.cs @@ -570,8 +570,9 @@ namespace WowUp.WPF.AddonProviders case WowClientType.Retail: case WowClientType.RetailPtr: case WowClientType.Beta: - default: return RetailGameVersionFlavor == gameVesionFlavor; + default: + return false; } } @@ -585,8 +586,9 @@ namespace WowUp.WPF.AddonProviders case WowClientType.Retail: case WowClientType.RetailPtr: case WowClientType.Beta: - default: return RetailGameVersionFlavor; + default: + return string.Empty; } } } diff --git a/WowUp.WPF/AddonProviders/TukUiAddonProvider.cs b/WowUp.WPF/AddonProviders/TukUiAddonProvider.cs index a862e68c..abcff6bb 100644 --- a/WowUp.WPF/AddonProviders/TukUiAddonProvider.cs +++ b/WowUp.WPF/AddonProviders/TukUiAddonProvider.cs @@ -294,8 +294,9 @@ namespace WowUp.WPF.AddonProviders case WowClientType.Retail: case WowClientType.RetailPtr: case WowClientType.Beta: - default: return "tukui_addons"; + default: + return string.Empty; } } @@ -309,8 +310,9 @@ namespace WowUp.WPF.AddonProviders case WowClientType.Retail: case WowClientType.RetailPtr: case WowClientType.Beta: - default: return "addons"; + default: + return string.Empty; } } diff --git a/WowUp.WPF/MainWindow.xaml b/WowUp.WPF/MainWindow.xaml index 4f13264e..3f0d7762 100644 --- a/WowUp.WPF/MainWindow.xaml +++ b/WowUp.WPF/MainWindow.xaml @@ -115,9 +115,13 @@ VerticalAlignment="Center" HorizontalAlignment="Center"> - - - + + - diff --git a/WowUp.WPF/MainWindow.xaml.cs b/WowUp.WPF/MainWindow.xaml.cs index 499f8cbc..46d799d7 100644 --- a/WowUp.WPF/MainWindow.xaml.cs +++ b/WowUp.WPF/MainWindow.xaml.cs @@ -172,11 +172,6 @@ namespace WowUp.WPF _viewModel.SetRestoreMaximizeVisibility(WindowState); } - private void SelectWowButton_Click(object sender, RoutedEventArgs e) - { - _viewModel.SelectWowCommand.Execute(this); - } - private void Window_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) { } diff --git a/WowUp.WPF/Services/SessionService.cs b/WowUp.WPF/Services/SessionService.cs index 7b631a88..88be6be8 100644 --- a/WowUp.WPF/Services/SessionService.cs +++ b/WowUp.WPF/Services/SessionService.cs @@ -16,7 +16,8 @@ namespace WowUp.WPF.Services public SessionService( IWarcraftService warcraftService) { - var initialClientType = warcraftService.GetWowClientTypes().First(); + var installedClientTypes = warcraftService.GetWowClientTypes(); + var initialClientType = installedClientTypes.Any() ? installedClientTypes.First() : WowClientType.None; _sessionState = new SessionState { diff --git a/WowUp.WPF/Services/WarcraftService.cs b/WowUp.WPF/Services/WarcraftService.cs index 3b8530e6..023ee672 100644 --- a/WowUp.WPF/Services/WarcraftService.cs +++ b/WowUp.WPF/Services/WarcraftService.cs @@ -148,12 +148,15 @@ namespace WowUp.WPF.Services public IList GetClientLocations() { + return new List(); + var clientTypes = EnumExtensions.Values(); return clientTypes.Select(clientType => GetClientLocation(clientType)).ToList(); } public IList GetWowClientTypes() { + return new List(); IList clients = new List(); var clientTypes = EnumExtensions.Values(); @@ -216,6 +219,11 @@ namespace WowUp.WPF.Services public async Task> ListAddons(WowClientType clientType) { + if(clientType == WowClientType.None) + { + return new List(); + } + var addons = new List(); var addonsPath = GetAddonFolderPath(clientType); diff --git a/WowUp.WPF/ViewModels/AddonsViewViewModel.cs b/WowUp.WPF/ViewModels/AddonsViewViewModel.cs index a5a68fe7..33f32ebb 100644 --- a/WowUp.WPF/ViewModels/AddonsViewViewModel.cs +++ b/WowUp.WPF/ViewModels/AddonsViewViewModel.cs @@ -164,6 +164,11 @@ namespace WowUp.WPF.ViewModels foreach(var clientType in _warcraftService.GetWowClientTypes()) { + if(clientType == WowClientType.None) + { + continue; + } + ClientTypeNames.Add(clientType); } } diff --git a/WowUp.WPF/ViewModels/GetAddonsViewModel.cs b/WowUp.WPF/ViewModels/GetAddonsViewModel.cs index f1a90586..d82fe1f3 100644 --- a/WowUp.WPF/ViewModels/GetAddonsViewModel.cs +++ b/WowUp.WPF/ViewModels/GetAddonsViewModel.cs @@ -190,27 +190,37 @@ namespace WowUp.WPF.ViewModels { IsBusy = true; - _popularAddons = await _addonService.GetFeaturedAddons(SelectedClientType); - - lock (DisplayAddonsLock) + try { - DisplayAddons.Clear(); - foreach (var addon in _popularAddons) + if(SelectedClientType == WowClientType.None) { - if (_addonService.IsInstalled(addon.ExternalId, SelectedClientType)) + return; + } + + _popularAddons = await _addonService.GetFeaturedAddons(SelectedClientType); + + lock (DisplayAddonsLock) + { + DisplayAddons.Clear(); + foreach (var addon in _popularAddons) { - continue; + if (_addonService.IsInstalled(addon.ExternalId, SelectedClientType)) + { + continue; + } + + var viewModel = _serviceProvider.GetService(); + viewModel.Addon = addon; + viewModel.ClientType = SelectedClientType; + + DisplayAddons.Add(viewModel); } - - var viewModel = _serviceProvider.GetService(); - viewModel.Addon = addon; - viewModel.ClientType = SelectedClientType; - - DisplayAddons.Add(viewModel); } } - - IsBusy = false; + finally + { + IsBusy = false; + } } } } diff --git a/WowUp.WPF/ViewModels/MainWindowViewModel.cs b/WowUp.WPF/ViewModels/MainWindowViewModel.cs index f5ea28d6..edcba04f 100644 --- a/WowUp.WPF/ViewModels/MainWindowViewModel.cs +++ b/WowUp.WPF/ViewModels/MainWindowViewModel.cs @@ -104,7 +104,6 @@ namespace WowUp.WPF.ViewModels migrationService.MigrateDatabase(); InitializeView(); - } public void SetRestoreMaximizeVisibility(WindowState windowState) @@ -194,7 +193,7 @@ namespace WowUp.WPF.ViewModels private void CreateTabs() { - var tabStyle = System.Windows.Application.Current.TryFindResource("CustomTabItemStyle") as Style; + var tabStyle = Application.Current.TryFindResource("CustomTabItemStyle") as Style; var addonsTab = new TabItem { diff --git a/WowUp.WPF/WowUp.WPF.csproj b/WowUp.WPF/WowUp.WPF.csproj index cfb4c588..3e7a04c1 100644 --- a/WowUp.WPF/WowUp.WPF.csproj +++ b/WowUp.WPF/WowUp.WPF.csproj @@ -17,6 +17,7 @@ World of Warcraft addon updater https://github.com/jliddev/WowUp app.manifest + true