338 lines
12 KiB
C#
338 lines
12 KiB
C#
using System.ComponentModel;
|
||
using System.ComponentModel.DataAnnotations;
|
||
using System.IO;
|
||
using System.Windows;
|
||
using System.Windows.Media;
|
||
using HeBianGu.Base.WpfBase;
|
||
using HeBianGu.Control.Guide;
|
||
using HeBianGu.Control.ThemeSet;
|
||
using HeBianGu.General.WpfControlLib;
|
||
using HeBianGu.Service.Mvp;
|
||
using HeBianGu.Systems.Identity;
|
||
using HeBianGu.Systems.Setting;
|
||
using HeBianGu.Window.Link;
|
||
using Hopetry.Services;
|
||
using SqlSugar;
|
||
using SystemSetting = FileUploader.Models.SystemSetting;
|
||
|
||
namespace HeBianGu.App.Disk
|
||
{
|
||
/// <summary>
|
||
/// App.xaml 的交互逻辑
|
||
/// </summary>
|
||
public partial class App : ApplicationBase
|
||
{
|
||
public new static ComponentResourceKey Custom
|
||
{
|
||
get => new ComponentResourceKey(typeof (LinkWindowBase), (object) "S.Window.Link.Custom");
|
||
}
|
||
public static ComponentResourceKey WaitingPercent => new ComponentResourceKey(typeof(ProgressBarKeys), "S.ProgressBar.Custom");
|
||
|
||
protected override MainWindowBase CreateMainWindow(StartupEventArgs e)
|
||
{
|
||
return new ShellWindow();
|
||
}
|
||
|
||
|
||
protected override void ConfigureServices(IServiceCollection services)
|
||
{
|
||
base.ConfigureServices(services);
|
||
// 本地持久化
|
||
services.AddXmlSerialize();
|
||
// 设置
|
||
services.AddSetting();
|
||
// 另外保存设置目录
|
||
//services.AddSettingPath();
|
||
|
||
// minio 服务
|
||
services.AddSingleton<MinioService, MinioService>();
|
||
|
||
services.AddWindowDialog();
|
||
services.AddObjectWindowDialog();
|
||
services.AddWindowAnimation();
|
||
services.AddMessageProxy();
|
||
services.AddPropertyGridMessage();
|
||
services.AddAutoColumnPagedDataGridMessage();
|
||
//services.AddNotifyMessage();
|
||
|
||
// 认证
|
||
// services.AddIdentity(x => x.ProductFontSize = 50);
|
||
services.AddMvc();
|
||
//services.AddProjectDefault();
|
||
|
||
services.AddXmlWebSerializerService();
|
||
//// Do :注册软件更新页面
|
||
/* services.AddAutoUpgrade(x =>
|
||
{
|
||
x.Uri = "https://gitee.com/hebiangu/wpf-auto-update/raw/master/Install/Computer/AutoUpdate.xml";
|
||
x.UseIEDownload = true;
|
||
});*/
|
||
|
||
services.AddDESCryptService();
|
||
services.AddPrintBoxMessage();
|
||
// ???
|
||
services.AddWindowExplorer();
|
||
|
||
#region - More -
|
||
|
||
//services.AddUpgradeViewPresenter();
|
||
//services.AddLicense();
|
||
//services.AddLicenseViewPresenter();
|
||
//services.AddVip();
|
||
//services.AddVipViewPresenter();
|
||
//services.AddSurveyViewPresenter();
|
||
//services.AddFeedbackViewPresenter();
|
||
services.AddLogoutViewPresenter();
|
||
//services.AddAboutViewPresenter();
|
||
services.AddMoreViewPresenter(x =>
|
||
{
|
||
//x.AddPersenter(UpgradeViewPresenter.Instance);
|
||
//x.AddPersenter(LicenseViewPresenter.Instance);
|
||
//x.AddPersenter(VipViewPresenter.Instance);
|
||
//x.AddPersenter(SurveyViewPresenter.Instance);
|
||
//x.AddPersenter(FeedbackViewPresenter.Instance);
|
||
//x.AddPersenter(AboutViewPresenter.Instance);
|
||
x.AddPersenter(LogoutViewPresenter.Instance);
|
||
});
|
||
|
||
#endregion
|
||
|
||
|
||
#region - WindowCaption -
|
||
|
||
//以下各种功能按钮
|
||
//services.AddLoginViewPresenter();
|
||
// 引导功能按钮
|
||
services.AddGuideViewPresenter();
|
||
services.AddHideWindowViewPresenter();
|
||
services.AddSettingViewPrenter();
|
||
//services.AddThemeRightToolViewPresenter();
|
||
//services.AddThemeRightViewPresenter();
|
||
services.AddWindowCaptionViewPresenter(x =>
|
||
{
|
||
x.AddPersenter(LoginViewPresenter.Instance);
|
||
x.AddPersenter(MoreViewPresenter.Instance);
|
||
x.AddPersenter(GuideViewPresenter.Instance);
|
||
x.AddPersenter(HideWindowViewPresenter.Instance);
|
||
x.AddPersenter(SettingViewPresenter.Instance);
|
||
//x.AddPersenter(ThemeRightToolViewPresenter.Instance);
|
||
});
|
||
|
||
#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>();
|
||
|
||
|
||
var minioService = services.GetService<MinioService>();
|
||
var bucketName = minioService._bucketName;
|
||
var xmlSerializerService = services.GetService<ISerializerService>();
|
||
if (!File.Exists("./settings.xml"))
|
||
{
|
||
var tempSetting = new SystemSetting();
|
||
tempSetting.TaskCount = 3;
|
||
tempSetting.SyncDir = Path.Combine(SelectDrive(),"HopetryBoxData");
|
||
if (!Directory.Exists(tempSetting.SyncDir))
|
||
{
|
||
Directory.CreateDirectory(tempSetting.SyncDir);
|
||
}
|
||
xmlSerializerService.Save("./settings.xml", tempSetting);
|
||
}
|
||
|
||
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
|
||
{
|
||
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)
|
||
{
|
||
// 异步启动服务
|
||
_ = StartSyncServicesAsync();
|
||
}
|
||
else
|
||
{
|
||
// 当设置关闭时取消所有任务
|
||
cancelToken.Cancel();
|
||
cancelToken.Dispose();
|
||
cancelToken = new CancellationTokenSource();
|
||
}
|
||
};
|
||
});
|
||
};
|
||
|
||
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);
|
||
}*/
|
||
|
||
/*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)
|
||
{
|
||
base.Configure(app);
|
||
app.UseSetting(x =>
|
||
{
|
||
x.Settings.Clear();
|
||
x.Settings.Add(MySetting.Instance);
|
||
x.Settings.Add(SyncSetting.Instance);
|
||
});
|
||
app.UseStyle();
|
||
//app.UseSettingDefault();
|
||
// Do:设置默认主题
|
||
app.UseLocalTheme(l =>
|
||
{
|
||
// 主题色
|
||
l.AccentColor = (Color)ColorConverter.ConvertFromString("#FF0093FF");
|
||
l.DefaultFontSize = 13D;
|
||
l.FontSize = FontSize.Normal;
|
||
l.ItemHeight = 35;
|
||
//l.ItemWidth = 120;
|
||
l.ItemCornerRadius = 5;
|
||
l.AnimalSpeed = 300;
|
||
l.AccentColorSelectType = 0;
|
||
l.IsUseAnimal = false;
|
||
l.ThemeType = ThemeType.DarkBlack;
|
||
l.StyleType = StyleType.Single;
|
||
l.Language = Language.Chinese;
|
||
l.AccentBrushType = AccentBrushType.LinearGradientBrush;
|
||
});
|
||
}
|
||
}
|
||
|
||
|
||
[Displayer(Name = "同步设置", GroupName = "通用设置")]
|
||
public class SyncSetting : LazySettingInstance<SyncSetting>
|
||
{
|
||
private bool _ison;
|
||
|
||
public string GetPath()
|
||
{
|
||
return GetDefaultPath();
|
||
}
|
||
|
||
[DefaultValue(false)]
|
||
[Display(Name = "自动同步")]
|
||
public bool IsOn
|
||
{
|
||
get { return _ison; }
|
||
set
|
||
{
|
||
if (_ison == value) return;
|
||
_ison = value;
|
||
RaisePropertyChanged();
|
||
}
|
||
}
|
||
}
|
||
|
||
[Displayer(Name = "关机设置", GroupName = "通用设置")]
|
||
public class MySetting : LazySettingInstance<MySetting>
|
||
{
|
||
private bool _ison;
|
||
|
||
[DefaultValue(false)]
|
||
[Display(Name = "是否上传完成关机")]
|
||
public bool IsOn
|
||
{
|
||
get { return _ison; }
|
||
set
|
||
{
|
||
_ison = value;
|
||
RaisePropertyChanged("IsOn");
|
||
}
|
||
}
|
||
}
|
||
} |