using System; using DownKyi.Core.Settings; using DownKyi.Events; using DownKyi.Models; using DownKyi.Services; using DownKyi.Utils; using DownKyi.ViewModels.Dialogs; using Prism.Commands; using Prism.Events; using Prism.Regions; using Prism.Services.Dialogs; using IDialogService = DownKyi.PrismExtension.Dialog.IDialogService; namespace DownKyi.ViewModels.Settings; public class ViewAboutViewModel : ViewModelBase { public const string Tag = "PageSettingsAbout"; private bool _isOnNavigatedTo; #region 页面属性申明 private string _appName; public string AppName { get => _appName; set => SetProperty(ref _appName, value); } private string _appVersion; public string AppVersion { get => _appVersion; set => SetProperty(ref _appVersion, value); } private bool _isReceiveBetaVersion; public bool IsReceiveBetaVersion { get => _isReceiveBetaVersion; set => SetProperty(ref _isReceiveBetaVersion, value); } private bool _autoUpdateWhenLaunch; public bool AutoUpdateWhenLaunch { get => _autoUpdateWhenLaunch; set => SetProperty(ref _autoUpdateWhenLaunch, value); } #endregion public ViewAboutViewModel(IEventAggregator eventAggregator, IDialogService dialogService) : base(eventAggregator, dialogService) { #region 属性初始化 var app = new AppInfo(); AppName = app.Name; AppVersion = app.VersionName; #endregion } /// /// 导航到页面时执行 /// /// public override void OnNavigatedTo(NavigationContext navigationContext) { base.OnNavigatedTo(navigationContext); _isOnNavigatedTo = true; // 是否接收测试版更新 var isReceiveBetaVersion = SettingsManager.GetInstance().GetIsReceiveBetaVersion(); IsReceiveBetaVersion = isReceiveBetaVersion == AllowStatus.Yes; // 是否在启动时自动检查更新 var isAutoUpdateWhenLaunch = SettingsManager.GetInstance().GetAutoUpdateWhenLaunch(); AutoUpdateWhenLaunch = isAutoUpdateWhenLaunch == AllowStatus.Yes; _isOnNavigatedTo = false; } #region 命令申明 // 访问主页事件 private DelegateCommand? _appNameCommand; public DelegateCommand AppNameCommand => _appNameCommand ??= new DelegateCommand(ExecuteAppNameCommand); /// /// 访问主页事件 /// private void ExecuteAppNameCommand() { PlatformHelper.Open("https://github.com/yaobiao131/downkyicore/releases", EventAggregator); } // 检查更新事件 private DelegateCommand? _checkUpdateCommand; public DelegateCommand CheckUpdateCommand => _checkUpdateCommand ??= new DelegateCommand(ExecuteCheckUpdateCommand); private bool _isCheckVersion = false; /// /// 检查更新事件 /// private async void ExecuteCheckUpdateCommand() { if (_isCheckVersion) return; _isCheckVersion = true; var (version, body) = await new VersionCheckerService().GetLatestVersion(); if(version is null) { EventAggregator.GetEvent().Publish("检查失败,请稍后重试~"); _isCheckVersion = false; return; } #if DEBUG var versionString = AppVersion.Replace("-debug", string.Empty); #else var versionString = AppVersion; #endif var currVersion = Version.Parse(versionString); if(currVersion < version) { await DialogService?.ShowDialogAsync(NewVersionAvailableDialogViewModel.Tag, new DialogParameters { { "body", body } }, result => { if(result.Result == ButtonResult.OK) { PlatformHelper.Open("https://github.com/yaobiao131/downkyicore/releases/latest", EventAggregator); } })!; } else { EventAggregator.GetEvent().Publish("已是最新版~"); } _isCheckVersion = false; } // 意见反馈事件 private DelegateCommand? _feedbackCommand; public DelegateCommand FeedbackCommand => _feedbackCommand ??= new DelegateCommand(ExecuteFeedbackCommand); /// /// 意见反馈事件 /// private void ExecuteFeedbackCommand() { PlatformHelper.Open("https://github.com/yaobiao131/downkyicore/issues", EventAggregator); } // 是否接收测试版更新事件 private DelegateCommand? _receiveBetaVersionCommand; public DelegateCommand ReceiveBetaVersionCommand => _receiveBetaVersionCommand ??= new DelegateCommand(ExecuteReceiveBetaVersionCommand); /// /// 是否接收测试版更新事件 /// private void ExecuteReceiveBetaVersionCommand() { var isReceiveBetaVersion = IsReceiveBetaVersion ? AllowStatus.Yes : AllowStatus.No; var isSucceed = SettingsManager.GetInstance().SetIsReceiveBetaVersion(isReceiveBetaVersion); PublishTip(isSucceed); } // 是否在启动时自动检查更新事件 private DelegateCommand? _autoUpdateWhenLaunchCommand; public DelegateCommand AutoUpdateWhenLaunchCommand => _autoUpdateWhenLaunchCommand ??= new DelegateCommand(ExecuteAutoUpdateWhenLaunchCommand); /// /// 是否在启动时自动检查更新事件 /// private void ExecuteAutoUpdateWhenLaunchCommand() { var isAutoUpdateWhenLaunch = AutoUpdateWhenLaunch ? AllowStatus.Yes : AllowStatus.No; var isSucceed = SettingsManager.GetInstance().SetAutoUpdateWhenLaunch(isAutoUpdateWhenLaunch); PublishTip(isSucceed); } // Brotli.NET许可证查看事件 private DelegateCommand _brotliLicenseCommand; public DelegateCommand BrotliLicenseCommand => _brotliLicenseCommand ??= new DelegateCommand(ExecuteBrotliLicenseCommand); /// /// Brotli.NET许可证查看事件 /// private void ExecuteBrotliLicenseCommand() { PlatformHelper.Open("https://licenses.nuget.org/MIT"); } // Google.Protobuf许可证查看事件 private DelegateCommand _protobufLicenseCommand; public DelegateCommand ProtobufLicenseCommand => _protobufLicenseCommand ??= new DelegateCommand(ExecuteProtobufLicenseCommand); /// /// Google.Protobuf许可证查看事件 /// private void ExecuteProtobufLicenseCommand() { PlatformHelper.Open("https://github.com/protocolbuffers/protobuf/blob/master/LICENSE"); } // Newtonsoft.Json许可证查看事件 private DelegateCommand _newtonsoftLicenseCommand; public DelegateCommand NewtonsoftLicenseCommand => _newtonsoftLicenseCommand ??= new DelegateCommand(ExecuteNewtonsoftLicenseCommand); /// /// Newtonsoft.Json许可证查看事件 /// private void ExecuteNewtonsoftLicenseCommand() { PlatformHelper.Open("https://licenses.nuget.org/MIT"); } // Prism.DryIoc许可证查看事件 private DelegateCommand _prismLicenseCommand; public DelegateCommand PrismLicenseCommand => _prismLicenseCommand ??= new DelegateCommand(ExecutePrismLicenseCommand); /// /// Prism.DryIoc许可证查看事件 /// private void ExecutePrismLicenseCommand() { PlatformHelper.Open("https://www.nuget.org/packages/Prism.DryIoc/8.1.97/license"); } // QRCoder许可证查看事件 private DelegateCommand _qRCoderLicenseCommand; public DelegateCommand QRCoderLicenseCommand => _qRCoderLicenseCommand ??= new DelegateCommand(ExecuteQRCoderLicenseCommand); /// /// QRCoder许可证查看事件 /// private void ExecuteQRCoderLicenseCommand() { PlatformHelper.Open("https://licenses.nuget.org/MIT"); } // System.Data.SQLite.Core许可证查看事件 private DelegateCommand _sQLiteLicenseCommand; public DelegateCommand SQLiteLicenseCommand => _sQLiteLicenseCommand ??= new DelegateCommand(ExecuteSQLiteLicenseCommand); /// /// System.Data.SQLite.Core许可证查看事件 /// private void ExecuteSQLiteLicenseCommand() { PlatformHelper.Open("https://www.sqlite.org/copyright.html"); } // Aria2c许可证查看事件 private DelegateCommand _ariaLicenseCommand; public DelegateCommand AriaLicenseCommand => _ariaLicenseCommand ??= new DelegateCommand(ExecuteAriaLicenseCommand); /// /// Aria2c许可证查看事件 /// private void ExecuteAriaLicenseCommand() { PlatformHelper.Open("aria2_COPYING.txt"); } // FFmpeg许可证查看事件 private DelegateCommand _fFmpegLicenseCommand; public DelegateCommand FFmpegLicenseCommand => _fFmpegLicenseCommand ??= new DelegateCommand(ExecuteFFmpegLicenseCommand); /// /// FFmpeg许可证查看事件 /// private void ExecuteFFmpegLicenseCommand() { PlatformHelper.Open("FFmpeg_LICENSE.txt"); } #endregion /// /// 发送需要显示的tip /// /// private void PublishTip(bool isSucceed) { if (_isOnNavigatedTo) { return; } EventAggregator.GetEvent().Publish(isSucceed ? DictionaryResource.GetString("TipSettingUpdated") : DictionaryResource.GetString("TipSettingFailed")); } }