Merge branch 'master' into develop

This commit is contained in:
jliddev
2020-09-30 14:59:08 -05:00
6 changed files with 50 additions and 5 deletions

View File

@@ -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."

View File

@@ -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; }
}
}

View File

@@ -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<AddonInstallState, decimal> 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)

View File

@@ -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; }

View File

@@ -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);

View File

@@ -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();