v1.2.0: 重构为插件+独立Manager架构,横版UI,精确保留文本框边距的文档转换
This commit is contained in:
85
Better-EN5/InkAutoSaveService.cs
Normal file
85
Better-EN5/InkAutoSaveService.cs
Normal file
@@ -0,0 +1,85 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text.Json;
|
||||
using System.Threading.Tasks;
|
||||
using BetterEN5.Services;
|
||||
|
||||
namespace BetterEN5
|
||||
{
|
||||
public class InkAutoSaveService
|
||||
{
|
||||
private static readonly string SettingsPath = Path.Combine(
|
||||
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
|
||||
"BetterEN5", "ink-settings.json");
|
||||
|
||||
public async Task StartAsync()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
try
|
||||
{
|
||||
var settings = LoadSettings();
|
||||
if (settings != null && settings.AutoSaveEnabled)
|
||||
{
|
||||
var dir = settings.SaveDirectory;
|
||||
if (!string.IsNullOrEmpty(dir))
|
||||
{
|
||||
if (!Directory.Exists(dir))
|
||||
Directory.CreateDirectory(dir);
|
||||
var timestamp = DateTime.Now.ToString("yyyyMMdd-HHmmss");
|
||||
var filePath = Path.Combine(dir, $"ink-auto-{timestamp}.ink.json");
|
||||
var inkService = new InkService();
|
||||
await inkService.ExportInkAsync(filePath);
|
||||
|
||||
var retentionMinutes = settings.AutoSaveIntervalMinutes * 2;
|
||||
CleanOldFiles(dir, TimeSpan.FromMinutes(retentionMinutes > 0 ? retentionMinutes : 10));
|
||||
}
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
|
||||
var intervalMinutes = LoadSettings()?.AutoSaveIntervalMinutes ?? 5;
|
||||
await Task.Delay(TimeSpan.FromMinutes(Math.Max(1, intervalMinutes)));
|
||||
}
|
||||
}
|
||||
|
||||
private static InkAutoSaveSettings? LoadSettings()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (File.Exists(SettingsPath))
|
||||
{
|
||||
var json = File.ReadAllText(SettingsPath);
|
||||
return JsonSerializer.Deserialize<InkAutoSaveSettings>(json);
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
return null;
|
||||
}
|
||||
|
||||
private static void CleanOldFiles(string dir, TimeSpan maxAge)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!Directory.Exists(dir)) return;
|
||||
foreach (var file in Directory.GetFiles(dir, "ink-auto-*.ink.json"))
|
||||
{
|
||||
try
|
||||
{
|
||||
if (DateTime.Now - File.GetCreationTime(file) > maxAge)
|
||||
File.Delete(file);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
}
|
||||
|
||||
public class InkAutoSaveSettings
|
||||
{
|
||||
public bool AutoSaveEnabled { get; set; }
|
||||
public int AutoSaveIntervalMinutes { get; set; } = 5;
|
||||
public string SaveDirectory { get; set; } = "";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user