From 266fdb9b9646d012f9212ee1eb91ac839f8ed21f Mon Sep 17 00:00:00 2001 From: krut_ni Date: Tue, 8 Apr 2025 11:37:13 +0200 Subject: [PATCH] WIP: implemented a static function to determine if pandoc is installed or not --- app/MindWork AI Studio/Tools/Pandoc.cs | 64 ++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 app/MindWork AI Studio/Tools/Pandoc.cs diff --git a/app/MindWork AI Studio/Tools/Pandoc.cs b/app/MindWork AI Studio/Tools/Pandoc.cs new file mode 100644 index 00000000..42fce7dd --- /dev/null +++ b/app/MindWork AI Studio/Tools/Pandoc.cs @@ -0,0 +1,64 @@ +using System.Diagnostics; +using System.Runtime.InteropServices; +using System.Text.RegularExpressions; + +namespace AIStudio.Tools; + +public static partial class Pandoc +{ + // Minimale erforderliche Version von Pandoc + private static readonly Version MINIMUM_REQUIRED_VERSION = new Version(3, 6, 0); + + /// + /// Checks if pandoc is available on the system and can be started as a process + /// + /// True, if pandoc is available and the minimum required version is met, else False. + public static async Task IsPandocAvailableAsync() + { + try + { + var startInfo = new ProcessStartInfo + { + FileName = GetPandocExecutableName(), + Arguments = "--version", + RedirectStandardOutput = true, + UseShellExecute = false, + CreateNoWindow = true + }; + using var process = Process.Start(startInfo); + if (process == null) + return false; + + var output = await process.StandardOutput.ReadToEndAsync(); + await process.WaitForExitAsync(); + if (process.ExitCode != 0) + return false; + + var versionMatch = PandocRegex().Match(output); + if (!versionMatch.Success) 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); + + return installedVersion >= MINIMUM_REQUIRED_VERSION; + + } + catch (Exception) + { + return false; + } + } + + /// + /// Gibt den Namen der Pandoc-Executable basierend auf dem Betriebssystem zurück. + /// + private static string GetPandocExecutableName() + { + return RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "pandoc.exe" : "pandoc"; + } + + [GeneratedRegex(@"pandoc(?:\.exe)?\s*([0-9]+\.[0-9]+\.[0-9]+)")] + private static partial Regex PandocRegex(); +} \ No newline at end of file