兼容win7版应用
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

181 lines
7.3 KiB

using AIK.Common.Enum;
using AIK.Common.Event;
using AIK.Common.Interface;
using AIK.Common.Language;
using AIK.Common.Models;
using AIK.Common.SysCommon;
using AIK.Common.WebHelper;
using AIK.Models.ApiModels.Version;
using AIK.Models.HidModels;
using AIK.Models.SystemSettings;
using AIK.Service.Extensions;
using AIK.Service.IService;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using System.Windows.Media.Animation;
namespace AIK.ViewModels.UpdateCenter
{
public partial class UpdateCenterViewModel : ObservableObject, ILoadAware
{
private readonly ISettingsService _settingsService;
private readonly IConfigurationService _configurationService;
private readonly IDataCacheService _dataCacheService;
private readonly IModalDialogService _modalDialogService;
private readonly IAikDataService _aikDataService;
private readonly IFileServiceFactory _fileServiceFactory;
private readonly IFileCacheService _fileCacheService;
private readonly IWindowService _windowService;
private readonly IHidCommunicationService _hidCommunicationService;
private readonly IUpdateService _updateService;
[ObservableProperty]
private bool _isK3ToolUpdateAvailable = false;
[ObservableProperty]
private AppVersionInfo _k3UpdateInfo;
[ObservableProperty]
private UpdateProgressDto _appUpdateInfo;
[ObservableProperty]
private string codeVersion = "----";
[ObservableProperty]
private HidDeviceStatus _hidDeviceStatus = new HidDeviceStatus();
public Dictionary<string, byte[]> binKeyByteDic = new Dictionary<string, byte[]>();
public UpdateCenterViewModel(ISettingsService settingsService, IConfigurationService configurationService, IDataCacheService dataCacheService, IModalDialogService modalDialogService, IAikDataService aikDataService, IFileServiceFactory fileServiceFactory, IWindowService windowService, IHidCommunicationService hidCommunicationService, IUpdateService updateService)
{
_settingsService = settingsService;
_configurationService = configurationService;
_dataCacheService = dataCacheService;
_modalDialogService = modalDialogService;
_aikDataService = aikDataService;
_fileServiceFactory = fileServiceFactory;
_fileCacheService = _fileServiceFactory.GetService(FileServiceType.BIN);
_windowService = windowService;
_hidCommunicationService = hidCommunicationService;
_hidCommunicationService.ConnectionStateChanged += OnConnectionStateChanged;
_updateService = updateService;
}
public async Task OnLoadedAsync()
{
int codeNumber = 0;
if (codeVersion.Contains('v'))
{
codeNumber = int.Parse(codeVersion.Replace("v", "").Replace(".", ""));
}
else
{
codeVersion = "----";
}
AppUpdateInfo = await _updateService.CheckForUpdateAsync();
K3UpdateInfo = await _aikDataService.GetAppVersionInfo(WebApiAddress.K3ToolType);
if (K3UpdateInfo != null)
{
await LoadAppVersionFile();
int newcodeNumber = int.Parse(K3UpdateInfo.VersionName.Replace("v", "").Replace(".", ""));
if (codeNumber < newcodeNumber)
{
IsK3ToolUpdateAvailable = true;
return;
}
}
else
{
K3UpdateInfo = new AppVersionInfo();
K3UpdateInfo.VersionName = "----";
}
IsK3ToolUpdateAvailable = false;
}
private async Task LoadAppVersionFile()
{
var filebin = await _fileCacheService.GetFileByteAsync(K3UpdateInfo.FileUrl);
if (filebin != null && filebin.Length > 0)
{
if (K3UpdateInfo.FileUrl.Contains("http"))
{
var urifileName = UrlHelper.GetEncodedFileNameFromUrl(K3UpdateInfo.FileUrl);
var realfileName = Uri.UnescapeDataString(urifileName);
binKeyByteDic.Add(realfileName, filebin);
}
}
}
#region 页面方法
[RelayCommand]
public void UpdateK3Tool()
{
//烧录工具更新
if (_hidDeviceStatus.DeviceStatus == false)
{
_modalDialogService.ShowDialogAsync(AiKLanguage.LanguageKey.GetValueOrDefault("DeviceDisconnected"), AiKLanguage.LanguageKey.GetValueOrDefault("K3ToolConnectTips"), MessageTypeEnum.Warning, true, false, 3000);
return;
}
else
{
var keyname = binKeyByteDic.Keys.FirstOrDefault();
if (binKeyByteDic.TryGetValue(keyname, out byte[] filebyte))
{
_modalDialogService.ShowProgressAsync(
async (progress, ct) =>
{
return await _hidCommunicationService.SendFileProcessAsync(
keyname,
filebyte,
HidOperationTypeEnum.DeviceUpdate,
progress,
ct);
});
}
}
}
[RelayCommand]
public void GetCurrentDeviceVersion()
{
_ = _hidCommunicationService.GetDeviceVersion(HidOperationTypeEnum.DeviceVersion);
}
[RelayCommand]
public void UpdateApp()
{
if (AppUpdateInfo == null || !AppUpdateInfo.IsAvailable)
{
_modalDialogService.ShowTipsDialogAsync(AiKLanguage.LanguageKey.GetValueOrDefault("UpToDate"));
return;
}
//_updateService.StartUpdateProcess();//旧版更新
_updateService.CheckForUpdate();
}
#endregion
#region 连接状态事件处理
private void OnConnectionStateChanged(object? sender, ConnectionStateChangedEventArgs e)
{
HidDeviceStatus.DeviceStatus = e.IsConnected;
IsK3ToolUpdateAvailable = e.IsConnected;
if (e.IsConnected)
{
HidDeviceStatus.DeviceStatusText = AiKLanguage.LanguageKey.GetValueOrDefault("Connected");
HidDeviceStatus.DeviceStatusColor = "#28a745";
HidDeviceStatus.DeviceStatusIcon = "\uE62a";
}
else
{
HidDeviceStatus.DeviceStatusText = AiKLanguage.LanguageKey.GetValueOrDefault("Disconnected"); ;
HidDeviceStatus.DeviceStatusColor = "#FFF44336";
HidDeviceStatus.DeviceStatusIcon = "\uE6f9";
}
}
#endregion
#region 获取bin文件更新
private void LoadBinFileForUpdate()
{
//TODO 获取bin文件用于更新
}
#endregion
}
}