diff --git a/app/MindWork AI Studio/Chat/ContentBlockComponent.razor.cs b/app/MindWork AI Studio/Chat/ContentBlockComponent.razor.cs index 13575faa..efa9c31b 100644 --- a/app/MindWork AI Studio/Chat/ContentBlockComponent.razor.cs +++ b/app/MindWork AI Studio/Chat/ContentBlockComponent.razor.cs @@ -138,7 +138,7 @@ public partial class ContentBlockComponent : MSGComponentBase private async Task ExportToWord() { - await PandocExport.ToMicrosoftWord(this.RustService, T("Export Chat to Microsoft Word"), this.Content); + await PandocExport.ToMicrosoftWord(this.RustService, this.DialogService, T("Export Chat to Microsoft Word"), this.Content); } private async Task RegenerateBlock() diff --git a/app/MindWork AI Studio/Tools/PandocExport.cs b/app/MindWork AI Studio/Tools/PandocExport.cs index 23c660d9..de9dee46 100644 --- a/app/MindWork AI Studio/Tools/PandocExport.cs +++ b/app/MindWork AI Studio/Tools/PandocExport.cs @@ -1,8 +1,11 @@ using System.Diagnostics; using AIStudio.Chat; +using AIStudio.Dialogs; using AIStudio.Tools.PluginSystem; using AIStudio.Tools.Services; +using DialogOptions = AIStudio.Dialogs.DialogOptions; + namespace AIStudio.Tools; public static class PandocExport @@ -11,7 +14,7 @@ public static class PandocExport private static string TB(string fallbackEn) => I18N.I.T(fallbackEn, typeof(PandocExport).Namespace, nameof(PandocExport)); - public static async Task ToMicrosoftWord(RustService rustService, string dialogTitle, IContent markdownContent) + public static async Task ToMicrosoftWord(RustService rustService, IDialogService dialogService, string dialogTitle, IContent markdownContent) { var response = await rustService.SaveFile(dialogTitle, new("Microsoft Word", ["docx"])); if (response.UserCancelled) @@ -40,9 +43,25 @@ public static class PandocExport await File.WriteAllTextAsync(tempMarkdownFilePath, markdownText); // Ensure that Pandoc is installed and ready: - var pandocState = await Pandoc.CheckAvailabilityAsync(rustService); + var pandocState = await Pandoc.CheckAvailabilityAsync(rustService, showSuccessMessage: false); if (!pandocState.IsAvailable) - return false; + { + var dialogParameters = new DialogParameters + { + { x => x.ShowInitialResultInSnackbar, false }, + }; + + var dialogReference = await dialogService.ShowAsync(TB("Pandoc Installation"), dialogParameters, DialogOptions.FULLSCREEN); + await dialogReference.Result; + + pandocState = await Pandoc.CheckAvailabilityAsync(rustService, showSuccessMessage: true); + if (!pandocState.IsAvailable) + { + LOGGER.LogError("Pandoc is not available after installation attempt."); + await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Cancel, TB("Pandoc is required for Microsoft Word export"))); + return false; + } + } // Call Pandoc to create the Word file: var pandoc = await PandocProcessBuilder