feat: ️新增全局回调方法,优化修订模式处理

在 `Bridge.cs` 文件中:
- 修改 `ProcessStartInfo` 的 `Verb` 属性赋值方式,保持不变。
- 新增 `Callback` 方法,用于全局回调。
- 新增 `CheckInTrackRevisions` 方法,用于检查文档是否处于修订模式,并根据用户选择关闭修订模式或返回相应结果。
- 修改提示信息内容,并在用户选择不关闭修订模式时,返回相应错误信息。
- 调整 `JSONObject.Create()` 的链式调用格式。
- 调整 `InitProofreadCacheList` 方法的参数格式。

在 `FormMessage.cs` 文件中:
- 新增 `ShowMessage` 方法的重载版本,支持自定义确认和取消按钮的文本。

在 `DocumentInfo.cs` 文件中:
- 新增 `GlobalCallback` 方法,用于调用 Web 全局回调函数。

在 `ThisAddIn.cs` 文件中:
- 修改日志记录信息,增加文档修订模式的状态。
- 新增 `GlobalCallback` 方法,用于全局回调。
This commit is contained in:
LittleBoy 2025-03-29 21:25:19 +08:00
parent e8c18e6eb8
commit 2b3e330841
5 changed files with 90 additions and 9 deletions

Binary file not shown.

View File

@ -241,7 +241,7 @@ namespace AIProofread
{
WorkingDirectory = applicationBase,
UseShellExecute = true,
Verb="runas"
Verb = "runas"
};
Process.Start(processStartInfo);
}
@ -319,6 +319,43 @@ namespace AIProofread
return document.CurrentDocument.Saved;
}
public void Callback(string callbackId, string result)
{
Globals.ThisAddIn.GlobalCallback(callbackId, result);
}
/// <summary>
/// 判断是否处理修订模式,如果没有在修订模式则回调返回false
/// </summary>
/// <param name="documentId"></param>
/// <param name="callback"></param>
public void CheckInTrackRevisions(string message,int documentId, string callbackId)
{
var doc = documentId > 0 ? Globals.ThisAddIn.GetDocumentById(documentId) : Globals.ThisAddIn.ActiveDocument;
if (doc.CurrentDocument.TrackRevisions)
{
doc.RunInMainThread(() =>
{
var result = FormMessage.ShowMessage(message, "确认", "取消", null);
if (result == DialogResult.OK)
{
// 关闭修订模式
doc.CurrentDocument.TrackRevisions = false;
Callback(callbackId, "false");
}
else
{
Callback(callbackId, "true");
}
});
}
else
{
Callback(callbackId, "false");
}
}
/// <summary>
/// 获取文档数据
/// </summary>
@ -332,14 +369,19 @@ namespace AIProofread
// 判断是否处理修订模式
if (doc.TrackRevisions)
{
//data.Add("code", 1);
//data.Add("message", "文档存在未处理的修订,请处理后再进行校对");
var ret = MessageBox.Show("文档当前处于修订模式,是否关闭此模式?","提示",MessageBoxButtons.YesNo);
if(ret == DialogResult.Yes)
var ret = MessageBox.Show("该文档已开启修订模型,请关闭此模式再进行校对。是否关闭?", "提示", MessageBoxButtons.YesNo);
if (ret == DialogResult.Yes)
{
doc.TrackRevisions = false;
}
else
{
data.Add("code", 1);
data.Add("message", "文档存在未处理的修订,请处理后再进行校对");
return Tools.GetJSONString(data);
}
}
// 判断是否需要强制升级
if (ShouldUpgradeForced())
{
data.Add("code", 2);
@ -451,7 +493,7 @@ namespace AIProofread
var lineNumber = range.get_Information(WdInformation.wdFirstCharacterLineNumber);
return JSONObject.Create()
.Put("text",text)
.Put("text", text)
.Put("page", pageNumber)
.Put("line", lineNumber)
.ToString();
@ -888,12 +930,12 @@ namespace AIProofread
return BridgeResult.Success(result == DialogResult.Yes ? "yes" : "no");
}
public string InitProofreadCacheList(string content,string originData)
public string InitProofreadCacheList(string content, string originData)
{
try
{
List<CorrectContext> list = JsonConvert.DeserializeObject<List<CorrectContext>>(content);
Dictionary<int,ProofreadRangeInfo> dics = string.IsNullOrEmpty(originData) ? null : JsonConvert.DeserializeObject<Dictionary<int, ProofreadRangeInfo>>(originData);
Dictionary<int, ProofreadRangeInfo> dics = string.IsNullOrEmpty(originData) ? null : JsonConvert.DeserializeObject<Dictionary<int, ProofreadRangeInfo>>(originData);
Globals.ThisAddIn.InitProofreadCacheList(list, dics);
return BridgeResult.Success();
}

View File

@ -85,6 +85,24 @@ namespace AIProofread.Controls
formMessage.Show();
return formMessage;
}
public static DialogResult ShowMessage(string message, string confirmText = "确认",string cancelText="取消", string confirmAction = null)
{
FormMessage formMessage = new FormMessage();
formMessage.SetMessage(message);
formMessage.currentConfirmAction = confirmAction;
formMessage.BtnClose.Text = cancelText;
if (string.IsNullOrEmpty(confirmText))
{
formMessage.HideConfirm();
}
else
{
formMessage.BtnConfirm.Text = confirmText;
formMessage.ResetButtons();
}
return formMessage.ShowDialog();
}
public static DialogResult ShowMessage(string message, string confirmText = "确认", string confirmAction = null)
{
FormMessage formMessage = new FormMessage();

View File

@ -526,6 +526,22 @@ namespace AIProofread.Model
}
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);
}
}
public void SendMessageToWeb(string msg, object data)
{
var json = JsonConvert.SerializeObject(new WebMessage(msg, data));

View File

@ -351,7 +351,7 @@ namespace AIProofread
if (formCommonsenseDetection != null) {
formCommonsenseDetection.SendMessageToWeb("document-change", null);
}
Logger.Log("Application_DocumentChange -- " + ActiveDocument.fileName);
Logger.Log("Application_DocumentChange -- " + ActiveDocument.fileName + " track is " + ActiveDocument.CurrentDocument.TrackRevisions);
}
public void SetActiveDocument(Document doc)
@ -504,6 +504,11 @@ namespace AIProofread
ActiveDocument?.SendMessageToWeb(msg, data);
}
public void GlobalCallback(string callbackId, string result)
{
ActiveDocument?.GlobalCallback(callbackId, result);
}
// 显示面板
public void ShowPanel()
{