From 62a4549f89142b4ff5d271e816a165f08fe8f818 Mon Sep 17 00:00:00 2001 From: krut_ni Date: Tue, 8 Apr 2025 15:04:28 +0200 Subject: [PATCH] Removed patch level from version requirements and included more expressive log messages --- app/MindWork AI Studio/Tools/Pandoc.cs | 27 +++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/app/MindWork AI Studio/Tools/Pandoc.cs b/app/MindWork AI Studio/Tools/Pandoc.cs index b5902b39..563ff8e0 100644 --- a/app/MindWork AI Studio/Tools/Pandoc.cs +++ b/app/MindWork AI Studio/Tools/Pandoc.cs @@ -1,13 +1,14 @@ using System.Diagnostics; using System.Runtime.InteropServices; using System.Text.RegularExpressions; +using AIStudio.Components; namespace AIStudio.Tools; public static partial class Pandoc { - private static readonly Version MINIMUM_REQUIRED_VERSION = new Version(3, 6, 0); - + private static readonly ILogger LOG = Program.LOGGER_FACTORY.CreateLogger("PluginFactory"); + private static readonly Version MINIMUM_REQUIRED_VERSION = new Version(3, 6); /// /// Checks if pandoc is available on the system and can be started as a process /// @@ -27,7 +28,8 @@ public static partial class Pandoc using var process = Process.Start(startInfo); if (process == null) { - await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.AppsOutage, $"Pandoc is not installed.")); + await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Help, "The pandoc process could not be started.")); + LOG.LogInformation("The pandoc process was not started, it was null"); return false; } @@ -35,32 +37,35 @@ public static partial class Pandoc await process.WaitForExitAsync(); if (process.ExitCode != 0) { - await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.AppsOutage, $"Pandoc is not installed.")); + await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Error, $"The pandoc process exited unexpectedly.")); + LOG.LogError("The pandoc process was exited with code {ProcessExitCode}", process.ExitCode); return false; } var versionMatch = PandocRegex().Match(output); if (!versionMatch.Success) { - await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.AppsOutage, $"Pandoc is not installed.")); + await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Terminal, $"pandoc --version returned an invalid format.")); + LOG.LogError("pandoc --version returned an invalid format:\n {Output}", output); return false; } var versions = versionMatch.Groups[1].Value.Split('.'); var major = int.Parse(versions[0]); var minor = int.Parse(versions[1]); - var patch = int.Parse(versions[2]); - var installedVersion = new Version(major, minor, patch); + var installedVersion = new Version(major, minor); if (installedVersion >= MINIMUM_REQUIRED_VERSION) return true; - await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.AppsOutage, $"Pandoc {installedVersion.ToString()} is installed, but it doesn't match the required version ({MINIMUM_REQUIRED_VERSION.ToString()}).\n")); + await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Build, $"Pandoc {installedVersion.ToString()} is installed, but it doesn't match the required version ({MINIMUM_REQUIRED_VERSION.ToString()}).")); + LOG.LogInformation("Pandoc {Installed} is installed, but it does not match the required version ({Requirement})", installedVersion.ToString(), MINIMUM_REQUIRED_VERSION.ToString()); return false; } - catch (Exception) + catch (Exception e) { - await MessageBus.INSTANCE.SendError(new (@Icons.Material.Filled.AppsOutage, "An unknown error occured while checking for Pandoc.")); + await MessageBus.INSTANCE.SendError(new (@Icons.Material.Filled.AppsOutage, "Pandoc is not installed.")); + LOG.LogError("Pandoc is not installed and threw an exception:\n {Message}", e.Message); return false; } } @@ -70,6 +75,6 @@ public static partial class Pandoc /// private static string GetPandocExecutableName() => RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "pandoc.exe" : "pandoc"; - [GeneratedRegex(@"pandoc(?:\.exe)?\s*([0-9]+\.[0-9]+\.[0-9]+)")] + [GeneratedRegex(@"pandoc(?:\.exe)?\s*([0-9]+\.[0-9]+)")] private static partial Regex PandocRegex(); } \ No newline at end of file