diff --git a/app/MindWork AI Studio/Tools/Pandoc.cs b/app/MindWork AI Studio/Tools/Pandoc.cs index 563ff8e0..73cdc6ad 100644 --- a/app/MindWork AI Studio/Tools/Pandoc.cs +++ b/app/MindWork AI Studio/Tools/Pandoc.cs @@ -1,14 +1,18 @@ using System.Diagnostics; +using System.IO.Compression; using System.Runtime.InteropServices; using System.Text.RegularExpressions; using AIStudio.Components; +using AIStudio.Tools.Services; namespace AIStudio.Tools; public static partial class Pandoc { private static readonly ILogger LOG = Program.LOGGER_FACTORY.CreateLogger("PluginFactory"); + private static readonly string DOWNLOAD_URL = "https://github.com/jgm/pandoc/releases/download/3.6.4/pandoc-3.6.4-windows-x86_64.zip"; 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 /// @@ -53,9 +57,12 @@ public static partial class Pandoc var major = int.Parse(versions[0]); var minor = int.Parse(versions[1]); var installedVersion = new Version(major, minor); - + if (installedVersion >= MINIMUM_REQUIRED_VERSION) + { + await MessageBus.INSTANCE.SendSuccess(new(Icons.Material.Filled.CheckCircle, $"Pandoc {installedVersion.ToString()} is installed.")); return true; + } 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()); @@ -70,6 +77,55 @@ public static partial class Pandoc } } + public static async Task InstallPandocAsync(RustService rustService) + { + var dataDir = await rustService.GetDataDirectory(); + await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Help, $"{dataDir}")); + var installDir = Path.Join(dataDir, "pandoc"); + + try + { + if (!Directory.Exists(installDir)) + Directory.CreateDirectory(installDir); + + using var client = new HttpClient(); + var response = await client.GetAsync(DOWNLOAD_URL); + if (response.IsSuccessStatusCode) + { + var fileBytes = await response.Content.ReadAsByteArrayAsync(); + var tempZipPath = Path.Join(Path.GetTempPath(), "pandoc.zip"); + await File.WriteAllBytesAsync(tempZipPath, fileBytes); + ZipFile.ExtractToDirectory(tempZipPath, installDir); + File.Delete(tempZipPath); + + var currentPath = Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine); + var pandocDir = Path.Join(currentPath, "pandoc-3.6.4"); + if (currentPath != null && !currentPath.Contains(pandocDir)) + { + Environment.SetEnvironmentVariable( + "PATH", + $"{currentPath};{pandocDir}", + EnvironmentVariableTarget.Machine); + Console.WriteLine("Pandoc-Verzeichnis zum PATH hinzugefügt."); + } + else + { + Console.WriteLine("Pandoc-Verzeichnis ist bereits im PATH."); + } + + await MessageBus.INSTANCE.SendSuccess(new(Icons.Material.Filled.CheckCircle, $"Pandoc {MINIMUM_REQUIRED_VERSION.ToString()} was installed successfully.")); + } + else + { + Console.WriteLine("Fehler beim Herunterladen von Pandoc."); + } + } + catch (Exception ex) + { + Console.WriteLine($"Fehler: {ex.Message}"); + } + } + /// /// Returns the name of the pandoc executable based on the running operating system ///