Files
WowUp/WowUp.WPF/ViewModels/PotentialAddonListItemViewModel.cs
jliddev 182bcef037 Wow Interface integration
Add default headers to most Http calls.
Add WowInterface addon provider.
Increase TukUI Cache time from 10 -> 60 minutes.
2020-08-16 23:45:59 -05:00

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