Add New Version Check

This commit is contained in:
2022-05-15 10:31:19 +08:00
parent daeb0d516e
commit 193cef5b2c
11 changed files with 171 additions and 29 deletions

View File

@ -10,27 +10,30 @@
</startup>
<userSettings>
<GrasscutterTools.Properties.Settings>
<setting name="AutoCopy" serializeAs="String">
<value>False</value>
</setting>
<setting name="Uid" serializeAs="String">
<value>10001</value>
</setting>
<setting name="DefaultLanguage" serializeAs="String">
<value>zh-CN</value>
</setting>
<setting name="ResourcesDirPath" serializeAs="String">
<value />
</setting>
<setting name="TextMapFileName" serializeAs="String">
<value>TextMapCHS</value>
</setting>
<setting name="RemoteUid" serializeAs="String">
<value>10001</value>
</setting>
<setting name="Host" serializeAs="String">
<value>https://127.0.0.1</value>
</setting>
</GrasscutterTools.Properties.Settings>
<setting name="AutoCopy" serializeAs="String">
<value>False</value>
</setting>
<setting name="Uid" serializeAs="String">
<value>10001</value>
</setting>
<setting name="DefaultLanguage" serializeAs="String">
<value>zh-CN</value>
</setting>
<setting name="ResourcesDirPath" serializeAs="String">
<value />
</setting>
<setting name="TextMapFileName" serializeAs="String">
<value>TextMapCHS</value>
</setting>
<setting name="RemoteUid" serializeAs="String">
<value>10001</value>
</setting>
<setting name="Host" serializeAs="String">
<value>https://127.0.0.1</value>
</setting>
<setting name="CheckedLastVersion" serializeAs="String">
<value />
</setting>
</GrasscutterTools.Properties.Settings>
</userSettings>
</configuration>

View File

@ -40,17 +40,18 @@ namespace GrasscutterTools
{
InitializeComponent();
Icon = Resources.IconGrasscutter;
LoadVersion();
LoadSettings();
LoadUpdate();
}
private void FormMain_Load(object sender, EventArgs e)
{
MultiLanguage.LoadLanguage(this, typeof(FormMain));
Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
#if DEBUG
Text += " - by jie65535 - v" + version.ToString(3) + "-debug";
Text += " - by jie65535 - v" + AppVersion.ToString(3) + "-debug";
#else
Text += " - by jie65535 - v" + version.ToString(3);
Text += " - by jie65535 - v" + AppVersion.ToString(3);
#endif
GameData.LoadResources();
@ -75,6 +76,13 @@ namespace GrasscutterTools
private readonly string[] LanguageNames = new string[] { "简体中文", "English" };
private readonly string[] Languages = new string[] { "zh-CN", "en-US" };
private Version AppVersion;
private void LoadVersion()
{
AppVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
}
private void LoadSettings()
{
try
@ -116,6 +124,42 @@ namespace GrasscutterTools
}
}
private void LoadUpdate()
{
Task.Run(() =>
{
try
{
var info = Github.ReleaseAPI.GetReleasesLastest("jie65535", "GrasscutterCommandGenerator").Result;
if (Version.TryParse(info.TagName.Substring(1), out Version lastestVersion) && AppVersion < lastestVersion)
{
if (!string.IsNullOrEmpty(Settings.Default.CheckedLastVersion)
&& Version.TryParse(Settings.Default.CheckedLastVersion, out Version checkedVersion)
&& checkedVersion >= lastestVersion)
return;
BeginInvoke(new Action(() =>
{
var r = MessageBox.Show(
string.Format(Resources.NewVersionInfo, info.Name, info.CraeteTime, info.Body),
Resources.CheckToNewVersion,
MessageBoxButtons.YesNo,
MessageBoxIcon.Information);
if (r == DialogResult.Yes)
System.Diagnostics.Process.Start(info.Url);
else if (r == DialogResult.No)
Settings.Default.CheckedLastVersion = lastestVersion.ToString();
}));
}
}
catch (Exception)
{
#if DEBUG
throw;
#endif
}
});
}
#endregion - -
#region - -

View File

@ -0,0 +1,46 @@
using System;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using GrasscutterTools.Utils;
namespace GrasscutterTools.Github
{
public static class ReleaseAPI
{
public static async Task<ReleaseInfo> GetReleasesLastest(string username, string repo)
{
var headerValue = new ProductInfoHeaderValue("GrasscutterTools", "1");
try
{
HttpHelper.HttpClient.DefaultRequestHeaders.UserAgent.Add(headerValue);
var r = await HttpHelper.GetAsync<dynamic>($"https://api.github.com/repos/{username}/{repo}/releases/latest");
return new ReleaseInfo
{
TagName = r.tag_name,
Url = r.html_url,
CraeteTime = r.created_at,
Name = r.name,
Body = r.body
};
}
finally
{
HttpHelper.HttpClient.DefaultRequestHeaders.UserAgent.Remove(headerValue);
}
}
public class ReleaseInfo
{
public string TagName { get; set; }
public string Url { get; set; }
public DateTime CraeteTime { get; set; }
public string Name { get; set; }
public string Body { get; set; }
}
}
}

