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 { /// /// App.xaml 的交互逻辑 /// 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(); 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(); var minioService = services.GetService(); var bucketName = minioService._bucketName; var xmlSerializerService = services.GetService(); 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("./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(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 { 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 { private bool _ison; [DefaultValue(false)] [Display(Name = "是否上传完成关机")] public bool IsOn { get { return _ison; } set { _ison = value; RaisePropertyChanged("IsOn"); } } } }