mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2025-08-20 23:32:55 +00:00
Refactored Pandoc architecture handling with RID-based logic
This commit is contained in:
parent
40b6432f0f
commit
d2a6223493
@ -1,15 +1,21 @@
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO.Compression;
|
using System.IO.Compression;
|
||||||
using System.Runtime.InteropServices;
|
using System.Reflection;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
using AIStudio.Tools.Metadata;
|
||||||
using AIStudio.Tools.Services;
|
using AIStudio.Tools.Services;
|
||||||
|
|
||||||
|
using SharedTools;
|
||||||
|
|
||||||
namespace AIStudio.Tools;
|
namespace AIStudio.Tools;
|
||||||
|
|
||||||
public static partial class Pandoc
|
public static partial class Pandoc
|
||||||
{
|
{
|
||||||
private const string CPU_ARCHITECTURE = "win-x64";
|
private static readonly Assembly ASSEMBLY = Assembly.GetExecutingAssembly();
|
||||||
|
private static readonly MetaDataArchitectureAttribute META_DATA_ARCH = ASSEMBLY.GetCustomAttribute<MetaDataArchitectureAttribute>()!;
|
||||||
|
private static readonly RID CPU_ARCHITECTURE = META_DATA_ARCH.Architecture.ToRID();
|
||||||
|
|
||||||
private const string DOWNLOAD_URL = "https://github.com/jgm/pandoc/releases/download";
|
private const string DOWNLOAD_URL = "https://github.com/jgm/pandoc/releases/download";
|
||||||
private const string LATEST_URL = "https://github.com/jgm/pandoc/releases/latest";
|
private const string LATEST_URL = "https://github.com/jgm/pandoc/releases/latest";
|
||||||
|
|
||||||
@ -233,11 +239,26 @@ public static partial class Pandoc
|
|||||||
var baseUri = $"{DOWNLOAD_URL}/{version}/pandoc-{version}-";
|
var baseUri = $"{DOWNLOAD_URL}/{version}/pandoc-{version}-";
|
||||||
return CPU_ARCHITECTURE switch
|
return CPU_ARCHITECTURE switch
|
||||||
{
|
{
|
||||||
"win-x64" => $"{baseUri}windows-x86_64.zip",
|
//
|
||||||
"osx-x64" => $"{baseUri}x86_64-macOS.zip",
|
// Unfortunately, pandoc is not yet available for ARM64 Windows systems,
|
||||||
"osx-arm64" => $"{baseUri}arm64-macOS.zip",
|
// so we have to use the x86_64 version for now. ARM Windows contains
|
||||||
"linux-x64" => $"{baseUri}linux-amd64.tar.gz",
|
// an x86_64 emulation layer, so it should work fine for now.
|
||||||
"linux-arm" => $"{baseUri}linux-arm64.tar.gz",
|
//
|
||||||
|
// Pandoc would be available for ARM64 Windows, but the Haskell compiler
|
||||||
|
// does not support ARM64 Windows yet. Here are the related issues:
|
||||||
|
//
|
||||||
|
// - Haskell compiler: https://gitlab.haskell.org/ghc/ghc/-/issues/24603
|
||||||
|
// - Haskell ARM MR: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13856
|
||||||
|
// - Pandoc ARM64: https://github.com/jgm/pandoc/issues/10095
|
||||||
|
//
|
||||||
|
RID.WIN_X64 or RID.WIN_ARM64 => $"{baseUri}windows-x86_64.zip",
|
||||||
|
|
||||||
|
RID.OSX_X64 => $"{baseUri}x86_64-macOS.zip",
|
||||||
|
RID.OSX_ARM64 => $"{baseUri}arm64-macOS.zip",
|
||||||
|
|
||||||
|
RID.LINUX_X64 => $"{baseUri}linux-amd64.tar.gz",
|
||||||
|
RID.LINUX_ARM64 => $"{baseUri}linux-arm64.tar.gz",
|
||||||
|
|
||||||
_ => string.Empty,
|
_ => string.Empty,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -253,12 +274,27 @@ public static partial class Pandoc
|
|||||||
|
|
||||||
switch (CPU_ARCHITECTURE)
|
switch (CPU_ARCHITECTURE)
|
||||||
{
|
{
|
||||||
case "win-x64":
|
//
|
||||||
|
// Unfortunately, pandoc is not yet available for ARM64 Windows systems,
|
||||||
|
// so we have to use the x86_64 version for now. ARM Windows contains
|
||||||
|
// an x86_64 emulation layer, so it should work fine for now.
|
||||||
|
//
|
||||||
|
// Pandoc would be available for ARM64 Windows, but the Haskell compiler
|
||||||
|
// does not support ARM64 Windows yet. Here are the related issues:
|
||||||
|
//
|
||||||
|
// - Haskell compiler: https://gitlab.haskell.org/ghc/ghc/-/issues/24603
|
||||||
|
// - Haskell ARM MR: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13856
|
||||||
|
// - Pandoc ARM64: https://github.com/jgm/pandoc/issues/10095
|
||||||
|
//
|
||||||
|
case RID.WIN_X64 or RID.WIN_ARM64:
|
||||||
return $"{baseUri}windows-x86_64.msi";
|
return $"{baseUri}windows-x86_64.msi";
|
||||||
case "osx-x64":
|
|
||||||
|
case RID.OSX_X64:
|
||||||
return $"{baseUri}x86_64-macOS.pkg";
|
return $"{baseUri}x86_64-macOS.pkg";
|
||||||
case "osx-arm64":
|
|
||||||
return $"{baseUri}arm64-macOS.pkg\n";
|
case RID.OSX_ARM64:
|
||||||
|
return $"{baseUri}arm64-macOS.pkg";
|
||||||
|
|
||||||
default:
|
default:
|
||||||
await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Terminal, $"Installers are not available on {CPU_ARCHITECTURE} systems."));
|
await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Terminal, $"Installers are not available on {CPU_ARCHITECTURE} systems."));
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
@ -269,7 +305,7 @@ public static partial class Pandoc
|
|||||||
/// Reads the os platform to determine the used executable name
|
/// Reads the os platform to determine the used executable name
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>Name of the pandoc executable</returns>
|
/// <returns>Name of the pandoc executable</returns>
|
||||||
private static string GetPandocExecutableName() => RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "pandoc.exe" : "pandoc";
|
private static string GetPandocExecutableName() => CPU_ARCHITECTURE is RID.WIN_ARM64 ? "pandoc.exe" : "pandoc";
|
||||||
|
|
||||||
private static async Task<string> GetPandocDataFolder(RustService rustService) => Path.Join(await rustService.GetDataDirectory(), "pandoc");
|
private static async Task<string> GetPandocDataFolder(RustService rustService) => Path.Join(await rustService.GetDataDirectory(), "pandoc");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user