From e28499b26f2c6bccf04d23761ff2064c8617217e Mon Sep 17 00:00:00 2001 From: callmeyan Date: Fri, 4 Jul 2025 11:35:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B7=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E8=87=B32.2.6=EF=BC=8C=E6=96=B0=E5=A2=9E=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E8=AF=B4=E6=98=8E=E5=BC=B9=E7=AA=97=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 升级程序不再使用缓存文件,避免上一次下载的程序不完整 --- .vs/AIProofread/v17/.suo | Bin 3149824 -> 3160064 bytes AIProofread/AIProofread.csproj | 9 ++ AIProofread/Bridge.cs | 1 - AIProofread/Config.cs | 14 ++- AIProofread/Controls/FormReadme.Designer.cs | 68 +++++++++++ AIProofread/Controls/FormReadme.cs | 55 +++++++++ AIProofread/Controls/FormReadme.resx | 120 ++++++++++++++++++++ AIProofread/Properties/AssemblyInfo.cs | 8 +- AIProofread/Ribbon1.Designer.cs | 4 +- AIProofread/Ribbon1.cs | 23 ++++ AIProofread/ThisAddIn.cs | 36 +++++- updater/Form1.cs | 10 +- 12 files changed, 332 insertions(+), 16 deletions(-) create mode 100644 AIProofread/Controls/FormReadme.Designer.cs create mode 100644 AIProofread/Controls/FormReadme.cs create mode 100644 AIProofread/Controls/FormReadme.resx diff --git a/.vs/AIProofread/v17/.suo b/.vs/AIProofread/v17/.suo index f2591a07560ae08ad1158da5a2bbc466d758938a..c92fe2835bdfabf31d07b06e2a2b8d60961ff5b7 100644 GIT binary patch delta 39316 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 HOfUU^s-al% diff --git a/AIProofread/AIProofread.csproj b/AIProofread/AIProofread.csproj index 87f58d3..d6ed545 100644 --- a/AIProofread/AIProofread.csproj +++ b/AIProofread/AIProofread.csproj @@ -362,6 +362,12 @@ FormMessage.cs + + Form + + + FormReadme.cs + Form @@ -450,6 +456,9 @@ FormMessage.cs + + FormReadme.cs + FormSetting.cs diff --git a/AIProofread/Bridge.cs b/AIProofread/Bridge.cs index 66c806f..eff974e 100644 --- a/AIProofread/Bridge.cs +++ b/AIProofread/Bridge.cs @@ -750,7 +750,6 @@ namespace AIProofread public void SelectMarkById(int proofreadId, int documentId) { - Globals.ThisAddIn.ActiveDocument?.SelectMarkById(proofreadId, false); } diff --git a/AIProofread/Config.cs b/AIProofread/Config.cs index 539c558..19057cf 100644 --- a/AIProofread/Config.cs +++ b/AIProofread/Config.cs @@ -1,4 +1,5 @@ using System; +using System.IO; using System.Text.RegularExpressions; namespace AIProofread @@ -36,8 +37,8 @@ namespace AIProofread public class Config { public static readonly string APP_NAME = "AI校对王"; - public static readonly string APP_VERSION = "2.2.5"; - public static readonly string BuildVersion = "20250620_1532"; + public static readonly string APP_VERSION = "2.2.6"; + public static readonly string BuildVersion = "20250623_1757"; public static bool IS_WPS = false; public static bool UpgradeForcedNotice = false; public static readonly string APP_BASE_DIR = AppDomain.CurrentDomain.BaseDirectory; @@ -65,6 +66,7 @@ namespace AIProofread public static readonly string APP_DATA_PATH = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\ai_proofread"; public static readonly string APP_LOG_PATH = APP_DATA_PATH + "\\logs\\"; + public static readonly string APP_README_PATH = APP_DATA_PATH + "\\readme\\"; public static readonly string WEB_DATA_PATH = APP_DATA_PATH + "\\userdata"; /// @@ -73,6 +75,14 @@ namespace AIProofread public static readonly string BOOKMARK_NAME_PREFIX = "ai_proofread_"; private static readonly Regex regex = new Regex("^ai_proofread_\\d+$"); + public static string GetCurrentVersionReadmeCacheFile() + { + if (!Directory.Exists(APP_README_PATH)) + { + Directory.CreateDirectory(APP_README_PATH); + } + return Path.Combine(APP_README_PATH, APP_VERSION + ".txt"); + } public static bool IsProofreadMark(string name) { diff --git a/AIProofread/Controls/FormReadme.Designer.cs b/AIProofread/Controls/FormReadme.Designer.cs new file mode 100644 index 0000000..8a080ab --- /dev/null +++ b/AIProofread/Controls/FormReadme.Designer.cs @@ -0,0 +1,68 @@ +namespace AIProofread.Controls +{ + partial class FormReadme + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.WebView_ReadMe = new Microsoft.Web.WebView2.WinForms.WebView2(); + ((System.ComponentModel.ISupportInitialize)(this.WebView_ReadMe)).BeginInit(); + this.SuspendLayout(); + // + // WebView_ReadMe + // + this.WebView_ReadMe.AllowExternalDrop = true; + this.WebView_ReadMe.CreationProperties = null; + this.WebView_ReadMe.DefaultBackgroundColor = System.Drawing.Color.White; + this.WebView_ReadMe.Dock = System.Windows.Forms.DockStyle.Fill; + this.WebView_ReadMe.Location = new System.Drawing.Point(0, 0); + this.WebView_ReadMe.Name = "WebView_ReadMe"; + this.WebView_ReadMe.Size = new System.Drawing.Size(600, 480); + this.WebView_ReadMe.TabIndex = 0; + this.WebView_ReadMe.ZoomFactor = 1D; + // + // FormReadme + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(600, 480); + this.Controls.Add(this.WebView_ReadMe); + this.Name = "FormReadme"; + this.ShowIcon = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "版本更新说明"; + this.TopMost = true; + this.Load += new System.EventHandler(this.FormReadme_Load); + ((System.ComponentModel.ISupportInitialize)(this.WebView_ReadMe)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Microsoft.Web.WebView2.WinForms.WebView2 WebView_ReadMe; + } +} \ No newline at end of file diff --git a/AIProofread/Controls/FormReadme.cs b/AIProofread/Controls/FormReadme.cs new file mode 100644 index 0000000..771a34d --- /dev/null +++ b/AIProofread/Controls/FormReadme.cs @@ -0,0 +1,55 @@ +using AIProofread.core; +using System; +using System.IO; +using System.Runtime.InteropServices; + +namespace AIProofread.Controls +{ + [ClassInterface(ClassInterfaceType.AutoDual)] + [ComVisible(true)] + public partial class FormReadme : BaseWinForm + { + /// + /// 单例实例。 + /// + private static FormReadme INSTANCE = null; + public FormReadme() + { + InitializeComponent(); + // 写入缓存 + File.WriteAllText(Config.GetCurrentVersionReadmeCacheFile(), DateTime.Now.ToString("yyyy-M-d")); + } + + /// + /// 获取单例对象。 + /// + public static FormReadme GetInstance(bool newInstance = true) + { + if (newInstance && (INSTANCE == null || INSTANCE.IsDisposed)) + { + INSTANCE = new FormReadme(); + } + return INSTANCE; + } + + public void CloseAndDispose() + { + if (INSTANCE != null && !INSTANCE.IsDisposed) + { + INSTANCE.Close(); + INSTANCE = null; + } + } + + private void FormReadme_Load(object sender, EventArgs e) + { + // 初始化 + InitWebView(WebView_ReadMe, Config.WebPath("version-readme"), "version-readme", () => + { + WebView_ReadMe.CoreWebView2.AddHostObjectToScript("readme", this); + }); + } + + + } +} diff --git a/AIProofread/Controls/FormReadme.resx b/AIProofread/Controls/FormReadme.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/AIProofread/Controls/FormReadme.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/AIProofread/Properties/AssemblyInfo.cs b/AIProofread/Properties/AssemblyInfo.cs index fdb10ef..03af65e 100644 --- a/AIProofread/Properties/AssemblyInfo.cs +++ b/AIProofread/Properties/AssemblyInfo.cs @@ -7,10 +7,10 @@ using System.Security; // 控制。更改这些特性值可修改 // 与程序集关联的信息。 [assembly: AssemblyTitle("AI校对王")] -[assembly: AssemblyDescription("AI校对王 2.2.5")] +[assembly: AssemblyDescription("AI校对王 2.2.6")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("果麦文化传媒股份有限公司")] -[assembly: AssemblyProduct("AI校对王 2.2.5")] +[assembly: AssemblyProduct("AI校对王 2.2.6")] [assembly: AssemblyCopyright("Copyright © 果麦文化传媒股份有限公司 2025")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -33,6 +33,6 @@ using System.Security; //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, // 方法是按如下所示使用“*”: : // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.0")] -[assembly: AssemblyFileVersion("2.2.5.0")] +[assembly: AssemblyVersion("2.2.6.0")] +[assembly: AssemblyFileVersion("2.2.6.0")] diff --git a/AIProofread/Ribbon1.Designer.cs b/AIProofread/Ribbon1.Designer.cs index 28810f1..e350492 100644 --- a/AIProofread/Ribbon1.Designer.cs +++ b/AIProofread/Ribbon1.Designer.cs @@ -132,7 +132,7 @@ namespace AIProofread // this.BtnExportProofreadResult.ControlSize = Microsoft.Office.Core.RibbonControlSize.RibbonControlSizeLarge; this.BtnExportProofreadResult.Image = global::AIProofread.Properties.Resources.icon_export; - this.BtnExportProofreadResult.Label = "导出勘误表\r\n"; + this.BtnExportProofreadResult.Label = "勘误表导出\r\n"; this.BtnExportProofreadResult.Name = "BtnExportProofreadResult"; this.BtnExportProofreadResult.ShowImage = true; this.BtnExportProofreadResult.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.BtnExportProofreadResult_Click); @@ -162,7 +162,7 @@ namespace AIProofread this.menuSencenDect.Items.Add(this.btnDetectionAll); this.menuSencenDect.Items.Add(this.btnDetectionParagraph); this.menuSencenDect.Items.Add(this.btnDetectionHistory); - this.menuSencenDect.Label = "常识性检测\r\n"; + this.menuSencenDect.Label = "常识性校对助手\r\n"; this.menuSencenDect.Name = "menuSencenDect"; this.menuSencenDect.ShowImage = true; // diff --git a/AIProofread/Ribbon1.cs b/AIProofread/Ribbon1.cs index eba7bdf..39c8f6a 100644 --- a/AIProofread/Ribbon1.cs +++ b/AIProofread/Ribbon1.cs @@ -142,6 +142,7 @@ namespace AIProofread /// public void ProcessLogout() { + Globals.ThisAddIn.CloseReadmeIfShown(); IS_LOGIN = false; currentLoginUserinfo = null; ToggleLogin(); @@ -162,12 +163,14 @@ namespace AIProofread // 弹出登录窗口 private void btnLogin_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); Bridge.bridge.ShowLoginForm(null); } // 注销登录 private void btnLogout_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); Globals.ThisAddIn.ActiveDocument.ShowDialog(currentLoginUserinfo.phone + " 退出AI校对王?", "确定", "logout"); //Globals.ThisAddIn.ShowDialog("退出AI校对王",) @@ -180,23 +183,27 @@ namespace AIProofread public void ShowNewVersionIcon() { + Globals.ThisAddIn.CloseReadmeIfShown(); BtnUpdate.Image = Globals.ThisAddIn.IsWPS? Resources.icon_update_new_wps : Resources.icon_update_new; } private void btnOpenLexicon_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); Globals.ThisAddIn.SendMessageToWeb("show-lexicon", null); //(new FormLexicon()).Show(); } private void btnSetting_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); Globals.ThisAddIn.SendMessageToWeb("show-setting", null); } private void BtnGetContact_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); var frm = new FormContact(); Globals.ThisAddIn.ActiveDocument.RunInMainThread(() => { @@ -206,6 +213,7 @@ namespace AIProofread private void BtnUpdate_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); //System.Windows.Forms.MessageBox.Show("当前插件是最新版本"); //Globals.ThisAddIn.SendMessageToWeb("upgrade", Config.APP_VERSION); Bridge.bridge.ShowUpgradeView(); @@ -213,6 +221,7 @@ namespace AIProofread private void btnClear_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); //DocumentUtil.ClearProofreadMarks(); Globals.ThisAddIn.ActiveDocument.ShowDialog("请确认是否清除此文档的所有校对标注?", "确定", "clear-tips"); @@ -225,11 +234,13 @@ namespace AIProofread private void btnShowPane_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); Globals.ThisAddIn.ShowPanel(); } private void btnHidePane_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); Globals.ThisAddIn.HidePanel(); } @@ -553,16 +564,19 @@ namespace AIProofread private void ButtonLoadCache_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); Globals.ThisAddIn.ShowDialog("即将加载最近保存的进度,新的修改可能会丢失!", "确定", "load-cache"); } private void BtnShowPanel_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); Globals.ThisAddIn.SendMessageToWeb("show-panel", ""); } private void BtnOpenAppDir_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); // 打开日志目录 Process.Start(AppDomain.CurrentDomain.BaseDirectory); } @@ -571,11 +585,13 @@ namespace AIProofread private void BtnExportProofreadResult_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); Globals.ThisAddIn.SendMessageToWeb("export-result", ""); } private void BtnShowVersion_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); Globals.ThisAddIn.SendMessageToWeb("show-version", ""); } @@ -583,11 +599,13 @@ namespace AIProofread private void btnDetectionAll_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); Globals.ThisAddIn.SendMessageToWeb("show-check-all", ""); } private void btnDetectionParagraph_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); // 获取当前选中的选区的首尾段落起始与结束位置 var start = currectSelectRange.Start; // .Paragraphs.First.Range var end = currectSelectRange.End; // .Paragraphs.Last.Range @@ -598,6 +616,7 @@ namespace AIProofread private void btnDetectionHistory_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); Globals.ThisAddIn.SendMessageToWeb("show-check-history", ""); } @@ -625,6 +644,7 @@ namespace AIProofread private void BtnShowManual_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); try { Process.Start(Config.USER_MANUAL_URL); @@ -635,6 +655,7 @@ namespace AIProofread private void BtnProofreadExact_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); // Globals.ThisAddIn.ActiveDocument.CheckPanel(); Globals.ThisAddIn.SendMessageToWeb("start", "exact"); @@ -642,12 +663,14 @@ namespace AIProofread private void BtnProofreadFull_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); Globals.ThisAddIn.ActiveDocument.CheckPanel(); Globals.ThisAddIn.SendMessageToWeb("start", "full"); } private void button2_Click(object sender, RibbonControlEventArgs e) { + Globals.ThisAddIn.CloseReadmeIfShown(); Bridge.bridge.ShowLoginForm(null); } } diff --git a/AIProofread/ThisAddIn.cs b/AIProofread/ThisAddIn.cs index b1abba3..fa23ea7 100644 --- a/AIProofread/ThisAddIn.cs +++ b/AIProofread/ThisAddIn.cs @@ -9,8 +9,6 @@ using UtilLib; using AIProofread.Model; using System.Collections.Generic; using log4net; -using System.Threading.Tasks; -using DocumentFormat.OpenXml.EMMA; namespace AIProofread @@ -36,6 +34,7 @@ namespace AIProofread /// 校对面板 /// public ProofreadMainControl proofreadPanel; + private bool alreadyShowReadme = false; /// /// 工具栏 /// @@ -140,6 +139,7 @@ namespace AIProofread //CheckPluginUpgradeInfo(); // CheckDocumentClosedTick(); + // 定时检测文档是否关闭 //_timer = new System.Timers.Timer(10000); //_timer.Elapsed += CheckDocumentClosed; @@ -376,6 +376,7 @@ namespace AIProofread private void Application_DocumentChange() { + ShowVersionReadme(); // 检测是否存在打开的文档 if (CurrentWordApplication.Documents.Count == 0) { @@ -434,6 +435,7 @@ namespace AIProofread /// private void Application_WindowActivate(Document activeDoc, Window Wn) { + ShowVersionReadme(); Logger.Debug("WindowActivate -- " + activeDoc.Name); if (activeDoc != null && InDocumentInList(activeDoc)) { @@ -442,6 +444,7 @@ namespace AIProofread + ActiveDocument?.CurrentDocument?.Name + "==》" + activeDoc.Name); documentList.SetActiveDocument(activeDoc); + //// 设置当前文档 //ActiveDocument = document; } @@ -501,9 +504,38 @@ namespace AIProofread //LogHelper.Log("NewDocument" + doc.Name); } + private void ShowVersionReadme() + { + if (alreadyShowReadme || File.Exists(Config.GetCurrentVersionReadmeCacheFile())) + { + return; + } + alreadyShowReadme = true; + FormReadme.GetInstance().Show(); + //ActiveDocument?.RunInMainThread(() => + //{ + //}); + } + + /// + /// 如果Readme显示 则关闭 + /// + public void CloseReadmeIfShown() + { + try + { + FormReadme.GetInstance(false).CloseAndDispose(); + } + catch (Exception ex) + { + Logger.Error("CloseReadme Error", ex); + } + } + private void Application_DocumentOpen(Document doc) { //LogHelper.Log("DocumentOpen " + doc.Name); + ShowVersionReadme(); } diff --git a/updater/Form1.cs b/updater/Form1.cs index 168a44d..f9d0a70 100644 --- a/updater/Form1.cs +++ b/updater/Form1.cs @@ -115,11 +115,11 @@ namespace updater } string updateFileName = UpgradeDir + Path.GetFileName(upgradeInfo.DownloadUrl); // 判断是否已经存在升级包 - if (File.Exists(updateFileName)) - { - ExtractUpdatePackage(); - return; - } + //if (File.Exists(updateFileName)) + //{ + // ExtractUpdatePackage(); + // return; + //} DownLoadFile(upgradeInfo.DownloadUrl, updateFileName); }