2025-03-27 14:43:18 +08:00
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
|
using System.ComponentModel.DataAnnotations;
|
|
|
|
|
|
using System.IO;
|
2025-03-24 14:44:54 +08:00
|
|
|
|
using System.Windows;
|
2025-03-20 09:09:14 +08:00
|
|
|
|
using System.Windows.Media;
|
|
|
|
|
|
using HeBianGu.Base.WpfBase;
|
2025-03-17 10:58:59 +08:00
|
|
|
|
using HeBianGu.Control.Guide;
|
|
|
|
|
|
using HeBianGu.Control.ThemeSet;
|
|
|
|
|
|
using HeBianGu.General.WpfControlLib;
|
|
|
|
|
|
using HeBianGu.Service.Mvp;
|
|
|
|
|
|
using HeBianGu.Systems.Identity;
|
|
|
|
|
|
using HeBianGu.Systems.Setting;
|
2025-04-11 16:11:55 +08:00
|
|
|
|
using HeBianGu.Window.Link;
|
2025-04-24 14:22:38 +08:00
|
|
|
|
using Hopetry.Provider;
|
2025-03-21 13:12:43 +08:00
|
|
|
|
using Hopetry.Services;
|
2025-07-04 15:18:41 +08:00
|
|
|
|
using Hopetry.ViewModel.Sync;
|
2025-04-02 09:30:13 +08:00
|
|
|
|
using SqlSugar;
|
2025-03-24 14:44:54 +08:00
|
|
|
|
using SystemSetting = FileUploader.Models.SystemSetting;
|
2025-03-13 09:58:16 +08:00
|
|
|
|
|
2025-03-17 10:58:59 +08:00
|
|
|
|
namespace HeBianGu.App.Disk
|
2025-03-13 09:58:16 +08:00
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
2025-03-17 10:58:59 +08:00
|
|
|
|
/// App.xaml 的交互逻辑
|
2025-03-13 09:58:16 +08:00
|
|
|
|
/// </summary>
|
2025-03-17 10:58:59 +08:00
|
|
|
|
public partial class App : ApplicationBase
|
2025-03-13 09:58:16 +08:00
|
|
|
|
{
|
2025-07-18 10:51:58 +08:00
|
|
|
|
|
|
|
|
|
|
protected override void OnStartup(StartupEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
base.OnStartup(e);
|
|
|
|
|
|
// 全局异常捕获
|
|
|
|
|
|
DispatcherUnhandledException += (s, ex) =>
|
|
|
|
|
|
LogError("UI Thread Error: " + ex.Exception.ToString());
|
|
|
|
|
|
|
|
|
|
|
|
AppDomain.CurrentDomain.UnhandledException += (s, ex) =>
|
|
|
|
|
|
LogError("AppDomain Error: " + ex.ExceptionObject.ToString());
|
|
|
|
|
|
|
|
|
|
|
|
TaskScheduler.UnobservedTaskException += (s, ex) =>
|
|
|
|
|
|
LogError("Task Error: " + ex.Exception.ToString());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void LogError(string message)
|
|
|
|
|
|
{
|
|
|
|
|
|
File.WriteAllText("error.log", $"[{DateTime.Now}] {message}");
|
|
|
|
|
|
}
|
2025-04-11 16:11:55 +08:00
|
|
|
|
public new static ComponentResourceKey Custom
|
|
|
|
|
|
{
|
2025-04-27 17:02:59 +08:00
|
|
|
|
get => new ComponentResourceKey(typeof(LinkWindowBase), (object)"S.Window.Link.Custom");
|
2025-04-11 16:11:55 +08:00
|
|
|
|
}
|
2025-04-27 17:02:59 +08:00
|
|
|
|
|
|
|
|
|
|
public static ComponentResourceKey WaitingPercent =>
|
|
|
|
|
|
new ComponentResourceKey(typeof(ProgressBarKeys), "S.ProgressBar.Custom");
|
2025-04-16 13:48:45 +08:00
|
|
|
|
|
2025-03-17 10:58:59 +08:00
|
|
|
|
protected override MainWindowBase CreateMainWindow(StartupEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new ShellWindow();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-03-27 14:43:18 +08:00
|
|
|
|
|
2025-03-17 10:58:59 +08:00
|
|
|
|
protected override void ConfigureServices(IServiceCollection services)
|
|
|
|
|
|
{
|
|
|
|
|
|
base.ConfigureServices(services);
|
2025-03-22 15:29:32 +08:00
|
|
|
|
// 本地持久化
|
|
|
|
|
|
services.AddXmlSerialize();
|
2025-03-29 11:16:54 +08:00
|
|
|
|
// 设置
|
|
|
|
|
|
services.AddSetting();
|
2025-03-29 17:12:54 +08:00
|
|
|
|
// 另外保存设置目录
|
|
|
|
|
|
//services.AddSettingPath();
|
2025-03-29 11:16:54 +08:00
|
|
|
|
|
2025-03-21 13:12:43 +08:00
|
|
|
|
// minio 服务
|
|
|
|
|
|
services.AddSingleton<MinioService, MinioService>();
|
2025-03-27 13:27:06 +08:00
|
|
|
|
|
2025-03-17 10:58:59 +08:00
|
|
|
|
services.AddWindowDialog();
|
|
|
|
|
|
services.AddObjectWindowDialog();
|
2025-03-20 09:09:14 +08:00
|
|
|
|
services.AddWindowAnimation();
|
2025-03-17 10:58:59 +08:00
|
|
|
|
services.AddMessageProxy();
|
|
|
|
|
|
services.AddPropertyGridMessage();
|
|
|
|
|
|
services.AddAutoColumnPagedDataGridMessage();
|
|
|
|
|
|
//services.AddNotifyMessage();
|
2025-03-29 11:16:54 +08:00
|
|
|
|
|
2025-03-20 09:09:14 +08:00
|
|
|
|
// 认证
|
|
|
|
|
|
// services.AddIdentity(x => x.ProductFontSize = 50);
|
2025-03-17 10:58:59 +08:00
|
|
|
|
services.AddMvc();
|
|
|
|
|
|
//services.AddProjectDefault();
|
2025-03-22 15:29:32 +08:00
|
|
|
|
|
2025-03-17 10:58:59 +08:00
|
|
|
|
services.AddXmlWebSerializerService();
|
|
|
|
|
|
//// Do :注册软件更新页面
|
2025-03-20 09:09:14 +08:00
|
|
|
|
/* services.AddAutoUpgrade(x =>
|
|
|
|
|
|
{
|
|
|
|
|
|
x.Uri = "https://gitee.com/hebiangu/wpf-auto-update/raw/master/Install/Computer/AutoUpdate.xml";
|
|
|
|
|
|
x.UseIEDownload = true;
|
|
|
|
|
|
});*/
|
2025-03-29 11:16:54 +08:00
|
|
|
|
|
2025-03-17 10:58:59 +08:00
|
|
|
|
services.AddDESCryptService();
|
|
|
|
|
|
services.AddPrintBoxMessage();
|
2025-03-22 15:29:32 +08:00
|
|
|
|
// ???
|
2025-03-17 10:58:59 +08:00
|
|
|
|
services.AddWindowExplorer();
|
|
|
|
|
|
|
|
|
|
|
|
#region - More -
|
2025-03-20 09:09:14 +08:00
|
|
|
|
|
2025-03-17 10:58:59 +08:00
|
|
|
|
//services.AddUpgradeViewPresenter();
|
|
|
|
|
|
//services.AddLicense();
|
|
|
|
|
|
//services.AddLicenseViewPresenter();
|
|
|
|
|
|
//services.AddVip();
|
|
|
|
|
|
//services.AddVipViewPresenter();
|
|
|
|
|
|
//services.AddSurveyViewPresenter();
|
|
|
|
|
|
//services.AddFeedbackViewPresenter();
|
|
|
|
|
|
services.AddLogoutViewPresenter();
|
2025-03-25 11:25:32 +08:00
|
|
|
|
//services.AddAboutViewPresenter();
|
2025-03-17 10:58:59 +08:00
|
|
|
|
services.AddMoreViewPresenter(x =>
|
|
|
|
|
|
{
|
|
|
|
|
|
//x.AddPersenter(UpgradeViewPresenter.Instance);
|
|
|
|
|
|
//x.AddPersenter(LicenseViewPresenter.Instance);
|
|
|
|
|
|
//x.AddPersenter(VipViewPresenter.Instance);
|
|
|
|
|
|
//x.AddPersenter(SurveyViewPresenter.Instance);
|
|
|
|
|
|
//x.AddPersenter(FeedbackViewPresenter.Instance);
|
2025-03-25 11:25:32 +08:00
|
|
|
|
//x.AddPersenter(AboutViewPresenter.Instance);
|
2025-03-17 10:58:59 +08:00
|
|
|
|
x.AddPersenter(LogoutViewPresenter.Instance);
|
|
|
|
|
|
});
|
2025-03-20 09:09:14 +08:00
|
|
|
|
|
2025-03-17 10:58:59 +08:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
2025-04-02 11:26:08 +08:00
|
|
|
|
|
2025-03-17 10:58:59 +08:00
|
|
|
|
#region - WindowCaption -
|
2025-03-20 09:09:14 +08:00
|
|
|
|
|
2025-03-25 11:25:32 +08:00
|
|
|
|
//以下各种功能按钮
|
|
|
|
|
|
//services.AddLoginViewPresenter();
|
2025-03-22 15:29:32 +08:00
|
|
|
|
// 引导功能按钮
|
2025-03-17 10:58:59 +08:00
|
|
|
|
services.AddGuideViewPresenter();
|
|
|
|
|
|
services.AddHideWindowViewPresenter();
|
2025-03-25 11:25:32 +08:00
|
|
|
|
services.AddSettingViewPrenter();
|
2025-03-17 10:58:59 +08:00
|
|
|
|
//services.AddThemeRightToolViewPresenter();
|
2025-03-25 10:37:50 +08:00
|
|
|
|
//services.AddThemeRightViewPresenter();
|
2025-03-17 10:58:59 +08:00
|
|
|
|
services.AddWindowCaptionViewPresenter(x =>
|
|
|
|
|
|
{
|
2025-03-25 11:25:32 +08:00
|
|
|
|
x.AddPersenter(LoginViewPresenter.Instance);
|
2025-03-17 10:58:59 +08:00
|
|
|
|
x.AddPersenter(MoreViewPresenter.Instance);
|
|
|
|
|
|
x.AddPersenter(GuideViewPresenter.Instance);
|
2025-03-25 11:25:32 +08:00
|
|
|
|
x.AddPersenter(HideWindowViewPresenter.Instance);
|
2025-03-17 10:58:59 +08:00
|
|
|
|
x.AddPersenter(SettingViewPresenter.Instance);
|
2025-03-25 11:25:32 +08:00
|
|
|
|
//x.AddPersenter(ThemeRightToolViewPresenter.Instance);
|
2025-03-17 10:58:59 +08:00
|
|
|
|
});
|
2025-03-13 09:58:16 +08:00
|
|
|
|
|
2025-03-17 10:58:59 +08:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
//string path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Module", "HeBianGu.Domain.FATFS.dll");
|
|
|
|
|
|
//var dll = Assembly.LoadFile(path);
|
|
|
|
|
|
//var find = dll.GetTypes().Where(x => typeof(IExplorerService).IsAssignableFrom(x))?.FirstOrDefault();
|
|
|
|
|
|
//ServiceRegistry.Instance.Register(typeof(IExplorerService), find);
|
|
|
|
|
|
//services.AddSingleton<IExplorerService, WindowExplorerServiceDemo>();
|
2025-04-24 14:22:38 +08:00
|
|
|
|
|
|
|
|
|
|
//minio分片上传修改
|
|
|
|
|
|
PartSizeOverride.OverrideMinioCalculator();
|
2025-04-02 11:26:08 +08:00
|
|
|
|
|
|
|
|
|
|
var minioService = services.GetService<MinioService>();
|
2025-03-29 11:16:54 +08:00
|
|
|
|
var bucketName = minioService._bucketName;
|
|
|
|
|
|
var xmlSerializerService = services.GetService<ISerializerService>();
|
2025-04-02 11:26:08 +08:00
|
|
|
|
if (!File.Exists("./settings.xml"))
|
|
|
|
|
|
{
|
|
|
|
|
|
var tempSetting = new SystemSetting();
|
|
|
|
|
|
tempSetting.TaskCount = 3;
|
2025-04-27 17:02:59 +08:00
|
|
|
|
tempSetting.SyncDir = Path.Combine(SelectDrive(), "HopetryBoxData");
|
2025-04-02 11:26:08 +08:00
|
|
|
|
if (!Directory.Exists(tempSetting.SyncDir))
|
|
|
|
|
|
{
|
|
|
|
|
|
Directory.CreateDirectory(tempSetting.SyncDir);
|
|
|
|
|
|
}
|
2025-04-27 17:02:59 +08:00
|
|
|
|
|
2025-04-02 11:26:08 +08:00
|
|
|
|
xmlSerializerService.Save("./settings.xml", tempSetting);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var setting = xmlSerializerService.Load<SystemSetting>("./settings.xml");
|
|
|
|
|
|
if (string.IsNullOrEmpty(setting.SyncDir))
|
2025-03-29 11:16:54 +08:00
|
|
|
|
{
|
2025-04-02 11:26:08 +08:00
|
|
|
|
var selectDrive = SelectDrive();
|
|
|
|
|
|
|
|
|
|
|
|
setting.SyncDir = Path.Combine(selectDrive, "HopetryBoxData");
|
|
|
|
|
|
if (!Directory.Exists(setting.SyncDir))
|
2025-03-29 11:16:54 +08:00
|
|
|
|
{
|
2025-04-02 11:26:08 +08:00
|
|
|
|
Directory.CreateDirectory(setting.SyncDir);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 保存配置
|
|
|
|
|
|
xmlSerializerService.Save("./settings.xml", setting);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (setting.TaskCount == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
setting.TaskCount = 3;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 创建统一的取消令牌源
|
|
|
|
|
|
var cancelToken = new CancellationTokenSource();
|
|
|
|
|
|
var temp = SyncSetting.Instance;
|
|
|
|
|
|
var notRun = true;
|
|
|
|
|
|
// 注册设置变更监听
|
|
|
|
|
|
temp.PropertyChanged += (s, e) =>
|
|
|
|
|
|
{
|
2025-07-04 14:22:51 +08:00
|
|
|
|
// 取下载目录
|
|
|
|
|
|
var setting1 = xmlSerializerService.Load<SystemSetting>("./settings.xml");
|
|
|
|
|
|
if (!string.IsNullOrEmpty(setting.SyncDir))
|
|
|
|
|
|
{
|
|
|
|
|
|
xmlSerializerService.Save("./settings.xml", setting);
|
|
|
|
|
|
setting.SyncDir = setting1.SyncDir;
|
|
|
|
|
|
}
|
2025-07-04 15:18:41 +08:00
|
|
|
|
|
2025-04-02 11:26:08 +08:00
|
|
|
|
if (temp.IsOn && notRun)
|
|
|
|
|
|
{
|
|
|
|
|
|
// 异步启动服务
|
|
|
|
|
|
Console.WriteLine("启动同步:");
|
|
|
|
|
|
try
|
2025-03-29 11:16:54 +08:00
|
|
|
|
{
|
2025-07-04 15:18:41 +08:00
|
|
|
|
var syncModel = services.GetService<SyncViewModel>();
|
|
|
|
|
|
Task.Run(async () =>
|
|
|
|
|
|
{
|
|
|
|
|
|
await minioService.MirrorAsync(bucketName, setting.SyncDir, (total, count, fileName) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
//添加同步信息
|
|
|
|
|
|
syncModel.SyncProgressText = $"同步中: {count}/{total} {fileName}";
|
|
|
|
|
|
},
|
|
|
|
|
|
setting.TaskCount);
|
|
|
|
|
|
syncModel.SyncProgressText = "同步完成";
|
|
|
|
|
|
});
|
2025-07-04 15:33:22 +08:00
|
|
|
|
Task.Run(async () =>
|
|
|
|
|
|
{
|
|
|
|
|
|
await minioService.RealTimeListen(bucketName, setting.SyncDir, ( fileName) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
//添加同步信息
|
2025-07-04 15:36:28 +08:00
|
|
|
|
syncModel.SyncProgressText = $"{fileName}";
|
2025-07-04 15:33:22 +08:00
|
|
|
|
},
|
|
|
|
|
|
cancellationToken: cancelToken.Token);
|
2025-07-04 15:36:28 +08:00
|
|
|
|
//syncModel.SyncProgressText = $"实时同步完成";
|
2025-07-04 15:33:22 +08:00
|
|
|
|
});
|
2025-04-02 11:26:08 +08:00
|
|
|
|
notRun = false;
|
2025-03-29 11:16:54 +08:00
|
|
|
|
}
|
2025-04-02 11:26:08 +08:00
|
|
|
|
catch (OperationCanceledException)
|
|
|
|
|
|
{
|
|
|
|
|
|
Console.WriteLine("同步监听已取消");
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
Console.WriteLine($"同步失败: {ex.Message}");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// 运行中 且 temp.IsOn 变成 false
|
|
|
|
|
|
else if (!notRun && !temp.IsOn)
|
|
|
|
|
|
{
|
|
|
|
|
|
notRun = true;
|
|
|
|
|
|
// 当设置关闭时取消所有任务
|
|
|
|
|
|
cancelToken.Cancel(); // 取消任务
|
|
|
|
|
|
cancelToken.Dispose();
|
|
|
|
|
|
cancelToken = new CancellationTokenSource();
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
/*var delayTimer = new DispatcherTimer();
|
|
|
|
|
|
delayTimer.Interval = TimeSpan.FromSeconds(5);
|
|
|
|
|
|
delayTimer.Tick += async (s, e) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
delayTimer.Stop(); // 确保只执行一次
|
|
|
|
|
|
// 异步操作不会阻塞UI
|
|
|
|
|
|
await Current.Dispatcher.InvokeAsync(() =>
|
|
|
|
|
|
{
|
2025-03-29 17:12:54 +08:00
|
|
|
|
// 注册设置变更监听
|
2025-04-02 11:26:08 +08:00
|
|
|
|
SyncSetting.Instance.PropertyChanged += (s1, e1) =>
|
2025-03-29 17:12:54 +08:00
|
|
|
|
{
|
2025-04-02 11:26:08 +08:00
|
|
|
|
if (SyncSetting.Instance.IsOn)
|
2025-03-29 17:12:54 +08:00
|
|
|
|
{
|
|
|
|
|
|
// 异步启动服务
|
2025-04-02 11:26:08 +08:00
|
|
|
|
_ = StartSyncServicesAsync();
|
2025-03-29 17:12:54 +08:00
|
|
|
|
}
|
2025-04-02 11:26:08 +08:00
|
|
|
|
else
|
2025-03-29 17:12:54 +08:00
|
|
|
|
{
|
|
|
|
|
|
// 当设置关闭时取消所有任务
|
2025-04-02 11:26:08 +08:00
|
|
|
|
cancelToken.Cancel();
|
2025-03-29 17:12:54 +08:00
|
|
|
|
cancelToken.Dispose();
|
|
|
|
|
|
cancelToken = new CancellationTokenSource();
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
2025-04-02 11:26:08 +08:00
|
|
|
|
});
|
|
|
|
|
|
};
|
2025-03-29 17:12:54 +08:00
|
|
|
|
|
2025-04-02 11:26:08 +08:00
|
|
|
|
delayTimer.Start();*/
|
2025-03-29 17:12:54 +08:00
|
|
|
|
|
|
|
|
|
|
|
2025-04-02 11:26:08 +08:00
|
|
|
|
/*var syncSettingPath = SyncSetting.Instance.GetPath();
|
|
|
|
|
|
var syncSetting = xmlSerializerService.Load<SyncSetting>(syncSettingPath);
|
|
|
|
|
|
SyncSetting.Instance.IsOn = syncSetting.IsOn;
|
|
|
|
|
|
if (syncSetting.IsOn)
|
|
|
|
|
|
{
|
|
|
|
|
|
// 是否启监听
|
|
|
|
|
|
minioService.MirrorAsync1(bucketName, setting.SyncDir, setting.TaskCount);
|
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
|
|
/*minioService.RealTimeListen(bucketName, setting.SyncDir,
|
|
|
|
|
|
cancellationToken: cancelToken.Token);*/
|
|
|
|
|
|
}
|
2025-03-29 17:12:54 +08:00
|
|
|
|
|
2025-04-02 11:26:08 +08:00
|
|
|
|
private static string SelectDrive()
|
|
|
|
|
|
{
|
|
|
|
|
|
var maxFreeSpace = 0L;
|
|
|
|
|
|
var selectDrive = "";
|
|
|
|
|
|
// 如果同步目录为空,则选择一个本地空闲空间比较大的分区
|
|
|
|
|
|
foreach (DriveInfo drive in DriveInfo.GetDrives())
|
|
|
|
|
|
{
|
|
|
|
|
|
if (drive.DriveType != DriveType.Fixed) continue; // 只获取固定硬盘
|
|
|
|
|
|
|
|
|
|
|
|
if (drive.AvailableFreeSpace > maxFreeSpace)
|
|
|
|
|
|
{
|
|
|
|
|
|
maxFreeSpace = drive.AvailableFreeSpace;
|
|
|
|
|
|
selectDrive = drive.Name;
|
2025-03-29 11:16:54 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-02 11:26:08 +08:00
|
|
|
|
|
|
|
|
|
|
return selectDrive;
|
2025-03-17 10:58:59 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
protected override void Configure(IApplicationBuilder app)
|
|
|
|
|
|
{
|
|
|
|
|
|
base.Configure(app);
|
2025-03-27 14:43:18 +08:00
|
|
|
|
app.UseSetting(x =>
|
|
|
|
|
|
{
|
2025-03-28 14:20:51 +08:00
|
|
|
|
x.Settings.Clear();
|
2025-03-27 14:43:18 +08:00
|
|
|
|
x.Settings.Add(MySetting.Instance);
|
|
|
|
|
|
x.Settings.Add(SyncSetting.Instance);
|
2025-04-24 16:44:43 +08:00
|
|
|
|
x.Settings.Add(DownloadSetting.Instance);
|
2025-03-27 14:43:18 +08:00
|
|
|
|
});
|
2025-03-17 10:58:59 +08:00
|
|
|
|
app.UseStyle();
|
2025-03-25 11:25:32 +08:00
|
|
|
|
//app.UseSettingDefault();
|
2025-03-17 10:58:59 +08:00
|
|
|
|
// Do:设置默认主题
|
|
|
|
|
|
app.UseLocalTheme(l =>
|
|
|
|
|
|
{
|
2025-03-22 15:29:32 +08:00
|
|
|
|
// 主题色
|
2025-03-17 10:58:59 +08:00
|
|
|
|
l.AccentColor = (Color)ColorConverter.ConvertFromString("#FF0093FF");
|
|
|
|
|
|
l.DefaultFontSize = 13D;
|
|
|
|
|
|
l.FontSize = FontSize.Normal;
|
|
|
|
|
|
l.ItemHeight = 35;
|
|
|
|
|
|
//l.ItemWidth = 120;
|
|
|
|
|
|
l.ItemCornerRadius = 5;
|
2025-03-27 13:27:06 +08:00
|
|
|
|
l.AnimalSpeed = 300;
|
2025-03-17 10:58:59 +08:00
|
|
|
|
l.AccentColorSelectType = 0;
|
|
|
|
|
|
l.IsUseAnimal = false;
|
|
|
|
|
|
l.ThemeType = ThemeType.DarkBlack;
|
|
|
|
|
|
l.StyleType = StyleType.Single;
|
|
|
|
|
|
l.Language = Language.Chinese;
|
|
|
|
|
|
l.AccentBrushType = AccentBrushType.LinearGradientBrush;
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-03-27 13:27:06 +08:00
|
|
|
|
|
2025-04-27 17:02:59 +08:00
|
|
|
|
|
2025-04-24 16:44:43 +08:00
|
|
|
|
[Displayer(Name = "下载设置", GroupName = "通用设置")]
|
|
|
|
|
|
public class DownloadSetting : LazySettingInstance<DownloadSetting>
|
|
|
|
|
|
{
|
2025-04-27 17:02:59 +08:00
|
|
|
|
private int _maxConcurrent;
|
|
|
|
|
|
|
|
|
|
|
|
[DefaultValue(3)]
|
|
|
|
|
|
[Display(Name = "下载并行任务数")]
|
|
|
|
|
|
public int MaxConcurrent
|
|
|
|
|
|
{
|
|
|
|
|
|
get => _maxConcurrent;
|
|
|
|
|
|
set
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_maxConcurrent == value) return;
|
|
|
|
|
|
_maxConcurrent = value;
|
|
|
|
|
|
RaisePropertyChanged();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-24 16:44:43 +08:00
|
|
|
|
private string _downDir;
|
2025-04-27 17:02:59 +08:00
|
|
|
|
|
2025-04-24 16:44:43 +08:00
|
|
|
|
[Display(Name = "下载目录")]
|
|
|
|
|
|
public string DownDir
|
|
|
|
|
|
{
|
|
|
|
|
|
get => _downDir;
|
|
|
|
|
|
set
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_downDir == value) return;
|
|
|
|
|
|
_downDir = value;
|
|
|
|
|
|
RaisePropertyChanged();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-27 17:02:59 +08:00
|
|
|
|
|
2025-04-24 16:44:43 +08:00
|
|
|
|
private bool _isSelect;
|
2025-04-27 17:02:59 +08:00
|
|
|
|
|
2025-04-24 16:44:43 +08:00
|
|
|
|
[DefaultValue(false)]
|
|
|
|
|
|
[Display(Name = "设置为默认下载目录")]
|
|
|
|
|
|
public bool IsSelect
|
|
|
|
|
|
{
|
|
|
|
|
|
get => _isSelect;
|
|
|
|
|
|
set
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_isSelect == value) return;
|
|
|
|
|
|
_isSelect = value;
|
|
|
|
|
|
RaisePropertyChanged();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-27 17:02:59 +08:00
|
|
|
|
|
2025-03-28 14:20:51 +08:00
|
|
|
|
|
2025-03-27 14:43:18 +08:00
|
|
|
|
[Displayer(Name = "同步设置", GroupName = "通用设置")]
|
|
|
|
|
|
public class SyncSetting : LazySettingInstance<SyncSetting>
|
|
|
|
|
|
{
|
|
|
|
|
|
private bool _ison;
|
|
|
|
|
|
|
2025-03-29 11:16:54 +08:00
|
|
|
|
public string GetPath()
|
|
|
|
|
|
{
|
|
|
|
|
|
return GetDefaultPath();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-03-27 14:43:18 +08:00
|
|
|
|
[DefaultValue(false)]
|
|
|
|
|
|
[Display(Name = "自动同步")]
|
|
|
|
|
|
public bool IsOn
|
|
|
|
|
|
{
|
2025-03-29 17:12:54 +08:00
|
|
|
|
get { return _ison; }
|
2025-03-27 14:43:18 +08:00
|
|
|
|
set
|
|
|
|
|
|
{
|
2025-03-29 17:12:54 +08:00
|
|
|
|
if (_ison == value) return;
|
2025-03-27 14:43:18 +08:00
|
|
|
|
_ison = value;
|
2025-03-29 11:16:54 +08:00
|
|
|
|
RaisePropertyChanged();
|
2025-03-27 14:43:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-03-28 14:20:51 +08:00
|
|
|
|
|
2025-03-27 14:43:18 +08:00
|
|
|
|
[Displayer(Name = "关机设置", GroupName = "通用设置")]
|
2025-03-27 13:27:06 +08:00
|
|
|
|
public class MySetting : LazySettingInstance<MySetting>
|
2025-03-25 11:20:19 +08:00
|
|
|
|
{
|
|
|
|
|
|
private bool _ison;
|
2025-03-27 13:27:06 +08:00
|
|
|
|
|
2025-03-25 11:20:19 +08:00
|
|
|
|
[DefaultValue(false)]
|
|
|
|
|
|
[Display(Name = "是否上传完成关机")]
|
|
|
|
|
|
public bool IsOn
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return _ison; }
|
|
|
|
|
|
set
|
|
|
|
|
|
{
|
|
|
|
|
|
_ison = value;
|
|
|
|
|
|
RaisePropertyChanged("IsOn");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-03-20 09:09:14 +08:00
|
|
|
|
}
|