Skip to content

Commit 7861e14

Browse files
committed
feat: 更新服务
1 parent 23da55b commit 7861e14

File tree

13 files changed

+518
-48
lines changed

13 files changed

+518
-48
lines changed

SRAFrontend/App.axaml.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public override void OnFrameworkInitializationCompleted()
3939
desktop.Exit += (_, _) =>
4040
{
4141
serviceProvider.GetRequiredService<SettingsService>().SaveSettings();
42+
serviceProvider.GetRequiredService<CacheService>().SaveCache();
4243
};
4344
}
4445

@@ -60,7 +61,9 @@ private static void ConfigureServices(IServiceCollection services)
6061
};
6162
var toastManager = provider.GetRequiredService<ISukiToastManager>();
6263
var announcementService = provider.GetRequiredService<AnnouncementService>();
63-
return new MainWindowViewModel(pages, toastManager, announcementService);
64+
var settingsService = provider.GetRequiredService<SettingsService>();
65+
var updateService = provider.GetRequiredService<UpdateService>();
66+
return new MainWindowViewModel(pages, toastManager, announcementService, settingsService, updateService);
6467
});
6568
services.AddTransient<HomePageViewModel>();
6669
services.AddTransient<TaskPageViewModel>();
@@ -74,6 +77,7 @@ private static void ConfigureServices(IServiceCollection services)
7477
services.AddSingleton<SettingsService>();
7578
services.AddTransient<UpdateService>();
7679
services.AddSingleton<DataPersistenceService>();
80+
services.AddSingleton<CacheService>();
7781
}
7882

7983
private void DisableAvaloniaDataAnnotationValidation()

SRAFrontend/Models/Cache.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace SRAFrontend.Models;
2+
3+
public class Cache
4+
{
5+
public string CdkStatus { get; set; } = "";
6+
public string CdkStatusForeground { get; set; } = "#F5222D";
7+
}

SRAFrontend/Models/Settings.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,10 @@ public class Settings
55
public double BackgroundOpacity { get; set; } = 0.9;
66
public int Language { get; set; } = 1; // 0: English, 1: Simplified Chinese
77
public double Zoom { get; set; } = 1;
8+
public int DownloadChannel { get; set; } = 1; // 0: Mirror, 1: GitHub
9+
public int AppChannel { get; set; } // 0: stable, 1: beta
810
public string MirrorChyanCdk { get; set; } = "";
11+
public bool EnableAutoUpdate { get; set; } = true;
12+
13+
public string[] Proxies { get; set; } = ["https://tvv.tw/"];
914
}

SRAFrontend/Models/VersionResponse.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class VersionResponse
1212
public string Msg { get; init; } = "";
1313

1414
[JsonPropertyName("data")]
15-
public VersionResponseData? Data { get; init; }
15+
public VersionResponseData Data { get; set; } =new();
1616
}
1717

1818
public class VersionResponseData
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using SRAFrontend.Models;
2+
3+
namespace SRAFrontend.Services;
4+
5+
public class CacheService(DataPersistenceService dataPersistenceService)
6+
{
7+
public readonly Cache Cache = dataPersistenceService.LoadCache();
8+
9+
public void SaveCache()
10+
{
11+
dataPersistenceService.SaveCache(Cache);
12+
}
13+
}

