From a3519cc56e37539507377cbcd2e5a3f7bce893e7 Mon Sep 17 00:00:00 2001 From: jliddev Date: Sun, 16 Aug 2020 21:21:25 -0500 Subject: [PATCH] Use proper locks Use the correct observable locks, --- .../ViewModels/AddonListItemViewModel.cs | 3 +- WowUp.WPF/ViewModels/AddonsViewViewModel.cs | 52 ++++++++++--------- 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/WowUp.WPF/ViewModels/AddonListItemViewModel.cs b/WowUp.WPF/ViewModels/AddonListItemViewModel.cs index 7a3489aa..76bb71a5 100644 --- a/WowUp.WPF/ViewModels/AddonListItemViewModel.cs +++ b/WowUp.WPF/ViewModels/AddonListItemViewModel.cs @@ -325,7 +325,7 @@ namespace WowUp.WPF.ViewModels } catch (Exception ex) { - Console.WriteLine(ex); + Log.Error("Failed to update addon", ex); ShowUpdateButton = true; } } @@ -334,6 +334,7 @@ namespace WowUp.WPF.ViewModels { ShowStatusText = false; ShowInstallButton = false; + ShowUpdateButton = false; try { diff --git a/WowUp.WPF/ViewModels/AddonsViewViewModel.cs b/WowUp.WPF/ViewModels/AddonsViewViewModel.cs index 75031f81..45d6b689 100644 --- a/WowUp.WPF/ViewModels/AddonsViewViewModel.cs +++ b/WowUp.WPF/ViewModels/AddonsViewViewModel.cs @@ -20,7 +20,6 @@ namespace WowUp.WPF.ViewModels { private static readonly object ClientNamesLock = new object(); private static readonly object DisplayAddonsLock = new object(); - private static readonly object LoadLock = new object(); private readonly IServiceProvider _serviceProvider; private readonly IWarcraftService _warcraftService; @@ -137,18 +136,21 @@ namespace WowUp.WPF.ViewModels private void SetClientNames() { - ClientNames.Clear(); - - _clientTypes = _warcraftService.GetWowClientTypes(); - _clientNames = _warcraftService.GetWowClientNames(); - - for (var i = 0; i < _clientNames.Count; i += 1) + lock (ClientNamesLock) { - var clientName = _clientNames[i]; - ClientNames.Add(new ComboBoxItem + ClientNames.Clear(); + + _clientTypes = _warcraftService.GetWowClientTypes(); + _clientNames = _warcraftService.GetWowClientNames(); + + for (var i = 0; i < _clientNames.Count; i += 1) { - Content = clientName - }); + var clientName = _clientNames[i]; + ClientNames.Add(new ComboBoxItem + { + Content = clientName + }); + } } SelectedWowIndex = 0; @@ -188,7 +190,7 @@ namespace WowUp.WPF.ViewModels try { - await DisplayAddons + await DisplayAddons.ToList() .Where(addon => addon.IsAutoUpdated && (addon.CanUpdate || addon.CanInstall)) .ForEachAsync(2, async addon => { @@ -279,24 +281,24 @@ namespace WowUp.WPF.ViewModels private void AddAddonListItem(Addon addon) { - lock (LoadLock) + try { - try + if (DisplayAddons.Any(da => da.Addon.Id == addon.Id)) { - if (DisplayAddons.Any(da => da.Addon.Id == addon.Id)) - { - return; - } + return; + } - var viewModel = GetAddonViewModel(addon); + var viewModel = GetAddonViewModel(addon); + lock (DisplayAddonsLock) + { DisplayAddons.Add(viewModel); SortAddons(DisplayAddons); } - finally - { - EnableUpdateAll = DisplayAddons.Any(addon => addon.CanUpdate || addon.CanInstall); - } + } + finally + { + EnableUpdateAll = DisplayAddons.Any(addon => addon.CanUpdate || addon.CanInstall); } } @@ -312,7 +314,7 @@ namespace WowUp.WPF.ViewModels private void RemoveAddonListItem(Addon addon) { - lock (LoadLock) + lock (DisplayAddonsLock) { DisplayAddons.Remove(DisplayAddons.First(da => addon.Id == da.Addon.Id)); } @@ -320,7 +322,7 @@ namespace WowUp.WPF.ViewModels private void UpdateDisplayAddons(IList addons) { - lock (LoadLock) + lock (DisplayAddonsLock) { DisplayAddons.Clear();