using DaJiaoYan.Services; using DaJiaoYan.Utils; using DaJiaoYan.Variables; using System; using System.Drawing; using System.IO; using System.Threading.Tasks; using System.Windows.Forms; namespace DaJiaoYan { public partial class FormMain : Form { private readonly NotifyIcon notifyIcon; private static readonly Icon icon = new Icon(Path.Combine(Const.APP_PATH, Const.ICON_FILE)); public FormMain() { InitializeComponent(); notifyIcon = new NotifyIcon { Icon = icon, Text = Const.APP_SHOW_NAME, Visible = true, }; notifyIcon.Click += NotifyIcon_Click; ControlExts.MessageBoxShowForm = this; Scan.OwnerFormHandle = this.Handle; Task.Run(() => { Init(); }); //Scan.OwnerFormHandle = this.Handle; } private void Init() { ControlExts.FormInvoke(this, () => { #if DEBUG Text = $"{Const.APP_FORM_NAME} (debug {Const.APP_DEBUG_BUILD_VERSION} {Const.HTTP_HOST})"; #else Text = $"{Const.APP_FORM_NAME} (release {Const.APP_DEBUG_BUILD_VERSION})"; #endif this.Icon = icon; }); #if !DEBUG CheckForUpdate(); #endif Scan.DelegateLoadDriver = ChangeScannerDriverLabel; Scan.DelegateChangeScannerName = ChangeScannerNameLabel; Scan.DelegateChangeScannerStatus = ChangeScannerStatusLabel; Variables.Vars.DelegateCounterChange = ChangeUploadedCount; Task.Factory.StartNew(() => { Services.Instance.Run(); Models.ScannerList scannerList = Scan.GetScannerList(); Variables.Vars.Scanners = scannerList.Resources; Variables.Vars.ScannerSelected = scannerList.Selected; //Instance.Init(); ShowFreeSpace(); }); } private void NotifyIcon_Click(object sender, EventArgs e) { ShowMainForm(); } private void ShowMainForm() { if (WindowState == FormWindowState.Minimized || !ShowInTaskbar) { Show(); Activate(); WindowState = FormWindowState.Normal; TopMost = true; Task.Run(() => { Task.Delay(100); ControlExts.FormInvoke(this, () => { TopMost = false; }); }); } else { WindowState = FormWindowState.Minimized; //ShowInTaskbar = false; Hide(); } } private void ChangeLabel(Label label, string txt, Color color) { ControlExts.FormInvoke(this, () => { label.Text = txt; label.ForeColor = color; }); } private void ChangeLabel(Label label, string txt) { ChangeLabel(label, txt, Color.Black); } private void ChangeScannerDriverLabel(bool ok) { string txt = ok ? "载入成功" : "载入失败"; Color color = ok ? Color.Green : Color.Red; ChangeLabel(labelScannerDriver, txt, color); } private void ChangeScannerNameLabel(string txt) { ChangeLabel(labelScannerName, txt); } private async void ChangeScannerStatusLabel(string txt, Color color) { ChangeLabel(labelScannerStatus, txt, color); await ShowFreeSpace(); } private void ChangeScannerDirectory(string txt) { ChangeLabel(labelScannerDirectory, txt); } private Task ShowFreeSpace() { return Task.Run(() => { string FreeSpace = FileExts.GetHardDiskFreeSpace(Const.TMP_PATH.Substring(0, 1), FileExts.FileSizeUnit.GB); Utils.FileExts.CheckDirectory(Const.TMP_PATH, true); ChangeScannerDirectory($"{Const.TMP_PATH}\n[ 可用空间:{FreeSpace} ]"); }); } private void CheckForUpdate() { Task.Run(async () => { var info = await Api.GetUpdateInfo(); if (info.Version > Const.APP_BUILD_VERSION) { try { ProcessExts.RunUpdate(); } catch { ShowMessageBox("启动升级程序失败!", Const.MSG_CAPTION_ERROR); } Close(); } }); } /// /// 显示消息提示框 /// /// /// /// /// /// /// private DialogResult ShowMessageBox(string text, string caption = "提示", MessageBoxButtons buttons = MessageBoxButtons.OK, MessageBoxIcon icon = MessageBoxIcon.Information, MessageBoxDefaultButton defaultButton = MessageBoxDefaultButton.Button1) { return ControlExts.ShowMessageBox(text, caption, buttons, icon, defaultButton); } private void LabelScannerDirectory_DoubleClick(object sender, EventArgs e) { FileExts.OpenFileInExplore(Const.TMP_PATH, () => { ShowMessageBox("打开文件夹失败!", Const.MSG_CAPTION_ERROR); }); } private void ChangeUploadedCount(int count) { ChangeLabel(labelUploadedCount, count.ToString()); } private void FormMain_FormClosing(object sender, FormClosingEventArgs e) { void exitFunc() { notifyIcon.Visible = false; notifyIcon.Icon.Dispose(); notifyIcon.Dispose(); } if (Vars.AllTaskFinished()) { exitFunc(); } else { if (ShowMessageBox("正在上传图片,如果强制退出将导致上传的批次图片不完整!\n确定退出吗?", Const.MSG_CAPTION_WARN, MessageBoxButtons.OKCancel) == DialogResult.OK) { exitFunc(); } else { e.Cancel = true; } } } private void FormMain_SizeChanged(object sender, EventArgs e) { ShowInTaskbar = Visible = WindowState != FormWindowState.Minimized; } } }