View File

@ -222,6 +222,7 @@
<Compile Include="Game\ItemMap.cs" />
<Compile Include="Game\SetStatsCommand.cs" />
<Compile Include="Game\TextMapData.cs" />
<Compile Include="Github\ReleaseAPI.cs" />
<Compile Include="OpenCommand\OpenCommandAPI.cs" />
<Compile Include="MultiLanguage.cs" />
<Compile Include="Program.cs" />

View File

@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.2.0")]
[assembly: AssemblyVersion("1.1.0")]
[assembly: AssemblyFileVersion("1.0.0")]

View File

@ -403,6 +403,15 @@ namespace GrasscutterTools.Properties {
}
}
/// <summary>
/// 查找类似 检查到新版本 的本地化字符串。
/// </summary>
internal static string CheckToNewVersion {
get {
return ResourceManager.GetString("CheckToNewVersion", resourceCulture);
}
}
/// <summary>
/// 查找类似 无,晴天,多云,雨天,雷暴,雪天,雾天 的本地化字符串。
/// </summary>
@ -715,6 +724,15 @@ namespace GrasscutterTools.Properties {
}
}
/// <summary>
/// 查找类似 版本名:{0}\n更新时间{1}\n更新内容\n{2}\n\n是否查看更新选择否将不再提醒该版本。 的本地化字符串。
/// </summary>
internal static string NewVersionInfo {
get {
return ResourceManager.GetString("NewVersionInfo", resourceCulture);
}
}
/// <summary>
/// 查找类似 1: (test)蒙德城主$UNRELEASED
///2: (test)哥哥$UNRELEASED

View File

@ -148,6 +148,9 @@
<data name="BrowserOpenFailedTip" xml:space="preserve">
<value>The browser failed to open. You can manually access the following address:</value>
</data>
<data name="CheckToNewVersion" xml:space="preserve">
<value>Check to new version</value>
</data>
<data name="ClimateType" xml:space="preserve">
<value>None,Sunny,Partly cloudy,Rain,Thunderstorm,Snow,Fog</value>
</data>
@ -196,6 +199,9 @@
<data name="Monster" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\en-us\Monster.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="NewVersionInfo" xml:space="preserve">
<value>Name : {0}\nUpdate time : {1}\nUpdate info : \n{2}\n\nDo you want to check for updates? Selecting No will no longer remind you of this version.</value>
</data>
<data name="NPC" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\en-us\NPC.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>

View File

@ -148,6 +148,9 @@
<data name="BrowserOpenFailedTip" xml:space="preserve">
<value>浏览器打开失败,你可以通过以下链接手动访问:</value>
</data>
<data name="CheckToNewVersion" xml:space="preserve">
<value>检查到新版本</value>
</data>
<data name="ClimateType" xml:space="preserve">
<value>无,晴天,多云,雨天,雷暴,雪天,雾天</value>
</data>
@ -199,6 +202,9 @@
<data name="Monster" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\zh-cn\Monster.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="NewVersionInfo" xml:space="preserve">
<value>版本名:{0}\n更新时间{1}\n更新内容\n{2}\n\n是否查看更新选择否将不再提醒该版本。</value>
</data>
<data name="NPC" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\zh-cn\NPC.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>

View File

@ -106,5 +106,17 @@ namespace GrasscutterTools.Properties {
this["Host"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string CheckedLastVersion {
get {
return ((string)(this["CheckedLastVersion"]));
}
set {
this["CheckedLastVersion"] = value;
}
}
}
}

View File

@ -23,5 +23,8 @@
<Setting Name="Host" Type="System.String" Scope="User">
<Value Profile="(Default)">https://127.0.0.1</Value>
</Setting>
<Setting Name="CheckedLastVersion" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
</Settings>
</SettingsFile>

View File

@ -28,7 +28,10 @@ namespace GrasscutterTools.Utils
{
public static class HttpHelper
{
private static readonly HttpClient httpClient = new HttpClient();
public static readonly HttpClient HttpClient = new HttpClient
{
Timeout = TimeSpan.FromSeconds(30),
};
static HttpHelper()
{
@ -39,7 +42,7 @@ namespace GrasscutterTools.Utils
{
try
{
var responseMessage = await httpClient.GetAsync(url);
var responseMessage = await HttpClient.GetAsync(url);
if (responseMessage.IsSuccessStatusCode)
{
var responseString = await responseMessage.Content.ReadAsStringAsync();
@ -63,7 +66,7 @@ namespace GrasscutterTools.Utils
try
{
var content = new StringContent(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json");
var responseMessage = await httpClient.PostAsync(url, content);
var responseMessage = await HttpClient.PostAsync(url, content);
if (responseMessage.IsSuccessStatusCode)
{
var responseString = await responseMessage.Content.ReadAsStringAsync();