启动时就读取同步配置
parent
e86bc4bec8
commit
a1fb36ad30
70
App.xaml.cs
70
App.xaml.cs
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
|||
// 校验本地文件 ETag(MinIO 使用 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;
|
||||
}
|
||||
|
||||
// 实时监听方法
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue