mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-06-21 16:14:28 +08:00
0.7.2
This commit is contained in:
@@ -2,9 +2,9 @@ using System;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using LanMountainDesktop.Models;
|
||||
using LanMountainDesktop.PluginSdk;
|
||||
using LanMountainDesktop.Services;
|
||||
using LanMountainDesktop.Services.Settings;
|
||||
using LanMountainDesktop.PluginSdk;
|
||||
|
||||
namespace LanMountainDesktop.ViewModels;
|
||||
|
||||
@@ -19,7 +19,7 @@ public sealed partial class PrivacySettingsPageViewModel : ViewModelBase
|
||||
|
||||
public PrivacySettingsPageViewModel(ISettingsFacadeService settingsFacade)
|
||||
{
|
||||
_settingsFacade = settingsFacade;
|
||||
_settingsFacade = settingsFacade ?? throw new ArgumentNullException(nameof(settingsFacade));
|
||||
_languageCode = _localizationService.NormalizeLanguageCode(_settingsFacade.Region.Get().LanguageCode);
|
||||
RefreshLocalizedText();
|
||||
|
||||
@@ -35,7 +35,7 @@ public sealed partial class PrivacySettingsPageViewModel : ViewModelBase
|
||||
private bool _uploadAnonymousUsageData;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _deviceId = string.Empty;
|
||||
private string _telemetryId = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _privacyHeader = string.Empty;
|
||||
@@ -53,13 +53,13 @@ public sealed partial class PrivacySettingsPageViewModel : ViewModelBase
|
||||
private string _usageUploadDescription = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _deviceIdHeader = string.Empty;
|
||||
private string _telemetryIdHeader = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _deviceIdDescription = string.Empty;
|
||||
private string _telemetryIdDescription = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _refreshDeviceIdText = string.Empty;
|
||||
private string _refreshTelemetryIdText = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _viewPrivacyPolicyText = string.Empty;
|
||||
@@ -72,32 +72,27 @@ public sealed partial class PrivacySettingsPageViewModel : ViewModelBase
|
||||
var state = _settingsFacade.Privacy.Get();
|
||||
UploadAnonymousCrashData = state.UploadAnonymousCrashData;
|
||||
UploadAnonymousUsageData = state.UploadAnonymousUsageData;
|
||||
DeviceId = DeviceIdService.Instance.DeviceId;
|
||||
TelemetryId = TelemetryServices.Identity?.TelemetryId ?? string.Empty;
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void RefreshDeviceId()
|
||||
private void RefreshTelemetryId()
|
||||
{
|
||||
try
|
||||
{
|
||||
var deviceInfo = $"{Environment.MachineName}|{Environment.ProcessorCount}|{Environment.OSVersion}|{Environment.UserName}|{DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()}";
|
||||
using var sha = System.Security.Cryptography.SHA256.Create();
|
||||
var hash = sha.ComputeHash(System.Text.Encoding.UTF8.GetBytes(deviceInfo));
|
||||
var newDeviceId = Convert.ToHexString(hash)[..32].ToLower();
|
||||
var identity = TelemetryServices.Identity;
|
||||
if (identity is null)
|
||||
{
|
||||
AppLogger.Warn("PrivacySettings", "Telemetry identity service is unavailable.");
|
||||
return;
|
||||
}
|
||||
|
||||
var snapshot = _settingsFacade.Settings.LoadSnapshot<Models.AppSettingsSnapshot>(SettingsScope.App);
|
||||
snapshot.DeviceId = newDeviceId;
|
||||
_settingsFacade.Settings.SaveSnapshot(
|
||||
SettingsScope.App,
|
||||
snapshot,
|
||||
changedKeys: [nameof(Models.AppSettingsSnapshot.DeviceId)]);
|
||||
|
||||
DeviceId = newDeviceId;
|
||||
AppLogger.Info("PrivacySettings", $"Device ID refreshed: {newDeviceId}");
|
||||
TelemetryId = identity.RefreshTelemetryId();
|
||||
AppLogger.Info("PrivacySettings", $"Telemetry ID refreshed: {TelemetryId}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
AppLogger.Warn("PrivacySettings", "Failed to refresh device ID.", ex);
|
||||
AppLogger.Warn("PrivacySettings", "Failed to refresh telemetry ID.", ex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,12 +127,18 @@ public sealed partial class PrivacySettingsPageViewModel : ViewModelBase
|
||||
{
|
||||
PrivacyHeader = L("settings.privacy.title", "Privacy");
|
||||
CrashUploadHeader = L("settings.privacy.crash_upload_title", "Anonymous crash data uploads");
|
||||
CrashUploadDescription = L("settings.privacy.crash_upload_description", "Help us improve application stability.");
|
||||
UsageUploadHeader = L("settings.privacy.usage_upload_title", "Anonymous usage data uploads");
|
||||
UsageUploadDescription = L("settings.privacy.usage_upload_description", "Help us improve application features.");
|
||||
DeviceIdHeader = L("settings.privacy.device_id_title", "Device ID");
|
||||
DeviceIdDescription = L("settings.privacy.device_id_description", "Unique identifier for this device. Click refresh to regenerate.");
|
||||
RefreshDeviceIdText = L("settings.privacy.refresh_device_id", "Refresh");
|
||||
CrashUploadDescription = L(
|
||||
"settings.privacy.crash_upload_description",
|
||||
"Send crash reports to help us improve stability.");
|
||||
UsageUploadHeader = L("settings.privacy.usage_upload_title", "Anonymous usage analytics");
|
||||
UsageUploadDescription = L(
|
||||
"settings.privacy.usage_upload_description",
|
||||
"Send usage events to help us understand feature usage and session flow.");
|
||||
TelemetryIdHeader = L("settings.privacy.telemetry_id_title", "Telemetry ID");
|
||||
TelemetryIdDescription = L(
|
||||
"settings.privacy.telemetry_id_description",
|
||||
"A refreshable anonymous identifier used for detailed telemetry sessions.");
|
||||
RefreshTelemetryIdText = L("settings.privacy.refresh_telemetry_id", "Refresh");
|
||||
PrivacyPolicyHintPrefix = L("settings.privacy.policy_hint_prefix", "For more details, please ");
|
||||
ViewPrivacyPolicyText = L("settings.privacy.view_policy", "view our privacy policy");
|
||||
}
|
||||
@@ -147,10 +148,7 @@ public sealed partial class PrivacySettingsPageViewModel : ViewModelBase
|
||||
{
|
||||
try
|
||||
{
|
||||
// 触发隐私政策查看事件
|
||||
AppLogger.Info("PrivacySettings", "User requested to view privacy policy.");
|
||||
|
||||
// 发送事件通知显示隐私政策
|
||||
ViewPrivacyPolicyRequested?.Invoke();
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
Reference in New Issue
Block a user