FieldWorkClient/App.xaml.cs

331 lines
12 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 Hopetry.Services;
using SqlSugar;
using SystemSetting = FileUploader.Models.SystemSetting;
namespace HeBianGu.App.Disk
{
/// <summary>
/// App.xaml 的交互逻辑
/// </summary>
public partial class App : ApplicationBase
{
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");
}
}
}
}