mirror of
https://github.com/WowUp/WowUp.git
synced 2026-04-21 22:40:15 -04:00
Add default headers to most Http calls. Add WowInterface addon provider. Increase TukUI Cache time from 10 -> 60 minutes.
186 lines
5.3 KiB
C#
186 lines
5.3 KiB
C#
using Serilog;
|
|
using System;
|
|
using WowUp.Common.Enums;
|
|
using WowUp.Common.Extensions;
|
|
using WowUp.Common.Models;
|
|
using WowUp.WPF.Extensions;
|
|
using WowUp.WPF.Services.Contracts;
|
|
using WowUp.WPF.Utilities;
|
|
|
|
namespace WowUp.WPF.ViewModels
|
|
{
|
|
public class PotentialAddonListItemViewModel : BaseViewModel
|
|
{
|
|
private readonly IAddonService _addonService;
|
|
private readonly IAnalyticsService _analyticsService;
|
|
|
|
public WowClientType ClientType { get; set; }
|
|
|
|
private PotentialAddon _addon;
|
|
public PotentialAddon Addon
|
|
{
|
|
get => _addon;
|
|
set
|
|
{
|
|
_addon = value;
|
|
SetupDisplayState();
|
|
}
|
|
}
|
|
|
|
private string _name;
|
|
public string Name
|
|
{
|
|
get => _name;
|
|
set { SetProperty(ref _name, value); }
|
|
}
|
|
|
|
private string _providerName;
|
|
public string ProviderName
|
|
{
|
|
get => _providerName;
|
|
set { SetProperty(ref _providerName, value); }
|
|
}
|
|
|
|
private string _thumbnailUrl;
|
|
public string ThumbnailUrl
|
|
{
|
|
get => _thumbnailUrl;
|
|
set { SetProperty(ref _thumbnailUrl, value); }
|
|
}
|
|
|
|
private string _downloadCount;
|
|
public string DownloadCount
|
|
{
|
|
get => _downloadCount;
|
|
set { SetProperty(ref _downloadCount, value); }
|
|
}
|
|
|
|
private string _externalUrl;
|
|
public string ExternalUrl
|
|
{
|
|
get => _externalUrl;
|
|
set { SetProperty(ref _externalUrl, value); }
|
|
}
|
|
|
|
public string _author;
|
|
public string Author
|
|
{
|
|
get => _author;
|
|
set { SetProperty(ref _author, value); }
|
|
}
|
|
|
|
private bool _showInstallButton;
|
|
public bool ShowInstallButton
|
|
{
|
|
get => _showInstallButton;
|
|
set { SetProperty(ref _showInstallButton, value); }
|
|
}
|
|
|
|
private decimal _installProgress;
|
|
public decimal InstallProgress
|
|
{
|
|
get => _installProgress;
|
|
set { SetProperty(ref _installProgress, value); }
|
|
}
|
|
|
|
private bool _showProgressBar;
|
|
public bool ShowProgressBar
|
|
{
|
|
get => _showProgressBar;
|
|
set { SetProperty(ref _showProgressBar, value); }
|
|
}
|
|
|
|
private string _progressText;
|
|
public string ProgressText
|
|
{
|
|
get => _progressText;
|
|
set { SetProperty(ref _progressText, value); }
|
|
}
|
|
|
|
private bool _showProgressText;
|
|
public bool ShowProgressText
|
|
{
|
|
get => _showProgressText;
|
|
set { SetProperty(ref _showProgressText, value); }
|
|
}
|
|
|
|
private bool _isInstalled;
|
|
public bool IsInstalled
|
|
{
|
|
get => _isInstalled;
|
|
set { SetProperty(ref _isInstalled, value); }
|
|
}
|
|
|
|
public Command OpenLinkCommand { get; set; }
|
|
public Command InstallCommand { get; set; }
|
|
|
|
public PotentialAddonListItemViewModel(
|
|
IAddonService addonService,
|
|
IAnalyticsService analyticsService)
|
|
{
|
|
_addonService = addonService;
|
|
_analyticsService = analyticsService;
|
|
|
|
OpenLinkCommand = new Command(() => ExternalUrl.OpenUrlInBrowser());
|
|
InstallCommand = new Command(() => OnInstall());
|
|
}
|
|
|
|
private async void OnInstall()
|
|
{
|
|
ShowInstallButton = false;
|
|
|
|
try
|
|
{
|
|
await _addonService.InstallAddon(Addon, ClientType, OnInstallUpdate);
|
|
|
|
await _analyticsService.TrackUserAction("Addons", "InstallFeaturedAddon", $"{ClientType}|{Addon.Name}");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.Error(ex, "Failed to install addon");
|
|
ShowInstallButton = true;
|
|
|
|
System.Windows.MessageBox.Show("Failure during addon install, please try again later.");
|
|
}
|
|
}
|
|
|
|
private void OnInstallUpdate(AddonInstallState installState, decimal percent)
|
|
{
|
|
ProgressText = GetInstallStateText(installState);
|
|
InstallProgress = percent;
|
|
ShowProgressBar = true;
|
|
ShowProgressText = true;
|
|
|
|
if (installState == AddonInstallState.Complete)
|
|
{
|
|
ShowInstallButton = false;
|
|
ShowProgressBar = false;
|
|
}
|
|
}
|
|
|
|
private string GetInstallStateText(AddonInstallState installState)
|
|
{
|
|
return installState switch
|
|
{
|
|
AddonInstallState.Pending => "Pending",
|
|
AddonInstallState.Downloading => "Downloading",
|
|
AddonInstallState.BackingUp => "BackingUp",
|
|
AddonInstallState.Installing => "Installing",
|
|
AddonInstallState.Complete => "Complete",
|
|
_ => "Unknown",
|
|
};
|
|
}
|
|
|
|
private void SetupDisplayState()
|
|
{
|
|
ShowInstallButton = !IsInstalled;
|
|
Name = Addon.Name;
|
|
ThumbnailUrl = Addon.ThumbnailUrl;
|
|
DownloadCount = $"{Addon.DownloadCount.FormatDownloadCount()} downloads";
|
|
ExternalUrl = Addon.ExternalUrl;
|
|
Author = Addon.Author;
|
|
ProviderName = Addon.ProviderName;
|
|
}
|
|
}
|
|
}
|