diff --git a/WowUp.WPF/Assets/changelog.json b/WowUp.WPF/Assets/changelog.json index 67d97deb..7e514000 100644 --- a/WowUp.WPF/Assets/changelog.json +++ b/WowUp.WPF/Assets/changelog.json @@ -1,5 +1,9 @@ { "ChangeLogs": [ + { + "Version": "1.17.1", + "Description": "Fix a visual bug where auto updated addons were not shown up to date on the My Addons page." + }, { "Version": "1.17.0", "Description": "Auto updates should function more like you would expect.\nSystem Notifications should appear when addons are auto updated.\nRe-Scan is now less desctructive, should preserve channels and auto update state.\nAdd the ability to update multiple clients at once by right clicking update-all.\nBug fixes.\nUI Updates." diff --git a/WowUp.WPF/Models/Events/AddonStateEventArgs.cs b/WowUp.WPF/Models/Events/AddonStateEventArgs.cs new file mode 100644 index 00000000..44b14e7f --- /dev/null +++ b/WowUp.WPF/Models/Events/AddonStateEventArgs.cs @@ -0,0 +1,12 @@ +using WowUp.Common.Enums; +using WowUp.WPF.Entities; + +namespace WowUp.WPF.Models.Events +{ + public class AddonStateEventArgs + { + public Addon Addon { get; set; } + public AddonInstallState AddonInstallState { get; set; } + public decimal Progress { get; set; } + } +} diff --git a/WowUp.WPF/Services/AddonService.cs b/WowUp.WPF/Services/AddonService.cs index 2c7701e9..d15aef42 100644 --- a/WowUp.WPF/Services/AddonService.cs +++ b/WowUp.WPF/Services/AddonService.cs @@ -45,6 +45,7 @@ namespace WowUp.WPF.Services public event AddonEventHandler AddonUninstalled; public event AddonEventHandler AddonInstalled; public event AddonEventHandler AddonUpdated; + public event AddonStateEventHandler AddonStateChanged; public string BackupPath => Path.Combine(FileUtilities.AppDataPath, BackupFolder); @@ -385,6 +386,19 @@ namespace WowUp.WPF.Services await InstallAddon(addon.Id, onUpdate); } + private void SendAddonStateChange( + Addon addon, + AddonInstallState addonInstallState, + decimal progress) + { + AddonStateChanged?.Invoke(this, new AddonStateEventArgs + { + Addon = addon, + AddonInstallState = addonInstallState, + Progress = progress + }); + } + public async Task InstallAddon(int addonId, Action updateAction = null) { var addon = GetAddon(addonId); @@ -394,6 +408,7 @@ namespace WowUp.WPF.Services } updateAction?.Invoke(AddonInstallState.Downloading, 25m); + SendAddonStateChange(addon, AddonInstallState.Downloading, 25m); string downloadedFilePath = string.Empty; string unzippedDirectory = string.Empty; @@ -407,11 +422,13 @@ namespace WowUp.WPF.Services if (!string.IsNullOrEmpty(addon.InstalledVersion)) { updateAction?.Invoke(AddonInstallState.BackingUp, 0.50m); + SendAddonStateChange(addon, AddonInstallState.BackingUp, 75m); var backupZipFilePath = Path.Combine(BackupPath, $"{addon.Name}-{addon.InstalledVersion}.zip"); //await _downloadService.ZipFile(downloadedFilePath, backupZipFilePath); } updateAction?.Invoke(AddonInstallState.Installing, 75m); + SendAddonStateChange(addon, AddonInstallState.Installing, 75m); unzippedDirectory = await _downloadService.UnzipFile(downloadedFilePath); @@ -451,6 +468,7 @@ namespace WowUp.WPF.Services } updateAction?.Invoke(AddonInstallState.Complete, 100m); + SendAddonStateChange(addon, AddonInstallState.Complete, 100m); } private async Task CacheThumbnail(Addon addon) diff --git a/WowUp.WPF/Services/Contracts/IAddonService.cs b/WowUp.WPF/Services/Contracts/IAddonService.cs index 756e9280..fcf70fd7 100644 --- a/WowUp.WPF/Services/Contracts/IAddonService.cs +++ b/WowUp.WPF/Services/Contracts/IAddonService.cs @@ -9,12 +9,14 @@ using WowUp.WPF.Models.Events; namespace WowUp.WPF.Services.Contracts { public delegate void AddonEventHandler(object sender, AddonEventArgs e); + public delegate void AddonStateEventHandler(object sender, AddonStateEventArgs e); public interface IAddonService { event AddonEventHandler AddonUninstalled; event AddonEventHandler AddonInstalled; event AddonEventHandler AddonUpdated; + event AddonStateEventHandler AddonStateChanged; string BackupPath { get; } diff --git a/WowUp.WPF/ViewModels/AddonListItemViewModel.cs b/WowUp.WPF/ViewModels/AddonListItemViewModel.cs index 7c289971..c17548d5 100644 --- a/WowUp.WPF/ViewModels/AddonListItemViewModel.cs +++ b/WowUp.WPF/ViewModels/AddonListItemViewModel.cs @@ -330,12 +330,9 @@ namespace WowUp.WPF.ViewModels public async Task UpdateAddon() { - ShowStatusText = false; - ShowUpdateButton = false; - try { - await _addonService.InstallAddon(_addon.Id, OnInstallUpdate); + await _addonService.InstallAddon(_addon.Id); } catch (Exception ex) { @@ -426,8 +423,11 @@ namespace WowUp.WPF.ViewModels _analyticsService.TrackUserAction("Addons", "Channel", channelType.ToString()); } - private void OnInstallUpdate(AddonInstallState installState, decimal percent) + public void OnInstallUpdate(AddonInstallState installState, decimal percent) { + ShowStatusText = false; + ShowUpdateButton = false; + try { ProgressText = GetInstallStateText(installState); diff --git a/WowUp.WPF/ViewModels/AddonsViewViewModel.cs b/WowUp.WPF/ViewModels/AddonsViewViewModel.cs index 49069ae0..59a8a469 100644 --- a/WowUp.WPF/ViewModels/AddonsViewViewModel.cs +++ b/WowUp.WPF/ViewModels/AddonsViewViewModel.cs @@ -212,6 +212,15 @@ namespace WowUp.WPF.ViewModels AddonUpdated(args.Addon); }; + _addonService.AddonStateChanged += (sender, args) => + { + var addon = DisplayAddons.FirstOrDefault(listItem => listItem.Addon.Id == args.Addon.Id); + if(addon != null) + { + addon.OnInstallUpdate(args.AddonInstallState, args.Progress); + } + }; + _warcraftService.ProductChanged += (sender, args) => { SetClientNames();