diff --git a/src/ZonyLrcTools.Cli/Infrastructure/UpdaterHostedService.cs b/src/ZonyLrcTools.Cli/Infrastructure/UpdaterHostedService.cs new file mode 100644 index 0000000..3f401d4 --- /dev/null +++ b/src/ZonyLrcTools.Cli/Infrastructure/UpdaterHostedService.cs @@ -0,0 +1,26 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Hosting; +using ZonyLrcTools.Common.Updater; + +namespace ZonyLrcTools.Cli.Infrastructure; + +public class UpdaterHostedService : IHostedService +{ + private readonly IUpdater _updater; + + public UpdaterHostedService(IUpdater updater) + { + _updater = updater; + } + + public async Task StartAsync(CancellationToken cancellationToken) + { + await _updater.CheckUpdateAsync(); + } + + public Task StopAsync(CancellationToken cancellationToken) + { + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/ZonyLrcTools.Cli/Program.cs b/src/ZonyLrcTools.Cli/Program.cs index 1b88eff..bb87d41 100644 --- a/src/ZonyLrcTools.Cli/Program.cs +++ b/src/ZonyLrcTools.Cli/Program.cs @@ -11,6 +11,7 @@ using Serilog.Events; using Serilog.Sinks.SystemConsole.Themes; using ZonyLrcTools.Cli.Commands; using ZonyLrcTools.Cli.Commands.SubCommand; +using ZonyLrcTools.Cli.Infrastructure; using ZonyLrcTools.Cli.Infrastructure.Logging; using ZonyLrcTools.Common.Infrastructure.DependencyInject; using ZonyLrcTools.Common.Infrastructure.Exceptions; @@ -90,6 +91,7 @@ namespace ZonyLrcTools.Cli services.BeginAutoDependencyInject(); services.ConfigureConfiguration(); services.ConfigureToolService(); + services.AddHostedService(); }) .RunCommandLineApplicationAsync(args); } diff --git a/src/ZonyLrcTools.Common/Updater/DefaultUpdater.cs b/src/ZonyLrcTools.Common/Updater/DefaultUpdater.cs index c79d7db..63f3132 100644 --- a/src/ZonyLrcTools.Common/Updater/DefaultUpdater.cs +++ b/src/ZonyLrcTools.Common/Updater/DefaultUpdater.cs @@ -7,9 +7,9 @@ using ZonyLrcTools.Common.Updater.JsonModel; namespace ZonyLrcTools.Common.Updater; -public class DefaultUpdater : ISingletonDependency +public class DefaultUpdater : IUpdater, ISingletonDependency { - public const string UpdateUrl = "https://api.zony.me/lrc-tools/update"; + public const string UpdateUrl = "https://api.myzony.com/lrc-tools/update"; private readonly IWarpHttpClient _warpHttpClient; private readonly ILogger _logger; @@ -23,7 +23,7 @@ public class DefaultUpdater : ISingletonDependency public async Task CheckUpdateAsync() { - var response = await _warpHttpClient.GetAsync(UpdateUrl); + var response = await _warpHttpClient.GetAsync(UpdateUrl); if (response == null) { return; @@ -35,13 +35,13 @@ public class DefaultUpdater : ISingletonDependency return; } - var importantItem = response.Items.FirstOrDefault(x => x.ItemType == NewVersionItemType.Important); + var importantItem = response.Items?.FirstOrDefault(x => x.ItemType == NewVersionItemType.Important); if (importantItem != null) { _logger.LogWarning($"发现了新版本,请点击下面的链接进行更新:{importantItem.Url}"); _logger.LogWarning($"最新版本号:{response.NewVersion},当前版本号: ${currentVersion}"); _logger.LogWarning($"更新内容:{response.NewVersionDescription}"); - + if (OperatingSystem.IsWindows()) { Process.Start("explorer.exe", importantItem.Url); diff --git a/src/ZonyLrcTools.Common/Updater/IUpdater.cs b/src/ZonyLrcTools.Common/Updater/IUpdater.cs new file mode 100644 index 0000000..1bdb5a5 --- /dev/null +++ b/src/ZonyLrcTools.Common/Updater/IUpdater.cs @@ -0,0 +1,6 @@ +namespace ZonyLrcTools.Common.Updater; + +public interface IUpdater +{ + Task CheckUpdateAsync(); +} \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/Updater/JsonModel/NewVersionItem.cs b/src/ZonyLrcTools.Common/Updater/JsonModel/NewVersionItem.cs index 23773ee..e629eae 100644 --- a/src/ZonyLrcTools.Common/Updater/JsonModel/NewVersionItem.cs +++ b/src/ZonyLrcTools.Common/Updater/JsonModel/NewVersionItem.cs @@ -2,7 +2,7 @@ namespace ZonyLrcTools.Common.Updater.JsonModel; public class NewVersionItem { - public string Url { get; set; } + public string? Url { get; set; } public NewVersionItemType ItemType { get; set; } } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/Updater/JsonModel/NewVersionItemType.cs b/src/ZonyLrcTools.Common/Updater/JsonModel/NewVersionItemType.cs index 4aa502c..d1c4f5b 100644 --- a/src/ZonyLrcTools.Common/Updater/JsonModel/NewVersionItemType.cs +++ b/src/ZonyLrcTools.Common/Updater/JsonModel/NewVersionItemType.cs @@ -2,6 +2,6 @@ namespace ZonyLrcTools.Common.Updater.JsonModel; public enum NewVersionItemType { - Important, + Important = 1, NormalBinaryFile } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/Updater/JsonModel/NewVersionResponse.cs b/src/ZonyLrcTools.Common/Updater/JsonModel/NewVersionResponse.cs index 7fa9eb9..5e38bc0 100644 --- a/src/ZonyLrcTools.Common/Updater/JsonModel/NewVersionResponse.cs +++ b/src/ZonyLrcTools.Common/Updater/JsonModel/NewVersionResponse.cs @@ -2,11 +2,11 @@ namespace ZonyLrcTools.Common.Updater.JsonModel; public class NewVersionResponse { - public Version NewVersion { get; set; } + public Version? NewVersion { get; set; } - public string NewVersionDescription { get; set; } + public string? NewVersionDescription { get; set; } - public List Items { get; set; } + public List? Items { get; set; } - public DateTime UpdateTime { get; set; } + public DateTime? UpdateTime { get; set; } } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/ZonyLrcTools.Common.csproj b/src/ZonyLrcTools.Common/ZonyLrcTools.Common.csproj index ce8f2c7..259a221 100644 --- a/src/ZonyLrcTools.Common/ZonyLrcTools.Common.csproj +++ b/src/ZonyLrcTools.Common/ZonyLrcTools.Common.csproj @@ -4,6 +4,7 @@ net6.0 enable enable + 4.0.0.49 diff --git a/tests/ZonyLrcTools.Tests/Infrastructure/Updater/UpdaterTests.cs b/tests/ZonyLrcTools.Tests/Infrastructure/Updater/UpdaterTests.cs new file mode 100644 index 0000000..7070020 --- /dev/null +++ b/tests/ZonyLrcTools.Tests/Infrastructure/Updater/UpdaterTests.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Newtonsoft.Json; +using Shouldly; +using Xunit; +using ZonyLrcTools.Common.Updater; +using ZonyLrcTools.Common.Updater.JsonModel; + +namespace ZonyLrcTools.Tests.Infrastructure.Updater; + +public class UpdaterTests : TestBase +{ + private readonly IUpdater _updater; + + public UpdaterTests() + { + _updater = GetService(); + } + + [Fact] + public async Task CheckUpdateAsync() + { + var response = new NewVersionResponse + { + NewVersion = new Version(0, 0, 1, 49), + NewVersionDescription = "这里是新版本描述", + UpdateTime = DateTime.Now, + Items = new List + { + new NewVersionItem + { + ItemType = NewVersionItemType.Important, + Url = "https://github.com/real-zony/ZonyLrcToolsX/releases/tag/ZonyLrcToolsX_Alpha.2022092449" + } + } + }; + + var responseString = JsonConvert.SerializeObject(response); + responseString.ShouldNotBeNull(); + + await _updater.CheckUpdateAsync(); + } +} \ No newline at end of file diff --git a/tests/ZonyLrcTools.Tests/TestBase.cs b/tests/ZonyLrcTools.Tests/TestBase.cs index bc88ed6..e566254 100644 --- a/tests/ZonyLrcTools.Tests/TestBase.cs +++ b/tests/ZonyLrcTools.Tests/TestBase.cs @@ -2,6 +2,7 @@ using System; using Microsoft.Extensions.DependencyInjection; using ZonyLrcTools.Cli; using ZonyLrcTools.Cli.Commands; +using ZonyLrcTools.Common; using ZonyLrcTools.Common.Infrastructure.DependencyInject; namespace ZonyLrcTools.Tests @@ -22,6 +23,7 @@ namespace ZonyLrcTools.Tests var service = new ServiceCollection(); service.BeginAutoDependencyInject(); + service.BeginAutoDependencyInject(); service.ConfigureToolService(); service.ConfigureConfiguration();