添加默认下载目录
parent
dd93c62d1d
commit
068494a6f9
193
App.xaml.cs
193
App.xaml.cs
|
|
@ -90,7 +90,7 @@ namespace HeBianGu.App.Disk
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
#region - WindowCaption -
|
#region - WindowCaption -
|
||||||
|
|
||||||
//以下各种功能按钮
|
//以下各种功能按钮
|
||||||
|
|
@ -120,100 +120,147 @@ namespace HeBianGu.App.Disk
|
||||||
//services.AddSingleton<IExplorerService, WindowExplorerServiceDemo>();
|
//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 bucketName = minioService._bucketName;
|
||||||
var xmlSerializerService = services.GetService<ISerializerService>();
|
var xmlSerializerService = services.GetService<ISerializerService>();
|
||||||
if (File.Exists("./settings.xml"))
|
if (!File.Exists("./settings.xml"))
|
||||||
{
|
{
|
||||||
var setting = xmlSerializerService.Load<SystemSetting>("./settings.xml");
|
var tempSetting = new SystemSetting();
|
||||||
if (!string.IsNullOrEmpty(setting.SyncDir))
|
tempSetting.TaskCount = 3;
|
||||||
|
tempSetting.SyncDir = Path.Combine(SelectDrive(),"HopetryBoxData");
|
||||||
|
if (!Directory.Exists(tempSetting.SyncDir))
|
||||||
{
|
{
|
||||||
if (setting.TaskCount == 0)
|
Directory.CreateDirectory(tempSetting.SyncDir);
|
||||||
{
|
}
|
||||||
setting.TaskCount = 3;
|
xmlSerializerService.Save("./settings.xml", tempSetting);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 创建统一的取消令牌源
|
var setting = xmlSerializerService.Load<SystemSetting>("./settings.xml");
|
||||||
var cancelToken = new CancellationTokenSource();
|
if (string.IsNullOrEmpty(setting.SyncDir))
|
||||||
var temp = SyncSetting.Instance;
|
{
|
||||||
var notRun = true;
|
var selectDrive = SelectDrive();
|
||||||
// 注册设置变更监听
|
|
||||||
temp.PropertyChanged += (s, e) =>
|
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("启动同步:");
|
_ = StartSyncServicesAsync();
|
||||||
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}");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// 运行中 且 temp.IsOn 变成 false
|
else
|
||||||
else if (!notRun && !temp.IsOn)
|
|
||||||
{
|
{
|
||||||
notRun = true;
|
|
||||||
// 当设置关闭时取消所有任务
|
// 当设置关闭时取消所有任务
|
||||||
cancelToken.Cancel(); // 取消任务
|
cancelToken.Cancel();
|
||||||
cancelToken.Dispose();
|
cancelToken.Dispose();
|
||||||
cancelToken = new CancellationTokenSource();
|
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 syncSettingPath = SyncSetting.Instance.GetPath();
|
||||||
var syncSetting = xmlSerializerService.Load<SyncSetting>(syncSettingPath);
|
var syncSetting = xmlSerializerService.Load<SyncSetting>(syncSettingPath);
|
||||||
SyncSetting.Instance.IsOn = syncSetting.IsOn;
|
SyncSetting.Instance.IsOn = syncSetting.IsOn;
|
||||||
if (syncSetting.IsOn)
|
if (syncSetting.IsOn)
|
||||||
{
|
{
|
||||||
// 是否启监听
|
// 是否启监听
|
||||||
minioService.MirrorAsync1(bucketName, setting.SyncDir, setting.TaskCount);
|
minioService.MirrorAsync1(bucketName, setting.SyncDir, setting.TaskCount);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
/*minioService.RealTimeListen(bucketName, setting.SyncDir,
|
/*minioService.RealTimeListen(bucketName, setting.SyncDir,
|
||||||
cancellationToken: cancelToken.Token);*/
|
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)
|
protected override void Configure(IApplicationBuilder app)
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
<PackageReference Include="NLog" Version="5.4.0" />
|
<PackageReference Include="NLog" Version="5.4.0" />
|
||||||
<PackageReference Include="Polly" Version="8.5.2" />
|
<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="SqlSugarCore" Version="5.1.4.187" />
|
||||||
<PackageReference Include="System.Data.SQLite.Core" Version="1.0.119" />
|
<PackageReference Include="System.Data.SQLite.Core" Version="1.0.119" />
|
||||||
<PackageReference Include="WindowsAPICodePack" Version="8.0.6" />
|
<PackageReference Include="WindowsAPICodePack" Version="8.0.6" />
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue