improve:用户分级
This commit is contained in:
@@ -513,7 +513,7 @@ namespace Ink_Canvas.Helpers
|
|||||||
// 尝试获取当前版本的发布时间
|
// 尝试获取当前版本的发布时间
|
||||||
DateTime? currentVersionReleaseTime = await GetVersionReleaseTime(localVersion, channel);
|
DateTime? currentVersionReleaseTime = await GetVersionReleaseTime(localVersion, channel);
|
||||||
|
|
||||||
bool shouldPush = DeviceIdentifier.ShouldPushUpdate(apiVersion, releaseTime, true, currentVersionReleaseTime); // 明确标记为自动更新
|
bool shouldPush = DeviceIdentifier.ShouldPushUpdate(apiVersion, releaseTime, true, currentVersionReleaseTime, localVersion); // 明确标记为自动更新
|
||||||
if (!shouldPush)
|
if (!shouldPush)
|
||||||
{
|
{
|
||||||
var priority = DeviceIdentifier.GetUpdatePriority();
|
var priority = DeviceIdentifier.GetUpdatePriority();
|
||||||
@@ -569,7 +569,7 @@ namespace Ink_Canvas.Helpers
|
|||||||
// 尝试获取当前版本的发布时间
|
// 尝试获取当前版本的发布时间
|
||||||
DateTime? currentVersionReleaseTime = await GetVersionReleaseTime(localVersion, channel);
|
DateTime? currentVersionReleaseTime = await GetVersionReleaseTime(localVersion, channel);
|
||||||
|
|
||||||
bool shouldPush = DeviceIdentifier.ShouldPushUpdate(remoteVersion, DateTime.Now, true, currentVersionReleaseTime); // 明确标记为自动更新
|
bool shouldPush = DeviceIdentifier.ShouldPushUpdate(remoteVersion, DateTime.Now, true, currentVersionReleaseTime, localVersion); // 明确标记为自动更新
|
||||||
if (!shouldPush)
|
if (!shouldPush)
|
||||||
{
|
{
|
||||||
var priority = DeviceIdentifier.GetUpdatePriority();
|
var priority = DeviceIdentifier.GetUpdatePriority();
|
||||||
|
|||||||
@@ -1084,7 +1084,7 @@ namespace Ink_Canvas.Helpers
|
|||||||
/// <param name="isAutoUpdate">是否为自动更新检查(默认true,false表示版本修复)</param>
|
/// <param name="isAutoUpdate">是否为自动更新检查(默认true,false表示版本修复)</param>
|
||||||
/// <param name="currentVersionReleaseTime">当前版本发布时间</param>
|
/// <param name="currentVersionReleaseTime">当前版本发布时间</param>
|
||||||
/// <returns>是否应该推送更新</returns>
|
/// <returns>是否应该推送更新</returns>
|
||||||
public static bool ShouldPushUpdate(string updateVersion, DateTime releaseTime, bool isAutoUpdate = true, DateTime? currentVersionReleaseTime = null)
|
public static bool ShouldPushUpdate(string updateVersion, DateTime releaseTime, bool isAutoUpdate = true, DateTime? currentVersionReleaseTime = null, string localVersion = null)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -1116,6 +1116,25 @@ namespace Ink_Canvas.Helpers
|
|||||||
daysBetweenVersions = (DateTime.Now - releaseTime).TotalDays;
|
daysBetweenVersions = (DateTime.Now - releaseTime).TotalDays;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 当无法获取版本发布时间时,判断版本号差异
|
||||||
|
if (!currentVersionReleaseTime.HasValue && !string.IsNullOrEmpty(localVersion))
|
||||||
|
{
|
||||||
|
int versionDiff = CalculateVersionGenerationDifference(localVersion, updateVersion);
|
||||||
|
LogHelper.WriteLogToFile($"DeviceIdentifier | 无法获取版本发布时间,使用版本号差异判断 - 本地版本: {localVersion}, 远程版本: {updateVersion}, 代数差异: {versionDiff}");
|
||||||
|
|
||||||
|
// 当版本号代数差异大于3时自动更新
|
||||||
|
if (versionDiff > 3)
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile($"DeviceIdentifier | 版本号代数差异({versionDiff})大于3,自动更新");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile($"DeviceIdentifier | 版本号代数差异({versionDiff})不大于3,暂不更新");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 计算最近活跃度(最后一次使用距今的天数)
|
// 计算最近活跃度(最后一次使用距今的天数)
|
||||||
var daysSinceLastUse = (DateTime.Now - stats.LastLaunchTime).TotalDays;
|
var daysSinceLastUse = (DateTime.Now - stats.LastLaunchTime).TotalDays;
|
||||||
|
|
||||||
@@ -1295,6 +1314,77 @@ namespace Ink_Canvas.Helpers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 计算版本号代数差异
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="localVersion">本地版本号</param>
|
||||||
|
/// <param name="remoteVersion">远程版本号</param>
|
||||||
|
/// <returns>版本号代数差异,如果无法计算则返回0</returns>
|
||||||
|
private static int CalculateVersionGenerationDifference(string localVersion, string remoteVersion)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(localVersion) || string.IsNullOrEmpty(remoteVersion))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// 移除可能的前缀(如 "v")
|
||||||
|
var cleanLocal = localVersion.TrimStart('v', 'V');
|
||||||
|
var cleanRemote = remoteVersion.TrimStart('v', 'V');
|
||||||
|
|
||||||
|
// 解析版本号 (格式: X.X.X.X)
|
||||||
|
var localParts = cleanLocal.Split('.');
|
||||||
|
var remoteParts = cleanRemote.Split('.');
|
||||||
|
|
||||||
|
if (localParts.Length < 4 || remoteParts.Length < 4)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// 解析四个版本号部分
|
||||||
|
if (int.TryParse(localParts[0], out int localMajor) &&
|
||||||
|
int.TryParse(localParts[1], out int localMinor) &&
|
||||||
|
int.TryParse(localParts[2], out int localBuild) &&
|
||||||
|
int.TryParse(localParts[3], out int localRevision) &&
|
||||||
|
int.TryParse(remoteParts[0], out int remoteMajor) &&
|
||||||
|
int.TryParse(remoteParts[1], out int remoteMinor) &&
|
||||||
|
int.TryParse(remoteParts[2], out int remoteBuild) &&
|
||||||
|
int.TryParse(remoteParts[3], out int remoteRevision))
|
||||||
|
{
|
||||||
|
// 计算代数差异:主版本号差异 * 1000 + 次版本号差异 * 100 + 构建号差异 * 10 + 修订号差异
|
||||||
|
int majorDiff = remoteMajor - localMajor;
|
||||||
|
int minorDiff = remoteMinor - localMinor;
|
||||||
|
int buildDiff = remoteBuild - localBuild;
|
||||||
|
int revisionDiff = remoteRevision - localRevision;
|
||||||
|
|
||||||
|
// 如果主版本号不同,则代数差异很大
|
||||||
|
if (majorDiff != 0)
|
||||||
|
{
|
||||||
|
return majorDiff * 1000 + minorDiff * 100 + buildDiff * 10 + revisionDiff;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果次版本号不同,则代数差异中等
|
||||||
|
if (minorDiff != 0)
|
||||||
|
{
|
||||||
|
return minorDiff * 100 + buildDiff * 10 + revisionDiff;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果构建号不同,则代数差异较小
|
||||||
|
if (buildDiff != 0)
|
||||||
|
{
|
||||||
|
return buildDiff * 10 + revisionDiff;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 只有修订号不同,代数差异最小
|
||||||
|
return revisionDiff;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile($"DeviceIdentifier | 计算版本号代数差异失败: {ex.Message}", LogHelper.LogType.Warning);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 根据更新类型获取紧急程度倍数(仅用于自动更新分级)
|
/// 根据更新类型获取紧急程度倍数(仅用于自动更新分级)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user