Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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
2 changes: 2 additions & 0 deletions CommunityBugFixCollection/Contributors.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,7 @@ internal static class Contributors
public static string[] Nytra { get; } = ["Nytra"];

public static string[] __Choco__ { get; } = ["__Choco__"];

public static string[] LJ { get; } = ["LJ"];
}
}
23 changes: 17 additions & 6 deletions CommunityBugFixCollection/Locale/en.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
{
"localeCode": "en",
"authors": [ "Banane9", "__Choco__", "Nytra" ],
"authors": [
"Banane9",
"__Choco__",
"Nytra",
"LJ"
],
"messages": {
"CommunityBugFixCollection.Name": "Community Bug-Fix Collection",
"CommunityBugFixCollection.Description": "This mod contains fixes for various small Resonite Issues that are still open.",
Expand Down Expand Up @@ -48,10 +53,16 @@
"CommunityBugFixCollection.ValueModDecimal.Description": "Adds a zero check to the Decimal ValueMod ProtoFlux node to prevent DIV/0 crashes",

"CommunityBugFixCollection.StorageUnits.B": "B",
"CommunityBugFixCollection.StorageUnits.kB": "KiB",
"CommunityBugFixCollection.StorageUnits.MB": "MiB",
"CommunityBugFixCollection.StorageUnits.GB": "GiB",
"CommunityBugFixCollection.StorageUnits.TB": "TiB",
"CommunityBugFixCollection.StorageUnits.PB": "PiB"
"CommunityBugFixCollection.StorageUnits.kiB": "KiB",
"CommunityBugFixCollection.StorageUnits.MiB": "MiB",
"CommunityBugFixCollection.StorageUnits.GiB": "GiB",
"CommunityBugFixCollection.StorageUnits.TiB": "TiB",
"CommunityBugFixCollection.StorageUnits.PiB": "PiB",
"CommunityBugFixCollection.StorageUnits.Bi": "B",
"CommunityBugFixCollection.StorageUnits.kB": "kB",
"CommunityBugFixCollection.StorageUnits.MB": "MB",
"CommunityBugFixCollection.StorageUnits.GB": "GB",
"CommunityBugFixCollection.StorageUnits.TB": "TB",
"CommunityBugFixCollection.StorageUnits.PB": "PB"
}
}
12 changes: 6 additions & 6 deletions CommunityBugFixCollection/Locale/fi.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
{
"localeCode": "fi",
"authors": [ "Banane9" ],
"authors": [ "LJ" ],
"messages": {
"CommunityBugFixCollection.StorageUnits.B": "t",
"CommunityBugFixCollection.StorageUnits.kB": "Kit",
"CommunityBugFixCollection.StorageUnits.MB": "Mit",
"CommunityBugFixCollection.StorageUnits.GB": "Git",
"CommunityBugFixCollection.StorageUnits.TB": "Tit",
"CommunityBugFixCollection.StorageUnits.PB": "Pit"
"CommunityBugFixCollection.StorageUnits.kB": "kt",
"CommunityBugFixCollection.StorageUnits.MB": "Mt",
"CommunityBugFixCollection.StorageUnits.GB": "Gt",
"CommunityBugFixCollection.StorageUnits.TB": "Tt",
"CommunityBugFixCollection.StorageUnits.PB": "Pt"
}
}
28 changes: 14 additions & 14 deletions CommunityBugFixCollection/LocalizedByteFormatting.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,15 @@ namespace CommunityBugFixCollection
{
[HarmonyPatch]
[HarmonyPatchCategory(nameof(LocalizedByteFormatting))]
internal sealed class LocalizedByteFormatting : ResoniteAsyncEventHandlerMonkey<LocalizedByteFormatting, LocaleLoadingEvent>
internal sealed class LocalizedByteFormatting : ConfiguredResoniteAsyncEventHandlerMonkey<LocalizedByteFormatting, BugFixCollectionTweaksConfig, LocaleLoadingEvent>
{
public override IEnumerable<string> Authors => Contributors.Banane9;
public override IEnumerable<string> Authors => [..Contributors.Banane9, ..Contributors.LJ];

public override bool CanBeDisabled => true;

public override int Priority => HarmonyLib.Priority.Last;


[HarmonyPrefix]
[HarmonyPatch(typeof(UnitFormatting), nameof(UnitFormatting.FormatBytes))]
private static bool UnitFormatBytesPrefix(double bytes, int decimalPlaces, ref string __result)
Expand All @@ -32,20 +33,19 @@ private static bool UnitFormatBytesPrefix(double bytes, int decimalPlaces, ref s
return true;

var format = $"F{decimalPlaces}";
var absoluteBytes = MathX.Abs(bytes);
var culture = Settings.GetActiveSetting<LocaleSettings>()?.ActiveCulture ?? CultureInfo.CurrentCulture;

foreach (var suffix in UnitFormatting.suffixes)
{
if (absoluteBytes < 1024.0 || suffix == UnitFormatting.suffixes[^1])
{
__result = $"{bytes.ToString(format, culture)} {Mod.GetMessageInCurrent($"StorageUnits.{suffix}")}";
return false;
}

bytes /= 1024;
absoluteBytes /= 1024;
}
var baseNum = ConfigSection.IecFormatBytes ? 2 : 10;
var divNum = ConfigSection.IecFormatBytes ? 10 : 3;
// Either `2^(10*n)` or `10^(3*n)`, but also limited to max unit index.
var index = MathX.Min(MathX.FloorToUInt(MathX.Log(MathX.Abs(bytes), baseNum) / divNum), (uint)(UnitFormatting.suffixes.Length -1));
var suffix = UnitFormatting.suffixes[index];
if (ConfigSection.IecFormatBytes)
suffix = suffix.Insert(suffix.Length - 1, "i");
// AKA scaled bytes in IEC/decimal format
var numToFormat = bytes / MathX.Pow(baseNum, divNum*index);
__result = $"{numToFormat.ToString(format, culture)} {Mod.GetMessageInCurrent($"StorageUnits.{suffix}")}";

return false;
}
Expand Down
29 changes: 29 additions & 0 deletions CommunityBugFixCollection/TweaksConfig.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using MonkeyLoader.Configuration;
using MonkeyLoader.Resonite.Configuration;
using MonkeyLoader.Resonite.UI.Inspectors;
using System;
using System.Collections.Generic;
using System.Text;

namespace CommunityBugFixCollection
{
internal sealed class BugFixCollectionTweaksConfig : ConfigSection
{
private static readonly DefiningConfigKey<bool> _iecFormatBytes = new("IEC format bytes", "Whether to format bytes in IEC or decimal format when <i>LocalizedByteFormatting</i> is enabled.", () => true);

/// <summary>
/// Gets the session share for whether Resonite Wiki buttons on component categories in Component Selectors should be visible.
/// </summary>
public bool IecFormatBytes => _iecFormatBytes.GetValue();

/// <inheritdoc/>
public override string Description => "Contains tweaks for bugfix.";


/// <inheritdoc/>
public override string Id => "Tweaks";

/// <inheritdoc/>
public override Version Version { get; } = new(1, 0, 0);
}
}