using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Threading.Tasks;
using Sentry;
namespace Ink_Canvas.Helpers
{
///
/// 遥测上传辅助类:根据用户设置,通过 Sentry 上传 usage_stats.enc 和 Crashes 目录的摘要信息。
///
internal static class TelemetryUploader
{
///
/// 根据当前设置决定是否上传遥测数据。
/// 在主窗口加载完成后调用一次即可。
///
public static Task UploadTelemetryIfNeededAsync()
{
return Task.Run(() =>
{
try
{
var settings = MainWindow.Settings;
if (settings == null || settings.Startup == null)
{
return;
}
var level = settings.Startup.TelemetryUploadLevel;
if (level == TelemetryUploadLevel.None)
{
return; // 用户未开启
}
// 获取并校验设备ID
string deviceId = DeviceIdentifier.GetDeviceId();
if (string.IsNullOrWhiteSpace(deviceId) || deviceId.Length < 5)
{
LogHelper.WriteLogToFile("TelemetryUploader | 设备ID无效,取消遥测上传", LogHelper.LogType.Warning);
return;
}
// 读取 usage_stats.enc 作为基础数据
string usageStatsPath = Path.Combine(App.RootPath, "usage_stats.enc");
string usageStatsContent = null;
if (File.Exists(usageStatsPath))
{
try
{
usageStatsContent = File.ReadAllText(usageStatsPath);
}
catch (Exception ex)
{
LogHelper.WriteLogToFile(
$"TelemetryUploader | 读取 usage_stats.enc 失败: {ex.Message}",
LogHelper.LogType.Warning);
}
}
// 可选:读取 Crashes 目录下的崩溃日志(仅在扩展模式时上传)
List