添加默认下载目录

dev2.0
陈伟 2025-04-02 11:26:08 +08:00
parent dd93c62d1d
commit 0240d8995e
2 changed files with 121 additions and 73 deletions

View File

@ -90,7 +90,7 @@ namespace HeBianGu.App.Disk
#endregion
#region - WindowCaption -
//以下各种功能按钮
@ -120,100 +120,147 @@ namespace HeBianGu.App.Disk
//services.AddSingleton<IExplorerService, WindowExplorerServiceDemo>();
var minioService = services.GetService<MinioService>();
foreach (DriveInfo drive in DriveInfo.GetDrives())
{
if (drive.DriveType != DriveType.Fixed) continue; // 只获取固定硬盘
Console.WriteLine(
// D:\ (Fixed) 软件 NTFS 329113399296
$"{drive.Name} ({drive.DriveType}) {drive.VolumeLabel} {drive.DriveFormat} {drive.TotalSize} {drive.AvailableFreeSpace}");
}
var minioService = services.GetService<MinioService>();
var bucketName = minioService._bucketName;
var xmlSerializerService = services.GetService<ISerializerService>();
if (File.Exists("./settings.xml"))
if (!File.Exists("./settings.xml"))
{
var setting = xmlSerializerService.Load<SystemSetting>("./settings.xml");
if (!string.IsNullOrEmpty(setting.SyncDir))
var tempSetting = new SystemSetting();
tempSetting.TaskCount = 3;
tempSetting.SyncDir = Path.Combine(SelectDrive(),"HopetryBoxData");
if (!Directory.Exists(tempSetting.SyncDir))
{
if (setting.TaskCount == 0)
{
setting.TaskCount = 3;
}
Directory.CreateDirectory(tempSetting.SyncDir);
}
xmlSerializerService.Save("./settings.xml", tempSetting);
}
// 创建统一的取消令牌源
var cancelToken = new CancellationTokenSource();
var temp = SyncSetting.Instance;
var notRun = true;
// 注册设置变更监听
temp.PropertyChanged += (s, e) =>
var setting = xmlSerializerService.Load<SystemSetting>("./settings.xml");
if (string.IsNullOrEmpty(setting.SyncDir))
{
var selectDrive = SelectDrive();
setting.SyncDir = Path.Combine(selectDrive, "HopetryBoxData");
if (!Directory.Exists(setting.SyncDir))
{
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) =>
{
if (temp.IsOn && notRun)
{
// 异步启动服务
Console.WriteLine("启动同步:");
try
{
if (temp.IsOn && notRun)
minioService.MirrorAsync(bucketName, setting.SyncDir, setting.TaskCount);
minioService.RealTimeListen(bucketName, setting.SyncDir,
cancellationToken: cancelToken.Token);
notRun = false;
}
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(() =>
{
// 注册设置变更监听
SyncSetting.Instance.PropertyChanged += (s1, e1) =>
{
if (SyncSetting.Instance.IsOn)
{
// 异步启动服务
Console.WriteLine("启动同步:");
try
{
minioService.MirrorAsync(bucketName, setting.SyncDir, setting.TaskCount);
minioService.RealTimeListen(bucketName, setting.SyncDir,
cancellationToken: cancelToken.Token);
notRun = false;
}
catch (OperationCanceledException)
{
Console.WriteLine("同步监听已取消");
}
catch (Exception ex)
{
Console.WriteLine($"同步失败: {ex.Message}");
}
_ = StartSyncServicesAsync();
}
// 运行中 且 temp.IsOn 变成 false
else if (!notRun && !temp.IsOn)
else
{
notRun = true;
// 当设置关闭时取消所有任务
cancelToken.Cancel(); // 取消任务
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(() =>
{
// 注册设置变更监听
SyncSetting.Instance.PropertyChanged += (s1, e1) =>
{
if (SyncSetting.Instance.IsOn)
{
// 异步启动服务
_ = StartSyncServicesAsync();
}
else
{
// 当设置关闭时取消所有任务
cancelToken.Cancel();
cancelToken.Dispose();
cancelToken = new CancellationTokenSource();
}
};
});
};
});
};
delayTimer.Start();*/
delayTimer.Start();*/
/*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);
}*/
/*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);*/
/*minioService.RealTimeListen(bucketName, setting.SyncDir,
cancellationToken: cancelToken.Token);*/
}
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;
}
}
return selectDrive;
}
protected override void Configure(IApplicationBuilder app)

View File

@ -57,6 +57,7 @@
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NLog" Version="5.4.0" />
<PackageReference Include="Polly" Version="8.5.2" />
<PackageReference Include="SqlSugar" Version="5.1.4.187" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.187" />
<PackageReference Include="System.Data.SQLite.Core" Version="1.0.119" />
<PackageReference Include="WindowsAPICodePack" Version="8.0.6" />