Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions src/UniGetUI.Core.Data/CoreData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,29 @@ public static int CODE_PAGE
{
get => __code_page ??= GetCodePage();
}

private static Encoding? __console_encoding;
// The encoding CLIs that don't force UTF-8 (e.g. Chocolatey) actually emit their console output in.
public static Encoding ConsoleEncoding
{
get
{
if (__console_encoding is not null)
return __console_encoding;
try
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
__console_encoding = Encoding.GetEncoding(CODE_PAGE);
}
catch (Exception e)
{
Logger.Warn($"Could not resolve console code page {CODE_PAGE}, falling back to UTF-8");
Logger.Warn(e);
__console_encoding = Encoding.UTF8;
}
return __console_encoding;
}
}
public const string VersionName = "2026.1.0"; // Do not modify this line, use file scripts/set-version.ps1
public const int BuildNumber = 106; // Do not modify this line, use file scripts/set-version.ps1

Expand Down
1 change: 1 addition & 0 deletions src/UniGetUI.Core.Data/UniGetUI.Core.Data.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,6 @@

<ItemGroup>
<PackageReference Include="YamlDotNet" Version="17.0.1" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="10.0.5" />
</ItemGroup>
</Project>
7 changes: 7 additions & 0 deletions src/UniGetUI.PackageEngine.Interfaces/IPackageManager.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System.Text;
using UniGetUI.PackageEngine.Classes.Manager.Classes;
using UniGetUI.PackageEngine.Classes.Manager.ManagerHelpers;
using UniGetUI.PackageEngine.Interfaces.ManagerProviders;
Expand All @@ -21,6 +22,12 @@ public interface IPackageManager
public IPackageOperationHelper OperationHelper { get; }
public IReadOnlyList<ManagerDependency> Dependencies { get; }

/// <summary>
/// The text encoding this manager's CLI emits its output in. Defaults to UTF-8; managers
/// whose CLI emits in the system console code page (e.g. Chocolatey) must override this.
/// </summary>
public Encoding OutputEncoding { get; }

/// <summary>
/// Initializes the Package Manager (asynchronously). Must be run before using any other method of the manager.
/// </summary>
Expand Down
13 changes: 10 additions & 3 deletions src/UniGetUI.PackageEngine.Managers.Chocolatey/Chocolatey.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Diagnostics;
using System.Text;
using UniGetUI.Core.Data;
using UniGetUI.Core.Logging;
using UniGetUI.Core.SettingsEngine;
Expand All @@ -18,6 +19,9 @@ namespace UniGetUI.PackageEngine.Managers.ChocolateyManager
{
public class Chocolatey : BaseNuGet
{
// Chocolatey emits its output in the system console code page, not UTF-8.
public override Encoding OutputEncoding => CoreData.ConsoleEncoding;

public static readonly string[] FALSE_PACKAGE_IDS =
[
"Directory",
Expand Down Expand Up @@ -265,7 +269,8 @@ protected override IReadOnlyList<Package> GetAvailableUpdates_UnSafe()
RedirectStandardInput = true,
UseShellExecute = false,
CreateNoWindow = true,
StandardOutputEncoding = System.Text.Encoding.UTF8,
StandardOutputEncoding = OutputEncoding,
StandardErrorEncoding = OutputEncoding,
},
};

Expand Down Expand Up @@ -300,7 +305,8 @@ protected override IReadOnlyList<Package> _getInstalledPackages_UnSafe()
RedirectStandardInput = true,
UseShellExecute = false,
CreateNoWindow = true,
StandardOutputEncoding = System.Text.Encoding.UTF8,
StandardOutputEncoding = OutputEncoding,
StandardErrorEncoding = OutputEncoding,
},
};

Expand Down Expand Up @@ -368,7 +374,8 @@ protected override void _loadManagerVersion(out string version)
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true,
StandardOutputEncoding = System.Text.Encoding.UTF8,
StandardOutputEncoding = OutputEncoding,
StandardErrorEncoding = OutputEncoding,
},
};
process.Start();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ protected override IReadOnlyList<string> GetInstallableVersions_UnSafe(IPackage
RedirectStandardError = true,
RedirectStandardInput = true,
CreateNoWindow = true,
StandardOutputEncoding = System.Text.Encoding.UTF8,
StandardOutputEncoding = Manager.OutputEncoding,
StandardErrorEncoding = Manager.OutputEncoding,
},
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ protected override IReadOnlyList<IManagerSource> GetSources_UnSafe()
RedirectStandardInput = true,
UseShellExecute = false,
CreateNoWindow = true,
StandardOutputEncoding = System.Text.Encoding.UTF8,
StandardOutputEncoding = Manager.OutputEncoding,
StandardErrorEncoding = Manager.OutputEncoding,
},
};

Expand Down
2 changes: 2 additions & 0 deletions src/UniGetUI.PackageEngine.Operations/PackageOperations.cs
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,8 @@ protected sealed override void PrepareProcessStartInfo()

process.StartInfo.FileName = FileName;
process.StartInfo.Arguments = Arguments;
process.StartInfo.StandardOutputEncoding = Package.Manager.OutputEncoding;
process.StartInfo.StandardErrorEncoding = Package.Manager.OutputEncoding;

ApplyCapabilities(
IsAdmin,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System.Text;
using UniGetUI.Core.IconEngine;
using UniGetUI.Core.Tools;
using UniGetUI.Interface.Enums;
Expand All @@ -19,6 +20,7 @@ public class NullPackageManager : IPackageManager
public ManagerProperties Properties { get; }
public ManagerCapabilities Capabilities { get; }
public ManagerStatus Status { get; }
public Encoding OutputEncoding => Encoding.UTF8;
public string Id
{
get => string.IsNullOrWhiteSpace(Properties.Id) ? Properties.Name : Properties.Id;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System.Text;
using UniGetUI.Core.Logging;
using UniGetUI.Core.SettingsEngine;
using UniGetUI.Core.SettingsEngine.SecureSettings;
Expand Down Expand Up @@ -41,6 +42,7 @@ public IManagerSource DefaultSource
public IMultiSourceHelper SourcesHelper { get; protected set; } = new NullSourceHelper();
public IPackageDetailsHelper DetailsHelper { get; protected set; } = null!;
public IPackageOperationHelper OperationHelper { get; protected set; } = null!;
public virtual Encoding OutputEncoding => Encoding.UTF8;

private readonly bool _baseConstructorCalled;
private bool _ready;
Expand Down
Loading