From bbf2eb28ad60ec9a7bc0330400423990bd002d9a Mon Sep 17 00:00:00 2001
From: xljiulang <366193849@qq.com>
Date: Tue, 20 Jul 2021 22:13:27 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8github=E5=8F=96=E4=BB=A3gitee?=
=?UTF-8?q?=E5=81=9A=E5=8D=87=E7=BA=A7=E5=8C=85=E7=AE=A1=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../{GiteeRelease.cs => GithubRelease.cs} | 16 ++++++-
FastGithub.Upgrade/UpgradeHostedService.cs | 44 +++++++++----------
FastGithub.Upgrade/UpgradeService.cs | 17 ++++---
.../UpgradeServiceCollectionExtensions.cs | 2 +-
FastGithub/Program.cs | 2 +-
5 files changed, 49 insertions(+), 32 deletions(-)
rename FastGithub.Upgrade/{GiteeRelease.cs => GithubRelease.cs} (75%)
diff --git a/FastGithub.Upgrade/GiteeRelease.cs b/FastGithub.Upgrade/GithubRelease.cs
similarity index 75%
rename from FastGithub.Upgrade/GiteeRelease.cs
rename to FastGithub.Upgrade/GithubRelease.cs
index 897a0cc..6eef851 100644
--- a/FastGithub.Upgrade/GiteeRelease.cs
+++ b/FastGithub.Upgrade/GithubRelease.cs
@@ -1,4 +1,5 @@
using System;
+using System.Diagnostics.CodeAnalysis;
using System.Text;
using System.Text.Json.Serialization;
@@ -7,7 +8,7 @@ namespace FastGithub.Upgrade
///
/// 发行记录
///
- sealed class GiteeRelease
+ sealed class GithubRelease
{
///
/// 标签名
@@ -15,6 +16,12 @@ namespace FastGithub.Upgrade
[JsonPropertyName("tag_name")]
public string TagName { get; set; } = string.Empty;
+ ///
+ /// 是否预览版本
+ ///
+ [JsonPropertyName("prerelease")]
+ public bool Prerelease { get; set; }
+
///
/// 发行说明
///
@@ -28,6 +35,13 @@ namespace FastGithub.Upgrade
[JsonPropertyName("created_at")]
public DateTime CreatedAt { get; set; }
+ ///
+ /// 下载页面
+ ///
+ [AllowNull]
+ [JsonPropertyName("html_url")]
+ public Uri HtmlUrl { get; set; }
+
///
/// 获取产品版本
diff --git a/FastGithub.Upgrade/UpgradeHostedService.cs b/FastGithub.Upgrade/UpgradeHostedService.cs
index eb52f0f..8c9e1ce 100644
--- a/FastGithub.Upgrade/UpgradeHostedService.cs
+++ b/FastGithub.Upgrade/UpgradeHostedService.cs
@@ -1,5 +1,4 @@
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Threading;
@@ -10,46 +9,47 @@ namespace FastGithub.Upgrade
///
/// 升级后台服务
///
- sealed class UpgradeHostedService : IHostedService
+ sealed class UpgradeHostedService : BackgroundService
{
- private readonly IServiceScopeFactory serviceScopeFactory;
+ private readonly UpgradeService upgradeService;
private readonly ILogger logger;
///
/// 升级后台服务
///
- ///
///
public UpgradeHostedService(
- IServiceScopeFactory serviceScopeFactory,
+ UpgradeService upgradeService,
ILogger logger)
{
- this.serviceScopeFactory = serviceScopeFactory;
+ this.upgradeService = upgradeService;
this.logger = logger;
}
///
/// 检测版本
///
- ///
+ ///
///
- public async Task StartAsync(CancellationToken cancellationToken)
+ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
- try
+ var maxTryCount = 3;
+ for (var i = 1; i <= maxTryCount; i++)
{
- using var scope = this.serviceScopeFactory.CreateScope();
- var upgradeService = scope.ServiceProvider.GetRequiredService();
- await upgradeService.UpgradeAsync(cancellationToken);
+ try
+ {
+ await Task.Delay(TimeSpan.FromSeconds(2d), stoppingToken);
+ await this.upgradeService.UpgradeAsync(stoppingToken);
+ break;
+ }
+ catch (Exception ex)
+ {
+ if (i == maxTryCount)
+ {
+ this.logger.LogWarning($"升级失败:{ex.Message}");
+ }
+ }
}
- catch (Exception ex)
- {
- this.logger.LogWarning($"升级失败:{ex.Message}");
- }
- }
-
- public Task StopAsync(CancellationToken cancellationToken)
- {
- return Task.CompletedTask;
}
}
}
diff --git a/FastGithub.Upgrade/UpgradeService.cs b/FastGithub.Upgrade/UpgradeService.cs
index df02fed..07a507d 100644
--- a/FastGithub.Upgrade/UpgradeService.cs
+++ b/FastGithub.Upgrade/UpgradeService.cs
@@ -2,6 +2,7 @@
using System;
using System.Linq;
using System.Net.Http;
+using System.Net.Http.Headers;
using System.Net.Http.Json;
using System.Threading;
using System.Threading.Tasks;
@@ -14,8 +15,7 @@ namespace FastGithub.Upgrade
sealed class UpgradeService
{
private readonly ILogger logger;
- private const string DownloadPage = "https://gitee.com/jiulang/fast-github/releases";
- private const string ReleasesUri = "https://gitee.com/api/v5/repos/jiulang/fast-github/releases?page=1&per_page=1&direction=desc";
+ private const string ReleasesUri = "https://api.github.com/repos/xljiulang/fastgithub/releases";
///
/// 升级服务
@@ -48,7 +48,7 @@ namespace FastGithub.Upgrade
var lastedVersion = lastRelease.GetProductionVersion();
if (lastedVersion.CompareTo(currentVersion) > 0)
{
- this.logger.LogInformation($"您正在使用{currentVersion}版本{Environment.NewLine}请前往{DownloadPage}下载新版本");
+ this.logger.LogInformation($"您正在使用{currentVersion}版本{Environment.NewLine}请前往{lastRelease.HtmlUrl}下载新版本");
this.logger.LogInformation(lastRelease.ToString());
}
}
@@ -57,11 +57,14 @@ namespace FastGithub.Upgrade
/// 获取最新发布
///
///
- public async Task GetLastedReleaseAsync(CancellationToken cancellationToken)
+ public async Task GetLastedReleaseAsync(CancellationToken cancellationToken)
{
- using var httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(5d) };
- var releases = await httpClient.GetFromJsonAsync(ReleasesUri, cancellationToken);
- return releases?.FirstOrDefault();
+ using var httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(30d) };
+ httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*"));
+ httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(nameof(FastGithub), "1.0"));
+
+ var releases = await httpClient.GetFromJsonAsync(ReleasesUri, cancellationToken);
+ return releases?.FirstOrDefault(item => item.Prerelease == false);
}
}
}
diff --git a/FastGithub.Upgrade/UpgradeServiceCollectionExtensions.cs b/FastGithub.Upgrade/UpgradeServiceCollectionExtensions.cs
index 6d846ad..a3fd0ec 100644
--- a/FastGithub.Upgrade/UpgradeServiceCollectionExtensions.cs
+++ b/FastGithub.Upgrade/UpgradeServiceCollectionExtensions.cs
@@ -16,7 +16,7 @@ namespace FastGithub
public static IServiceCollection AddAppUpgrade(this IServiceCollection services)
{
return services
- .AddTransient()
+ .AddSingleton()
.AddHostedService();
}
}
diff --git a/FastGithub/Program.cs b/FastGithub/Program.cs
index 44ed162..22e9b1a 100644
--- a/FastGithub/Program.cs
+++ b/FastGithub/Program.cs
@@ -32,10 +32,10 @@ namespace FastGithub
})
.ConfigureServices((ctx, services) =>
{
- services.AddAppUpgrade();
services.AddDnsServer();
services.AddReverseProxy();
services.AddDnscryptProxy();
+ services.AddAppUpgrade();
services.AddSingleton();
services.Configure(ctx.Configuration.GetSection(nameof(FastGithub)));
})