启动时就读取同步配置

dev
陈伟 2025-03-29 11:16:54 +08:00
parent e86bc4bec8
commit a1fb36ad30
3 changed files with 56 additions and 30 deletions

View File

@ -1,8 +1,10 @@
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Reflection;
using System.Windows;
using System.Windows.Media;
using System.Xml.Serialization;
using HeBianGu.Base.WpfBase;
using HeBianGu.Control.Guide;
using HeBianGu.Control.ThemeSet;
@ -31,29 +33,12 @@ namespace HeBianGu.App.Disk
base.ConfigureServices(services);
// 本地持久化
services.AddXmlSerialize();
// 设置
services.AddSetting();
services.AddSettingPath();
// minio 服务
services.AddSingleton<MinioService, MinioService>();
var minioService = services.GetService<MinioService>();
var bucketName = minioService._bucketName;
var xmlSerializerService = services.GetService<ISerializerService>();
if (File.Exists("./settings.xml"))
{
var setting = xmlSerializerService.Load<SystemSetting>("./settings.xml");
if (!string.IsNullOrEmpty(setting.SyncDir))
{
if (setting.TaskCount == 0)
{
setting.TaskCount = 3;
}
// 是否启监听
if (SyncSetting.Instance.IsOn)
{
minioService.MirrorAsync1(bucketName, setting.SyncDir, setting.TaskCount);
minioService.RealTimeListen(bucketName, setting.SyncDir);
}
}
}
services.AddWindowDialog();
services.AddObjectWindowDialog();
@ -62,8 +47,7 @@ namespace HeBianGu.App.Disk
services.AddPropertyGridMessage();
services.AddAutoColumnPagedDataGridMessage();
//services.AddNotifyMessage();
// 设置
services.AddSetting();
// 认证
// services.AddIdentity(x => x.ProductFontSize = 50);
services.AddMvc();
@ -76,7 +60,7 @@ namespace HeBianGu.App.Disk
x.Uri = "https://gitee.com/hebiangu/wpf-auto-update/raw/master/Install/Computer/AutoUpdate.xml";
x.UseIEDownload = true;
});*/
services.AddSettingPath();
services.AddDESCryptService();
services.AddPrintBoxMessage();
// ???
@ -133,6 +117,29 @@ namespace HeBianGu.App.Disk
//var find = dll.GetTypes().Where(x => typeof(IExplorerService).IsAssignableFrom(x))?.FirstOrDefault();
//ServiceRegistry.Instance.Register(typeof(IExplorerService), find);
//services.AddSingleton<IExplorerService, WindowExplorerServiceDemo>();
var minioService = services.GetService<MinioService>();
var bucketName = minioService._bucketName;
var xmlSerializerService = services.GetService<ISerializerService>();
if (File.Exists("./settings.xml"))
{
var setting = xmlSerializerService.Load<SystemSetting>("./settings.xml");
if (!string.IsNullOrEmpty(setting.SyncDir))
{
if (setting.TaskCount == 0)
{
setting.TaskCount = 3;
}
var syncSettingPath = SyncSetting.Instance.GetPath();
var syncSetting = xmlSerializerService.Load<SyncSetting>(syncSettingPath);
if (syncSetting.IsOn)
{
// 是否启监听
minioService.MirrorAsync1(bucketName, setting.SyncDir, setting.TaskCount);
minioService.RealTimeListen(bucketName, setting.SyncDir);
}
}
}
}
protected override void Configure(IApplicationBuilder app)
@ -173,15 +180,26 @@ namespace HeBianGu.App.Disk
{
private bool _ison;
public string GetPath()
{
return GetDefaultPath();
}
[DefaultValue(false)]
[Display(Name = "自动同步")]
public bool IsOn
{
get { return _ison; }
get
{
var x = GetDefaultPath();
//Console.WriteLine($"x: {x}");
// object obj1 = this.GetSerializerService()?.Load(x, typeof(SyncSetting));
return _ison;
}
set
{
_ison = value;
RaisePropertyChanged("IsOn");
RaisePropertyChanged();
}
}
}

View File

@ -99,6 +99,7 @@ namespace Hopetry.Services
/// <param name="maxParallel"></param>
public async Task MirrorAsync1(string bucket, string localDir, int maxParallel = 5)
{
Console.WriteLine("开始全量同步");
Channel<(string ObjectName, string ETag)> SyncChannel = Channel.CreateBounded<(string, string)>(
new BoundedChannelOptions(1000)
{
@ -141,9 +142,10 @@ namespace Hopetry.Services
{
DateTime itemLastModified =
DateTime.Parse(item.LastModified, null, DateTimeStyles.RoundtripKind);
if ((ulong)localMeta.Size != item.Size || localMeta.LastModified < itemLastModified ||
!VerifyETag(localPath, item.ETag))
//if ((ulong)localMeta.Size != item.Size || localMeta.LastModified < itemLastModified || !VerifyETag(localPath, item.ETag))
if (!VerifyETag(localPath, item.ETag))
{
Console.WriteLine($"{localPath} 加入下载队列");
await SyncChannel.Writer.WriteAsync((item.Key, item.ETag));
}
}
@ -306,10 +308,16 @@ namespace Hopetry.Services
// 校验本地文件 ETagMinIO 使用 MD5
public bool VerifyETag(string filePath, string remoteETag)
{
if (remoteETag.Contains("-"))
{
return true;
}
using var md5 = MD5.Create();
using var stream = File.OpenRead(filePath);
var localHash = BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", "").ToLower();
return remoteETag.Trim('"').Equals(localHash, StringComparison.OrdinalIgnoreCase);
var x = remoteETag.Trim('"').Equals(localHash, StringComparison.OrdinalIgnoreCase);
return x;
}
// 实时监听方法

View File

@ -53,7 +53,7 @@ public class SyncViewModel : MvcViewModelBase
private async Task SyncDataQuick()
{
await Task.Run(async () => await _minioService.MirrorAsync1(_minioService._bucketName, SyncDir, _taskCount));
_minioService.MirrorAsync1(_minioService._bucketName, SyncDir, _taskCount);
}
protected override void Loaded(string args)