From ca294cb77a903a9bd141df803405dbd0256fdec5 Mon Sep 17 00:00:00 2001 From: Aigio Liu Date: Sun, 25 Apr 2021 16:27:58 +0800 Subject: [PATCH] AppUpdate --- .../Converters/ImageValueConverter.cs | 3 +- .../AvaloniaDesktopAppUpdateServiceImpl.cs | 17 ++- .../Implementation/ShowWindowServiceImpl.cs | 9 +- .../UI/Views/Controls/TitleBar.axaml | 2 +- .../UI/Views/Windows/NewVersionWindow.axaml | 78 ++++++++++ .../Views/Windows/NewVersionWindow.axaml.cs | 26 ++++ src/ST.Client.Desktop/CustomWindow.cs | 1 + .../DesktopAppUpdateServiceImpl.cs | 14 +- src/ST.Client.Desktop/TarGZipHelper.cs | 8 +- .../UI/Resx/AppResources.Designer.cs | 36 +++++ .../UI/Resx/AppResources.resx | 12 ++ .../UI/ViewModels/MainWindowViewModel.cs | 4 +- .../UI/ViewModels/Pages/DebugPageViewModel.cs | 30 ++-- src/ST.Client/ImageUrlHelper.cs | 2 +- src/ST.Client/Properties/SR.Designer.cs | 36 +++++ src/ST.Client/Properties/SR.resx | 12 ++ src/ST.Client/Services/IAppUpdateService.cs | 26 +++- .../Implementation/AppUpdateServiceImpl.cs | 133 +++++++++++++----- .../Application/UI/Views/Form1.cs | 4 +- 19 files changed, 366 insertions(+), 87 deletions(-) create mode 100644 src/ST.Client.Desktop.Avalonia/Application/UI/Views/Windows/NewVersionWindow.axaml create mode 100644 src/ST.Client.Desktop.Avalonia/Application/UI/Views/Windows/NewVersionWindow.axaml.cs diff --git a/src/ST.Client.Desktop.Avalonia/Application/Converters/ImageValueConverter.cs b/src/ST.Client.Desktop.Avalonia/Application/Converters/ImageValueConverter.cs index 5ae3dde2c..aaedfdb94 100644 --- a/src/ST.Client.Desktop.Avalonia/Application/Converters/ImageValueConverter.cs +++ b/src/ST.Client.Desktop.Avalonia/Application/Converters/ImageValueConverter.cs @@ -22,8 +22,9 @@ namespace System.Application.Converters } [Obsolete("use HttpClient")] - protected static Bitmap DownloadImage(string url, int width = 0) + protected static Bitmap? DownloadImage(string? url, int width = 0) { + if (url == null) return null; using var web = new WebClient(); var ua = DI.Get().UserAgent; web.Headers.Add("User-Agent", ua); diff --git a/src/ST.Client.Desktop.Avalonia/Application/Services/Implementation/AvaloniaDesktopAppUpdateServiceImpl.cs b/src/ST.Client.Desktop.Avalonia/Application/Services/Implementation/AvaloniaDesktopAppUpdateServiceImpl.cs index 89bc1791d..6d69dcc10 100644 --- a/src/ST.Client.Desktop.Avalonia/Application/Services/Implementation/AvaloniaDesktopAppUpdateServiceImpl.cs +++ b/src/ST.Client.Desktop.Avalonia/Application/Services/Implementation/AvaloniaDesktopAppUpdateServiceImpl.cs @@ -1,5 +1,7 @@ -using Microsoft.Extensions.Options; +using Avalonia.Controls.ApplicationLifetimes; +using Microsoft.Extensions.Options; using System.Application.Models; +using AvaloniaApplication = Avalonia.Application; namespace System.Application.Services.Implementation { @@ -15,12 +17,15 @@ namespace System.Application.Services.Implementation this.app = app; } - protected override void OnExistNewVersion() + protected override async void OnExistNewVersion() { - //if (WindowService.Current.MainWindow.Dialog($"检测到新版本更新内容:{UpdateInfo.body}{Environment.NewLine}是否立即下载更新?", $"{ProductInfo.Title} | 更新提示") == true) - //{ - // DownloadUpdate(); - //} + if (AvaloniaApplication.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) + { + if (desktop.Windows.Any_Nullable(x => x.IsActive)) + { + await IShowWindowService.Instance.Show(typeof(object), CustomWindow.NewVersion); + } + } } protected override void OnExit() diff --git a/src/ST.Client.Desktop.Avalonia/Application/Services/Implementation/ShowWindowServiceImpl.cs b/src/ST.Client.Desktop.Avalonia/Application/Services/Implementation/ShowWindowServiceImpl.cs index f8322f524..e433f02cf 100644 --- a/src/ST.Client.Desktop.Avalonia/Application/Services/Implementation/ShowWindowServiceImpl.cs +++ b/src/ST.Client.Desktop.Avalonia/Application/Services/Implementation/ShowWindowServiceImpl.cs @@ -36,8 +36,11 @@ namespace System.Application.Services.Implementation { var windowType = GetWindowType(customWindow); var window = (Window)Activator.CreateInstance(windowType); - if (viewModel == null) viewModel = (WindowViewModel)Activator.CreateInstance(typeWindowViewModel); - if (!string.IsNullOrEmpty(title)) + if (viewModel == null && typeWindowViewModel != typeof(object)) + { + viewModel = (WindowViewModel)Activator.CreateInstance(typeWindowViewModel); + } + if (!string.IsNullOrEmpty(title) && viewModel != null) { viewModel.Title = title; } @@ -87,7 +90,7 @@ namespace System.Application.Services.Implementation BindingDialogWindowViewModel(window, dialogWindowViewModel, actionDialogWindowViewModel); } } - window.DataContext = viewModel; + if (viewModel != null) window.DataContext = viewModel; if (isDialog) { await IDesktopAvaloniaAppService.Instance.ShowDialogWindow(window); diff --git a/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Controls/TitleBar.axaml b/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Controls/TitleBar.axaml index ecd64cb58..7644f259e 100644 --- a/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Controls/TitleBar.axaml +++ b/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Controls/TitleBar.axaml @@ -13,7 +13,7 @@ - + diff --git a/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Windows/NewVersionWindow.axaml b/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Windows/NewVersionWindow.axaml new file mode 100644 index 000000000..a323ffc73 --- /dev/null +++ b/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Windows/NewVersionWindow.axaml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + +