From 8284a9d55264820f9ffdf8635e908cbf65e76a6f Mon Sep 17 00:00:00 2001 From: callmeyan Date: Fri, 9 May 2025 16:59:27 +0800 Subject: [PATCH] =?UTF-8?q?break:=20ActiveDocument=20=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E5=AE=9E=E6=97=B6=E8=8E=B7=E5=8F=96=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=B0=83=E8=AF=95=E9=80=BB=E8=BE=91=EF=BC=8C=E5=A2=9E=E5=BC=BA?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E8=AE=B0=E5=BD=95=EF=BC=8C=E7=AE=80=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改 AIProofread.csproj.user 的 配置,调试时直接启动项目。 - Bridge.cs 中增加异常处理的详细错误信息。 - DocumentInfo.cs 增加日志记录,调整 RunInMainThread 方法逻辑。 - DocumentList.cs 删除过时的 XML 注释。 - ThisAddIn.cs 优化文档管理逻辑,调整 ActiveDocument 属性为只读,改进文档列表处理,删除冗余代码。 --- .vs/AIProofread/v17/.suo | Bin 3137024 -> 2992128 bytes AIProofread/AIProofread.csproj.user | 2 +- AIProofread/Bridge.cs | 2 + AIProofread/Config.cs | 3 +- AIProofread/Model/DocumentInfo.cs | 12 ++-- AIProofread/Model/DocumentList.cs | 1 - AIProofread/ThisAddIn.cs | 95 ++++++++++++++++++---------- 7 files changed, 72 insertions(+), 43 deletions(-) diff --git a/.vs/AIProofread/v17/.suo b/.vs/AIProofread/v17/.suo index f75631054dfcbe95686f81861bc97f8f108dcbca..c4a9cee34504093fb003faade273069e0eec757f 100644 GIT binary patch delta 42554 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 R$B&U=PYS)Fw@F>>{{gtIZkhl9 delta 27348 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�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 Gt^WhXkv&`h diff --git a/AIProofread/AIProofread.csproj.user b/AIProofread/AIProofread.csproj.user index f4331b6..61eb47a 100644 --- a/AIProofread/AIProofread.csproj.user +++ b/AIProofread/AIProofread.csproj.user @@ -7,7 +7,7 @@ - Program + Project C:\Soft\Kingsoft\WPS Office\12.1.0.20784\office6\wps.exe diff --git a/AIProofread/Bridge.cs b/AIProofread/Bridge.cs index c171648..e930657 100644 --- a/AIProofread/Bridge.cs +++ b/AIProofread/Bridge.cs @@ -452,6 +452,8 @@ namespace AIProofread catch (Exception ex) { Logger.Error("校对文档格式有误或内容异常", ex); + data["code"] = 6; + data["message"] = "文档格式有误或内容异常,请另存文档后再进行校对"; throw ex; } //if (loadingDialog != null && !loadingDialog.IsDisposed) diff --git a/AIProofread/Config.cs b/AIProofread/Config.cs index 3324faf..25254ee 100644 --- a/AIProofread/Config.cs +++ b/AIProofread/Config.cs @@ -26,6 +26,7 @@ namespace AIProofread { public static readonly string APP_NAME = "AI校对王"; public static readonly string APP_VERSION = "2.2.5"; + public static readonly string BuildVersion = "20250509_1656"; public static bool IS_WPS = false; public static bool UpgradeForcedNotice = false; public static readonly string APP_BASE_DIR = AppDomain.CurrentDomain.BaseDirectory; @@ -42,7 +43,7 @@ namespace AIProofread /// /// 网页访问地址 /// - public static string WEB_PATH = AppServer.PROD; //pre-gm-plugin.gachafun.com localhost:5173 gm2-plugin.zverse.group + public static string WEB_PATH = AppServer.DEV; //pre-gm-plugin.gachafun.com localhost:5173 gm2-plugin.zverse.group public static bool RUN_IN_DEBUG = true; public static AppEnvironment APP_ENV = AppEnvironment.Prod; #else diff --git a/AIProofread/Model/DocumentInfo.cs b/AIProofread/Model/DocumentInfo.cs index 1d8181d..7e4c2b6 100644 --- a/AIProofread/Model/DocumentInfo.cs +++ b/AIProofread/Model/DocumentInfo.cs @@ -96,6 +96,7 @@ namespace AIProofread.Model // 初始化 public DocumentInfo(Document doc) { + Logger.Debug("new DocumentInfo for " + doc.Name); this.CurrentDocument = doc; Initialize(); } @@ -109,7 +110,7 @@ namespace AIProofread.Model { CreateTaskPane(); } - Logger.Debug("TaskPane.Visible {" + TaskPane == null ? "null" : (TaskPane.Visible ? "true" : "false") + " => true"); + Logger.Debug("TaskPane.Visible {" + TaskPane == null ? "null" : (TaskPane.Visible ? "true" : "false") + " => true " + fileName); TaskPane.Visible = PaneVisible = true; } @@ -125,10 +126,10 @@ namespace AIProofread.Model } - public void RunInMainThread(Action action) + public void RunInMainThread(Action action,bool isClose = false) { - Logger.Debug($"RunInMainThread {action}"); - if (null == TaskPane) + Logger.Debug("RunInMainThread for " + fileName); + if (null == TaskPane && !isClose) { CreateTaskPane(); } @@ -338,9 +339,8 @@ namespace AIProofread.Model ComputeUniqueId(); if (TaskPane == null) { - Logger.Debug("init document Initialize(318) and CreateTaskPane"); + Logger.Debug("Initialize(334) and CreateTaskPane for " + CurrentDocument.Name); CreateTaskPane(); - } } diff --git a/AIProofread/Model/DocumentList.cs b/AIProofread/Model/DocumentList.cs index c51ba39..ced540b 100644 --- a/AIProofread/Model/DocumentList.cs +++ b/AIProofread/Model/DocumentList.cs @@ -103,7 +103,6 @@ namespace AIProofread.Model { return documentList.IndexOf(item); } - /// /// 设置当前激活的文档 /// diff --git a/AIProofread/ThisAddIn.cs b/AIProofread/ThisAddIn.cs index 9420661..b1abba3 100644 --- a/AIProofread/ThisAddIn.cs +++ b/AIProofread/ThisAddIn.cs @@ -57,7 +57,13 @@ namespace AIProofread /// /// 当前文档信息 /// - public DocumentInfo ActiveDocument { get; set; } + public DocumentInfo ActiveDocument + { + get + { + return documentList.SetActiveDocument(Application.ActiveDocument); + } + } /// /// 智能常识检测对话框 = new FormCommonsenseDetection() /// @@ -146,7 +152,7 @@ namespace AIProofread if (Application.Documents.Count > 0 && Application.ActiveDocument != null) { Logger.Debug("ThisAddIn_Startup 开始初始化当前文档"); - ActiveDocument = documentList.InitDocument(Application.ActiveDocument); + documentList.InitDocument(Application.ActiveDocument); // 直接初始化面板 // info.CheckPanel(); @@ -197,7 +203,7 @@ namespace AIProofread public void CheckDocumentClosed(object sender, System.Timers.ElapsedEventArgs e) { - var existsList = new List(); + var existsList = new List(); try { var docList = CurrentWordApplication.Documents; @@ -205,7 +211,7 @@ namespace AIProofread existsList.Clear(); foreach (Document item in docList) { - existsList.Add(item.FullName); + existsList.Add(item); } // 检测文档是否关闭 @@ -219,21 +225,21 @@ namespace AIProofread continue; } // 可能出现另存问题 所以需要更新文件名称 - var oldName = item.fileName; - var currentName = item.CurrentDocument.FullName; - if (oldName != currentName) + //var oldName = item.fileName; + //var currentName = item.CurrentDocument.FullName; + //if (oldName != currentName) + //{ + // item.fileName = currentName; + //} + if (!existsList.Contains(item.CurrentDocument)) { - item.fileName = currentName; - } - if (!existsList.Contains(currentName)) - { - Logger.Debug("检测到文档关闭,已移除:" + currentName); + Logger.Debug("检测到文档关闭,已移除:" + item.fileName); try { item.RunInMainThread(() => { item.Dispose(); - }); + }, true); } catch (Exception ex1) { @@ -246,7 +252,7 @@ namespace AIProofread } catch (Exception ex2) { - Logger.Error("移除已关闭文档",ex2); + Logger.Error("移除已关闭文档", ex2); } } } @@ -291,8 +297,8 @@ namespace AIProofread return; } - if (ActiveDocument == null) return; - // TODO 完成缓存保存 + //if (ActiveDocument == null) return; + //// TODO 完成缓存保存 } @@ -370,26 +376,28 @@ namespace AIProofread private void Application_DocumentChange() { - // 检测是否存在打开的文档 if (CurrentWordApplication.Documents.Count == 0) { return; } - var document = documentList.InitDocument(CurrentWordApplication.ActiveDocument); - if(document == null) return; - + var currentDocument = CurrentWordApplication.ActiveDocument; + + Logger.Debug("DocumentChange => " + currentDocument.Name); CheckDocumentClosed(null, null); if (formCommonsenseDetection != null) { formCommonsenseDetection.SendMessageToWeb("document-change", null); } + if (InDocumentInList(currentDocument)) + { + documentList.InitDocument(currentDocument); + } + //var document = documentList.InitDocument(CurrentWordApplication.ActiveDocument); + //if (document == null) return; + } - public void SetActiveDocument(Document doc) - { - ActiveDocument = documentList.SetActiveDocument(doc); - } private void Application_WindowDeactivate(Document doc, Window Wn) { @@ -401,6 +409,24 @@ namespace AIProofread //} } + + /// + /// 判断当前文档是否在列表中 + /// + /// + /// + private bool InDocumentInList(Document doc) + { + if (doc == null) return false; + foreach (Document item in Application.Documents) + { + if (item == doc) + { + return true; + } + } + return false; + } /// /// 激活文档 /// @@ -408,17 +434,18 @@ namespace AIProofread /// private void Application_WindowActivate(Document activeDoc, Window Wn) { - Logger.Debug("Application_WindowActivate -- " + activeDoc.Name); - if (activeDoc != null) + Logger.Debug("WindowActivate -- " + activeDoc.Name); + if (activeDoc != null && InDocumentInList(activeDoc)) { Logger.Debug("DocumentChange -- " + activeDoc.Name + " 修订模式: is " + activeDoc.TrackRevisions + ActiveDocument?.CurrentDocument?.Name + "==》" + activeDoc.Name); - var document = documentList.SetActiveDocument(activeDoc); - // 设置当前文档 - ActiveDocument = document; + documentList.SetActiveDocument(activeDoc); + //// 设置当前文档 + //ActiveDocument = document; } + //// 当前文档添加书签集合 //if (!allMarks.ContainsKey(activeDoc)) //{ @@ -477,7 +504,7 @@ namespace AIProofread private void Application_DocumentOpen(Document doc) { //LogHelper.Log("DocumentOpen " + doc.Name); - } + } public int GetMinWidth() @@ -566,20 +593,20 @@ namespace AIProofread public void GlobalCallback(string callbackId, string result) { - ActiveDocument?.GlobalCallback(callbackId, result); + documentList.SetActiveDocument(Application.ActiveDocument)?.GlobalCallback(callbackId, result); } // 显示面板 public void ShowPanel() { - Logger.Debug("ShowPanel"); - ActiveDocument?.ShowPane(); + documentList.SetActiveDocument(Application.ActiveDocument)?.ShowPane(); + } // 隐藏面板 public void HidePanel() { - ActiveDocument?.HidePane(); + documentList.SetActiveDocument(Application.ActiveDocument)?.HidePane(); } ///