SRAFrontend/Services/DataPersistenceService.cs

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,14 @@ namespace SRAFrontend.Services;
88
public class DataPersistenceService
99
{
1010
private readonly string _baseStorageDirectory;
11-
12-
private readonly string _settingsFilePath;
1311
private readonly string _cacheFilePath;
14-
private readonly JsonSerializerOptions _jsonSerializerOptions= new JsonSerializerOptions
12+
13+
private readonly JsonSerializerOptions _jsonSerializerOptions = new()
1514
{
1615
WriteIndented = true
1716
};
1817

19-
private void EnsurePath()
20-
{
21-
if (!Directory.Exists(_baseStorageDirectory)) Directory.CreateDirectory(_baseStorageDirectory);
22-
if (!File.Exists(_settingsFilePath)) File.Create(_settingsFilePath).Dispose();
23-
if (!File.Exists(_cacheFilePath)) File.Create(_cacheFilePath).Dispose();
24-
}
18+
private readonly string _settingsFilePath;
2519

2620
public DataPersistenceService()
2721
{
@@ -32,21 +26,41 @@ public DataPersistenceService()
3226
_cacheFilePath = Path.Combine(_baseStorageDirectory, "cache.json");
3327
EnsurePath();
3428
}
35-
29+
30+
private void EnsurePath()
31+
{
32+
if (!Directory.Exists(_baseStorageDirectory)) Directory.CreateDirectory(_baseStorageDirectory);
33+
if (!File.Exists(_settingsFilePath)) File.Create(_settingsFilePath).Dispose();
34+
if (!File.Exists(_cacheFilePath)) File.Create(_cacheFilePath).Dispose();
35+
}
36+
3637
public Settings LoadSettings()
3738
{
3839
EnsurePath();
3940
var json = File.ReadAllText(_settingsFilePath);
40-
if (string.IsNullOrWhiteSpace(json))
41-
{
42-
return new Settings();
43-
}
41+
if (string.IsNullOrWhiteSpace(json)) return new Settings();
4442
return JsonSerializer.Deserialize<Settings>(json) ?? new Settings();
4543
}
44+
4645
public void SaveSettings(Settings settings)
4746
{
4847
EnsurePath();
4948
var json = JsonSerializer.Serialize(settings, _jsonSerializerOptions);
5049
File.WriteAllText(_settingsFilePath, json);
5150
}
51+
52+
public Cache LoadCache()
53+
{
54+
EnsurePath();
55+
var json = File.ReadAllText(_cacheFilePath);
56+
if (string.IsNullOrWhiteSpace(json)) return new Cache();
57+
return JsonSerializer.Deserialize<Cache>(json) ?? new Cache();
58+
}
59+
60+
public void SaveCache(Cache cache)
61+
{
62+
EnsurePath();
63+
var json = JsonSerializer.Serialize(cache, _jsonSerializerOptions);
64+
File.WriteAllText(_cacheFilePath, json);
65+
}
5266
}
Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,33 @@
1-
using SRAFrontend.Models;
1+
using System;
2+
using System.Security.Cryptography;
3+
using System.Text;
4+
using SRAFrontend.Models;
25

36
namespace SRAFrontend.Services;
47

5-
public class SettingsService(DataPersistenceService dataPersistenceService)
8+
public class SettingsService
69
{
7-
public Settings Settings { get; } = dataPersistenceService.LoadSettings();
8-
public void SaveSettings() => dataPersistenceService.SaveSettings(Settings);
10+
private readonly DataPersistenceService _dataPersistenceService;
11+
public readonly Settings Settings;
12+
13+
public SettingsService(DataPersistenceService dataPersistenceService)
14+
{
15+
_dataPersistenceService = dataPersistenceService;
16+
Settings = dataPersistenceService.LoadSettings();
17+
if (Settings.MirrorChyanCdk == "") return;
18+
var cdkBytes = Convert.FromBase64String(Settings.MirrorChyanCdk);
19+
var decodedBytes = ProtectedData.Unprotect(cdkBytes, null, DataProtectionScope.CurrentUser);
20+
Settings.MirrorChyanCdk = Encoding.UTF8.GetString(decodedBytes);
21+
}
22+
23+
public void SaveSettings()
24+
{
25+
if (Settings.MirrorChyanCdk != "")
26+
{
27+
var cdkBytes = Encoding.UTF8.GetBytes(Settings.MirrorChyanCdk);
28+
var encodedBytes = ProtectedData.Protect(cdkBytes, null, DataProtectionScope.CurrentUser);
29+
Settings.MirrorChyanCdk = Convert.ToBase64String(encodedBytes);
30+
}
31+
_dataPersistenceService.SaveSettings(Settings);
32+
}
933
}

0 commit comments

Comments
 (0)