From c6bec781657a0b1c6776ec677f01e019d1b5f845 Mon Sep 17 00:00:00 2001 From: callmeyan Date: Wed, 28 May 2025 18:44:29 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=F0=9F=A7=AC=EF=B8=8F=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=9F=A5=E6=89=BE=E5=87=86=E7=A1=AE=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/AIProofread/v17/.suo | Bin 3619840 -> 3063808 bytes AIProofread/Config.cs | 6 +-- AIProofread/Logger.cs | 11 +++++ AIProofread/Model/DocumentInfo.cs | 17 +++++++ AIProofread/Model/DocumentList.cs | 1 + AIProofread/Properties/AssemblyInfo.cs | 8 ++-- AIProofread/ThisAddIn.cs | 61 +++++++++++++------------ AIProofread/core/DocumentUtil.cs | 32 ++++++++----- 8 files changed, 87 insertions(+), 49 deletions(-) diff --git a/.vs/AIProofread/v17/.suo b/.vs/AIProofread/v17/.suo index 0ced480d872469180aa7d4528e67c8c36d2834f1..d621e15b362e009800f83722513f1593e1a0ce1f 100644 GIT binary patch delta 36231 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 diff --git a/AIProofread/Config.cs b/AIProofread/Config.cs index 2cd8a17..259729c 100644 --- a/AIProofread/Config.cs +++ b/AIProofread/Config.cs @@ -36,7 +36,7 @@ namespace AIProofread public class Config { public static readonly string APP_NAME = "AI校对王(公告版)"; - public static readonly string APP_VERSION = "2.2.3"; + public static readonly string APP_VERSION = "3.1.0"; public static bool IS_WPS = false; public static bool UpgradeForcedNotice = false; public static readonly string APP_BASE_DIR = AppDomain.CurrentDomain.BaseDirectory; @@ -52,9 +52,9 @@ namespace AIProofread /// /// 网页访问地址 /// - public static string WEB_PATH = AppServer.DEV; //pre-gm-plugin.gachafun.com localhost:5173 gm2-plugin.zverse.group + public static string WEB_PATH = AppServer.TEST; //pre-gm-plugin.gachafun.com localhost:5173 gm2-plugin.zverse.group public static bool RUN_IN_DEBUG = true; - public static AppEnvironment APP_ENV = AppEnvironment.Dev; + public static AppEnvironment APP_ENV = AppEnvironment.Prod; #else public static string WEB_PATH = AppServer.TEST; // gm-plugin.gachafun.com pre-gm-plugin.gachafun.com public static bool RUN_IN_DEBUG = false; diff --git a/AIProofread/Logger.cs b/AIProofread/Logger.cs index 0cb4d3c..02a8f33 100644 --- a/AIProofread/Logger.cs +++ b/AIProofread/Logger.cs @@ -1,4 +1,5 @@ using AIProofread.Controls; +using SixLabors.Fonts.Tables.AdvancedTypographic; using System; using System.Collections.Generic; using System.IO; @@ -59,5 +60,15 @@ namespace AIProofread Globals.ThisAddIn.SendMessageToWeb("DEBUG-LOG", msg); } } + + public static void Error(string v, Exception e) + { + Log("ERROR", v + "\n" + e.Message + "\n" + e.StackTrace); + } + + internal static void Info(string v) + { + Log("INFO", v); + } } } diff --git a/AIProofread/Model/DocumentInfo.cs b/AIProofread/Model/DocumentInfo.cs index 65176a7..2bccb6f 100644 --- a/AIProofread/Model/DocumentInfo.cs +++ b/AIProofread/Model/DocumentInfo.cs @@ -1029,5 +1029,22 @@ namespace AIProofread.Model Logger.Log(CurrentDocument.FullName + $" TaskPane visible {PaneVisible} has " + (TaskPane == null ? "null" : "exists")); if (TaskPane == null) CreateTaskPane(); } + + public void GlobalCallback(string callbackId, string result) + { + ProofreadMainControl control = (ProofreadMainControl)TaskPane.Control; + try + { + if (control.web.CoreWebView2 == null) + { + Thread.Sleep(1000); + } + control.web.CoreWebView2.ExecuteScriptAsync($"window.__global_callback_function('{callbackId}','{result}');"); + } + catch (Exception ex) + { + Logger.Log("GlobalCallback", "call web global function error \n" + ex.Message + "\n" + callbackId + result); + } + } } } diff --git a/AIProofread/Model/DocumentList.cs b/AIProofread/Model/DocumentList.cs index 4a8354c..d9d890d 100644 --- a/AIProofread/Model/DocumentList.cs +++ b/AIProofread/Model/DocumentList.cs @@ -142,5 +142,6 @@ namespace AIProofread.Model { documentList.ForEach(d => d.HidePane()); } + } } diff --git a/AIProofread/Properties/AssemblyInfo.cs b/AIProofread/Properties/AssemblyInfo.cs index 3907dd9..cf99869 100644 --- a/AIProofread/Properties/AssemblyInfo.cs +++ b/AIProofread/Properties/AssemblyInfo.cs @@ -7,10 +7,10 @@ using System.Security; // 控制。更改这些特性值可修改 // 与程序集关联的信息。 [assembly: AssemblyTitle("AI校对王(公告版)")] -[assembly: AssemblyDescription("AI校对王(公告版) 1.0.0")] +[assembly: AssemblyDescription("AI校对王(公告版) 1.1.0")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("果麦文化传媒股份有限公司")] -[assembly: AssemblyProduct("AI校对王(公告版) 1.0.0")] +[assembly: AssemblyProduct("AI校对王(公告版) 1.1.0")] [assembly: AssemblyCopyright("Copyright © 果麦文化传媒股份有限公司 2025")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -33,6 +33,6 @@ using System.Security; //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, // 方法是按如下所示使用“*”: : // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyVersion("1.1.0.0")] +[assembly: AssemblyFileVersion("1.1.0.0")] diff --git a/AIProofread/ThisAddIn.cs b/AIProofread/ThisAddIn.cs index 7c6aa65..5180ac8 100644 --- a/AIProofread/ThisAddIn.cs +++ b/AIProofread/ThisAddIn.cs @@ -8,19 +8,15 @@ using AIProofread.Controls; using UtilLib; using AIProofread.Model; using System.Collections.Generic; -using System.Runtime.InteropServices; -using System.Threading.Tasks; -using System.Text; -//using CustomTaskPane = Microsoft.Office.Core.CustomTaskPane; -//using CustomTaskPane = Microsoft.Office.Tools.CustomTaskPane; -//using NPOI.SS.Formula.Functions; + namespace AIProofread { public partial class ThisAddIn { - + // LogManager.GetLogger(typeof(ThisAddIn)) + //public ILog Logger = LogHelper.GetLogger(typeof(ThisAddIn)); public static SynchronizationContext FmainThreadContext; public string AddinName = " "; @@ -98,7 +94,7 @@ namespace AIProofread { if (fromLawQuery == null || fromLawQuery.IsDisposed) { - fromLawQuery = new FormWebView(Config.WebPath("laws-query?app_v=101"), 1300, 750); + fromLawQuery = new FormWebView(Config.WebPath("laws-query?app_v=101"), 1300,800); } fromLawQuery.Show(); // 显示在最前面 @@ -139,7 +135,7 @@ namespace AIProofread //formCommonsenseDetection.ShowInTaskbar = false; //formCommonsenseDetection.Show(); - Logger.Log("ThisAddIn_Startup IS_WPS --> " + IsWPS); + Logger.Log("ThisAddIn_Startup Platform --> " + (IsWPS?"WPS":"WORD")); // 捕获全局异常 AppDomain.CurrentDomain.UnhandledException += ProcessApplicationException; System.Windows.Forms.Application.ThreadException += ProcessApplicationFormException; @@ -217,7 +213,7 @@ namespace AIProofread // 可能出现另存问题 所以需要更新文件名称 var oldName = item.fileName; var currentName = item.CurrentDocument.FullName; - if(oldName != currentName) + if (oldName != currentName) { item.fileName = currentName; } @@ -281,7 +277,7 @@ namespace AIProofread private void Application_DocumentBeforeSave(Document originDocument, ref bool SaveAsUI, ref bool Cancel) { - Logger.Log("DocumentSave", originDocument.Name + "\r\n"); + //LogHelper.Log("DocumentSave", originDocument.Name + "\r\n"); if (CurrentWordApplication.Documents.Count == 0) { return; @@ -317,27 +313,24 @@ namespace AIProofread } catch (Exception ex) { - Logger.Log("Init WPS Error " + ex.Message); + Logger.Log("Init WPS Error ",ex); } } - // 如果启用直接有文档打开 - // 初始化面板 try { - var docList = CurrentWordApplication.Documents; - if(docList.Count > 0) - { - foreach (Document item in docList) + // 默认已经打开了文档 直接初始化 + if(CurrentWordApplication.Documents.Count > 0){ + foreach (Document item in CurrentWordApplication.Documents) { - Logger.Log("Init Documentinfo ==> " + item.Name); - var info = documentList.InitDocument(item); + var info = documentList.InitDocument(item); + // 直接初始化面板 info.CheckPanel(); } } } catch (Exception ex) { - Logger.Log("Init Documentinfo Error " + ex.Message); + Logger.Error("Initialize documentlist Error ", ex); } string verTextFile = Config.APP_BASE_DIR + Path.GetFileName("app_version.txt"); try @@ -348,7 +341,6 @@ namespace AIProofread { Logger.Log("Write App Version Error " + ex.Message); } - } private void InitAppByConfig() @@ -358,7 +350,7 @@ namespace AIProofread if (File.Exists(Config.CONFIG_FILE)) { string content = File.ReadAllText(Config.CONFIG_FILE); - Logger.Log("INIT", "Found app.json " + content); + //LogHelper.Log("INIT", "Found app.json " + content); if (content == null || content.Length == 0) return; AppConfig config = JsonConvert.DeserializeObject(content); @@ -396,10 +388,11 @@ namespace AIProofread ActiveDocument = documentList.SetActiveDocument(CurrentWordApplication.ActiveDocument); ActiveDocument.CheckBtnStatus(); CheckDocumentClosed(null, null); - if (formCommonsenseDetection != null) { + if (formCommonsenseDetection != null) + { formCommonsenseDetection.SendMessageToWeb("document-change", null); } - Logger.Log("Application_DocumentChange -- " + ActiveDocument.fileName); + //LogHelper.Log("Application_DocumentChange -- " + ActiveDocument.fileName + " track is " + ActiveDocument.CurrentDocument.TrackRevisions); } public void SetActiveDocument(Document doc) @@ -424,8 +417,11 @@ namespace AIProofread /// private void Application_WindowActivate(Document activeDoc, Window Wn) { - ActiveDocument = documentList.SetActiveDocument(activeDoc); - Logger.Log("Application_WindowActivate -- " + ActiveDocument.fileName); + if (activeDoc != null && (ActiveDocument == null || activeDoc != ActiveDocument.CurrentDocument)) + { + ActiveDocument = documentList.SetActiveDocument(activeDoc); + Logger.Info("Application_WindowActivate -- " + ActiveDocument.fileName); + } //// 当前文档添加书签集合 //if (!allMarks.ContainsKey(activeDoc)) //{ @@ -462,7 +458,7 @@ namespace AIProofread { doc.HidePane(); } - Logger.Log("DocumentBeforeClose", currentDoc.FullName); + //LogHelper.Log("DocumentBeforeClose", currentDoc.FullName); //if (allMarks.ContainsKey(currentDoc)) //{ // allMarks.Remove(currentDoc); @@ -484,12 +480,12 @@ namespace AIProofread private void Application_NewDocument(Document doc) { - Logger.Log("NewDocument" + doc.Name); + //LogHelper.Log("NewDocument" + doc.Name); } private void Application_DocumentOpen(Document doc) { - Logger.Log("DocumentOpen " + doc.Name); + //LogHelper.Log("DocumentOpen " + doc.Name); } @@ -552,6 +548,11 @@ namespace AIProofread ActiveDocument?.SendMessageToWeb(msg, data); } + public void GlobalCallback(string callbackId, string result) + { + ActiveDocument?.GlobalCallback(callbackId, result); + } + // 显示面板 public void ShowPanel() { diff --git a/AIProofread/core/DocumentUtil.cs b/AIProofread/core/DocumentUtil.cs index e418f2d..4bb6b8a 100644 --- a/AIProofread/core/DocumentUtil.cs +++ b/AIProofread/core/DocumentUtil.cs @@ -391,7 +391,7 @@ namespace AIProofread return bookmark; } - private static Range FindBySentence(Range paraRange, CorrectContext c, CorrectItem item, Microsoft.Office.Interop.Word.Document document) + private static Range FindBySentence(Range paraRange, CorrectContext c, CorrectItem item, Microsoft.Office.Interop.Word.Document document,int prevOffset) { try { @@ -409,6 +409,7 @@ namespace AIProofread } //int count = 0; var range = document.Range(offset + item.Start, offset + item.End + 1); + #region //while (true && count++ < 10) //{ // // @@ -433,6 +434,7 @@ namespace AIProofread // Logger.Log(dce); // } //} + #endregion // 比对原始内容与校对原文是否一致 if (range.Text == item.Origin) { @@ -442,7 +444,7 @@ namespace AIProofread // 直接找 var range1 = document.Range(offset + item.Start, offset + item.End + 1); // 兼容空格的全角与半角 - if(item.Origin == " " && (range1.Text == " " || range1.Text == " " || range1.Text.Trim().Length == 0)) + if (item.Origin == " " && (range1.Text == " " || range1.Text == " " || range1.Text.Trim().Length == 0)) { return range1; } @@ -452,7 +454,7 @@ namespace AIProofread return range1; } // 执行查找 - return FindTextInRange(sentence, item.Origin); + return FindTextInRange(sentence, item.Origin, prevOffset); } catch (Exception) { @@ -461,10 +463,15 @@ namespace AIProofread return null; } - public static Range FindTextInRange(Range range, string searchText) + public static Range FindTextInRange(Range range, string searchText,int findStart = -1) { try { + // 设置起始位置 + if (findStart > 0) + { + range.Start = range.Start + findStart; + } Find find = range.Find; if (range.Comments.Count > 0) { @@ -477,7 +484,8 @@ namespace AIProofread find.Wrap = WdFindWrap.wdFindContinue; find.Execute(); if (find.Found) return range; - } catch (Exception) { } + } + catch (Exception) { } return null; } @@ -493,7 +501,7 @@ namespace AIProofread //var offset = paraStart + c.SentenceOffset; ////var cutLength = Math.Min(c.InsertLen, paraText.Length - offset); - var originFindRange = FindBySentence(paraRange, c, item, document); + var originFindRange = FindBySentence(paraRange, c, item, document, prevOffset); if (originFindRange != null) return originFindRange; // 如果是新增 则查找定位 @@ -616,7 +624,7 @@ namespace AIProofread } - private static NPOI.SS.UserModel.ICell CreateCell(IRow row, int colIndex, IFont font, string text,ICellStyle style = null) + private static NPOI.SS.UserModel.ICell CreateCell(IRow row, int colIndex, IFont font, string text, ICellStyle style = null) { var cell = row.CreateCell(colIndex); if (font != null) @@ -629,7 +637,7 @@ namespace AIProofread { cell.SetCellValue(text); } - if(style != null) + if (style != null) { cell.CellStyle = style; @@ -674,7 +682,7 @@ namespace AIProofread }; // 设置表头筛选及冻结 2.0.5 2024-12-30修改 - sheet.CreateFreezePane(0, 1,0,1); + sheet.CreateFreezePane(0, 1, 0, 1); sheet.SetAutoFilter(CellRangeAddress.ValueOf("A1:G1")); // 设置表头为白色 @@ -683,13 +691,13 @@ namespace AIProofread headerFont.FontName = "黑体"; // 设置字体 headerFont.FontHeightInPoints = 11; // 字体大小 var themeColor = new XSSFColor(new byte[] { 214, 170, 105 }); // 首行背景色黑色,字体用主题金色 - ((XSSFFont)headerFont).SetColor(themeColor); + ((XSSFFont)headerFont).SetColor(themeColor); headerStyle.SetFont(headerFont); // 应用字体 // 设置背景颜色为黑色 headerStyle.FillForegroundColor = HSSFColor.Black.Index; // 设置前景色 headerStyle.FillPattern = FillPattern.SolidForeground; // 使用实心填充模式 - + // 对齐方式 headerStyle.VerticalAlignment = VerticalAlignment.Center; // 垂直居中 headerStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; // 水平居中 @@ -848,7 +856,7 @@ namespace AIProofread { tag = "黑名单"; } - else if(it.Type == "fallen_officers") + else if (it.Type == "fallen_officers") { tag = "落马官员"; }