From da9e021339bb544e26d9061931ecfcb733e7cf98 Mon Sep 17 00:00:00 2001 From: LJ <5854483+l-2-j@users.noreply.github.com> Date: Wed, 21 May 2025 19:59:28 +0000 Subject: [PATCH 1/5] Update Finnish storage unit translations At `t` (tavua) is least better than whatever `it` was supposed to stand for --- CommunityBugFixCollection/Locale/fi.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/CommunityBugFixCollection/Locale/fi.json b/CommunityBugFixCollection/Locale/fi.json index 4247be9..9a178f9 100644 --- a/CommunityBugFixCollection/Locale/fi.json +++ b/CommunityBugFixCollection/Locale/fi.json @@ -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" } -} \ No newline at end of file +} From 27072c5d733a874fde5921fba0f560c07f58cca8 Mon Sep 17 00:00:00 2001 From: LJ <5854483+l-2-j@users.noreply.github.com> Date: Wed, 21 May 2025 20:10:09 +0000 Subject: [PATCH 2/5] Use IEC byte names for finnish storage units --- CommunityBugFixCollection/Locale/fi.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CommunityBugFixCollection/Locale/fi.json b/CommunityBugFixCollection/Locale/fi.json index 9a178f9..23c2004 100644 --- a/CommunityBugFixCollection/Locale/fi.json +++ b/CommunityBugFixCollection/Locale/fi.json @@ -3,10 +3,10 @@ "authors": [ "LJ" ], "messages": { "CommunityBugFixCollection.StorageUnits.B": "t", - "CommunityBugFixCollection.StorageUnits.kB": "Kt", - "CommunityBugFixCollection.StorageUnits.MB": "Mt", - "CommunityBugFixCollection.StorageUnits.GB": "Gt", - "CommunityBugFixCollection.StorageUnits.TB": "Tt", - "CommunityBugFixCollection.StorageUnits.PB": "Pt" + "CommunityBugFixCollection.StorageUnits.kB": "KiB", + "CommunityBugFixCollection.StorageUnits.MB": "MiB", + "CommunityBugFixCollection.StorageUnits.GB": "GiB", + "CommunityBugFixCollection.StorageUnits.TB": "TiB", + "CommunityBugFixCollection.StorageUnits.PB": "PiB" } } From 5d98522f59f818079d19c5257b9459c5b4df7ea0 Mon Sep 17 00:00:00 2001 From: ljoonal <5854483+ljoonal@users.noreply.github.com> Date: Thu, 22 May 2025 01:21:23 +0300 Subject: [PATCH 3/5] Remove loop from byte suffix retrieval --- .../LocalizedByteFormatting.cs | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/CommunityBugFixCollection/LocalizedByteFormatting.cs b/CommunityBugFixCollection/LocalizedByteFormatting.cs index b1ca12a..9d3f295 100644 --- a/CommunityBugFixCollection/LocalizedByteFormatting.cs +++ b/CommunityBugFixCollection/LocalizedByteFormatting.cs @@ -32,21 +32,14 @@ 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()?.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; - } - + // Basically just `2^(10*n)`, but also limited to max unit index. + uint index = MathX.Min(MathX.FloorToUInt(MathX.Log(MathX.Abs(bytes), 2) / 10), (uint)(UnitFormatting.suffixes.Length -1)); + string suffix = UnitFormatting.suffixes[index]; + // AKA scaled bytes in IEC format + var numToFormat = bytes / MathX.Pow(1024, index); + __result = $"{numToFormat.ToString(format, culture)} {Mod.GetMessageInCurrent($"StorageUnits.{suffix}")}"; return false; } @@ -137,4 +130,4 @@ protected override Task Handle(LocaleLoadingEvent eventData) } } -#pragma warning restore MHA008 // Assignment to non-ref patch method argument \ No newline at end of file +#pragma warning restore MHA008 // Assignment to non-ref patch method argument From 5aeec0fb9cb1dfb3fa6d080dd8baf410c6b66fd6 Mon Sep 17 00:00:00 2001 From: ljoonal <5854483+ljoonal@users.noreply.github.com> Date: Thu, 22 May 2025 02:54:01 +0300 Subject: [PATCH 4/5] IEC/Decimal bytes format option --- CommunityBugFixCollection/Contributors.cs | 2 ++ CommunityBugFixCollection/Locale/en.json | 23 +++++++++++---- CommunityBugFixCollection/Locale/fi.json | 12 ++++---- .../LocalizedByteFormatting.cs | 23 ++++++++++----- CommunityBugFixCollection/TweaksConfig.cs | 29 +++++++++++++++++++ 5 files changed, 69 insertions(+), 20 deletions(-) create mode 100644 CommunityBugFixCollection/TweaksConfig.cs diff --git a/CommunityBugFixCollection/Contributors.cs b/CommunityBugFixCollection/Contributors.cs index d6171b6..251abee 100644 --- a/CommunityBugFixCollection/Contributors.cs +++ b/CommunityBugFixCollection/Contributors.cs @@ -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"]; } } \ No newline at end of file diff --git a/CommunityBugFixCollection/Locale/en.json b/CommunityBugFixCollection/Locale/en.json index ffbb192..6eebe5a 100644 --- a/CommunityBugFixCollection/Locale/en.json +++ b/CommunityBugFixCollection/Locale/en.json @@ -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.", @@ -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" } } \ No newline at end of file diff --git a/CommunityBugFixCollection/Locale/fi.json b/CommunityBugFixCollection/Locale/fi.json index 23c2004..9fe2eeb 100644 --- a/CommunityBugFixCollection/Locale/fi.json +++ b/CommunityBugFixCollection/Locale/fi.json @@ -3,10 +3,10 @@ "authors": [ "LJ" ], "messages": { "CommunityBugFixCollection.StorageUnits.B": "t", - "CommunityBugFixCollection.StorageUnits.kB": "KiB", - "CommunityBugFixCollection.StorageUnits.MB": "MiB", - "CommunityBugFixCollection.StorageUnits.GB": "GiB", - "CommunityBugFixCollection.StorageUnits.TB": "TiB", - "CommunityBugFixCollection.StorageUnits.PB": "PiB" + "CommunityBugFixCollection.StorageUnits.kB": "kt", + "CommunityBugFixCollection.StorageUnits.MB": "Mt", + "CommunityBugFixCollection.StorageUnits.GB": "Gt", + "CommunityBugFixCollection.StorageUnits.TB": "Tt", + "CommunityBugFixCollection.StorageUnits.PB": "Pt" } -} +} \ No newline at end of file diff --git a/CommunityBugFixCollection/LocalizedByteFormatting.cs b/CommunityBugFixCollection/LocalizedByteFormatting.cs index 9d3f295..52b6393 100644 --- a/CommunityBugFixCollection/LocalizedByteFormatting.cs +++ b/CommunityBugFixCollection/LocalizedByteFormatting.cs @@ -16,14 +16,15 @@ namespace CommunityBugFixCollection { [HarmonyPatch] [HarmonyPatchCategory(nameof(LocalizedByteFormatting))] - internal sealed class LocalizedByteFormatting : ResoniteAsyncEventHandlerMonkey + internal sealed class LocalizedByteFormatting : ConfiguredResoniteAsyncEventHandlerMonkey { - public override IEnumerable Authors => Contributors.Banane9; + public override IEnumerable 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) @@ -34,12 +35,18 @@ private static bool UnitFormatBytesPrefix(double bytes, int decimalPlaces, ref s var format = $"F{decimalPlaces}"; var culture = Settings.GetActiveSetting()?.ActiveCulture ?? CultureInfo.CurrentCulture; - // Basically just `2^(10*n)`, but also limited to max unit index. - uint index = MathX.Min(MathX.FloorToUInt(MathX.Log(MathX.Abs(bytes), 2) / 10), (uint)(UnitFormatting.suffixes.Length -1)); - string suffix = UnitFormatting.suffixes[index]; - // AKA scaled bytes in IEC format - var numToFormat = bytes / MathX.Pow(1024, index); + 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; } @@ -130,4 +137,4 @@ protected override Task Handle(LocaleLoadingEvent eventData) } } -#pragma warning restore MHA008 // Assignment to non-ref patch method argument +#pragma warning restore MHA008 // Assignment to non-ref patch method argument \ No newline at end of file diff --git a/CommunityBugFixCollection/TweaksConfig.cs b/CommunityBugFixCollection/TweaksConfig.cs new file mode 100644 index 0000000..a6daf6e --- /dev/null +++ b/CommunityBugFixCollection/TweaksConfig.cs @@ -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 _iecFormatBytes = new("IEC format bytes", "Whether to format bytes in IEC or decimal format when LocalizedByteFormatting is enabled.", () => true); + + /// + /// Gets the session share for whether Resonite Wiki buttons on component categories in Component Selectors should be visible. + /// + public bool IecFormatBytes => _iecFormatBytes.GetValue(); + + /// + public override string Description => "Contains tweaks for bugfix."; + + + /// + public override string Id => "Tweaks"; + + /// + public override Version Version { get; } = new(1, 0, 0); + } +} \ No newline at end of file From 2c43f3afb4872e9af3866c2133ef3b6c8874e796 Mon Sep 17 00:00:00 2001 From: Arne Kiesewetter Date: Thu, 22 May 2025 23:55:49 +0200 Subject: [PATCH 5/5] Adjust config names, add locales, make format refresh when IEC is changed --- CommunityBugFixCollection/BugFixOptions.cs | 26 ++++++ .../CommunityBugFixCollection.csproj | 2 +- CommunityBugFixCollection/Contributors.cs | 14 ++-- CommunityBugFixCollection/Locale/de.json | 9 ++- CommunityBugFixCollection/Locale/en.json | 12 ++- CommunityBugFixCollection/Locale/fr.json | 10 +-- .../LocalizedByteFormatting.cs | 79 +++++++++++-------- CommunityBugFixCollection/TweaksConfig.cs | 29 ------- 8 files changed, 102 insertions(+), 79 deletions(-) create mode 100644 CommunityBugFixCollection/BugFixOptions.cs delete mode 100644 CommunityBugFixCollection/TweaksConfig.cs diff --git a/CommunityBugFixCollection/BugFixOptions.cs b/CommunityBugFixCollection/BugFixOptions.cs new file mode 100644 index 0000000..e2baedb --- /dev/null +++ b/CommunityBugFixCollection/BugFixOptions.cs @@ -0,0 +1,26 @@ +using MonkeyLoader.Configuration; +using System; +using System.Collections.Generic; +using System.Text; + +namespace CommunityBugFixCollection +{ + internal sealed class BugFixOptions : ConfigSection + { + private static readonly DefiningConfigKey _useIecByteFormat = new("UseIecByteFormat", "Whether to format bytes using IEC as opposed to decimal format when LocalizedByteFormatting is enabled.", () => true); + + /// + public override string Description => "Contains the settings for the few fixes that offer them."; + + /// + public override string Id => "Options"; + + /// + /// Gets whether should format bytes using IEC or decimal format. + /// + public bool UseIecByteFormat => _useIecByteFormat.GetValue(); + + /// + public override Version Version { get; } = new(1, 0, 0); + } +} \ No newline at end of file diff --git a/CommunityBugFixCollection/CommunityBugFixCollection.csproj b/CommunityBugFixCollection/CommunityBugFixCollection.csproj index 5f08d96..a82c5cf 100644 --- a/CommunityBugFixCollection/CommunityBugFixCollection.csproj +++ b/CommunityBugFixCollection/CommunityBugFixCollection.csproj @@ -10,7 +10,7 @@ True CommunityBugFixCollection Community Bug-Fix Collection - Banane9; Nytra; art0007i; LeCloutPanda; goat; __Choco__ + Banane9; Nytra; art0007i; LeCloutPanda; goat; __Choco__; LJ 0.5.0-beta This MonkeyLoader mod for Resonite that fixes various small Resonite-issues that are still open. README.md diff --git a/CommunityBugFixCollection/Contributors.cs b/CommunityBugFixCollection/Contributors.cs index 251abee..c2b76f9 100644 --- a/CommunityBugFixCollection/Contributors.cs +++ b/CommunityBugFixCollection/Contributors.cs @@ -1,12 +1,12 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Text; +using System.Diagnostics.CodeAnalysis; namespace CommunityBugFixCollection { + [SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Usernames")] internal static class Contributors { + public static string[] __Choco__ { get; } = ["__Choco__"]; + public static string[] Art0007i { get; } = ["art0007i"]; public static string[] Banane9 { get; } = ["Banane9"]; @@ -15,10 +15,8 @@ internal static class Contributors public static string[] LeCloutPanda { get; } = ["LeCloutPanda"]; - public static string[] Nytra { get; } = ["Nytra"]; - - public static string[] __Choco__ { get; } = ["__Choco__"]; - public static string[] LJ { get; } = ["LJ"]; + + public static string[] Nytra { get; } = ["Nytra"]; } } \ No newline at end of file diff --git a/CommunityBugFixCollection/Locale/de.json b/CommunityBugFixCollection/Locale/de.json index 45df38a..1496dad 100644 --- a/CommunityBugFixCollection/Locale/de.json +++ b/CommunityBugFixCollection/Locale/de.json @@ -30,7 +30,7 @@ "CommunityBugFixCollection.ImportMultipleAudioFiles.Description": "Macht es möglich mehrere Audiodateien auf einmal zu importieren.", "CommunityBugFixCollection.ImportWebFilesAsUrls.Description": "Sorgt dafür, dass URLs zu Textdateien oder Resonite Packages nicht importiert werden, statt als Hyperlink aufzutauchen.", "CommunityBugFixCollection.IndependentlyScaleDirectCursor.Description": "Verhindert, dass der direkte Cursor sehr groß wird, wenn er an einem deutlich nährem Objekt hängt als der echte Cursor.", - "CommunityBugFixCollection.LocalizedByteFormatting.Description": "Lokalisiert die Speichereinheiten (MiB, GiB, etc.), inbsesondere bei der StorageUsageStatus Komponente.", + "CommunityBugFixCollection.LocalizedByteFormatting.Description": "Lokalisiert die Speichereinheiten (MiB, GiB, etc.), inbsesondere bei der StorageUsageStatus Komponente. Es gibt eine Einstellung dafür, die Bytes nach IEC (Faktor 1024) statt dezimal (Faktor 1000) zu formatieren.", "CommunityBugFixCollection.LongerWorldLoadingFailIndication.Description": "Lässt den Welt-Ladefortschritts-Indikator frühestens nach 20s verschwinden, falls der Vorgang fehlgeschlagen ist.", "CommunityBugFixCollection.NaNtEqual.Description": "Sorgt dafür, dass NaN float / double Werte sich bei den == und != ProtoFlux Nodes sowie bei der ValueEqualityDriver Komponente niemals gleichen.", "CommunityBugFixCollection.NoLossOfColorProfile.Description": "Verhindert, dass Farbprofile nicht bei allen Berechnungen erhalten bleiben.", @@ -44,6 +44,11 @@ "CommunityBugFixCollection.TiltedUIAlignment.Description": "Kippt die UI-fokussierte Kamera, um UIX-Renderprobleme zum umgehen.", "CommunityBugFixCollection.StationaryGrabWorldActivation.Description": "Verhindert, dass die Welt-Greifen Fortbewegung den Spieler bei jeder Aktivierung bewegt.", "CommunityBugFixCollection.ValidQuaternionInputs.Description": "Lässt das ProtoFlux-Tool valide float und double Quaternions spawnen.", - "CommunityBugFixCollection.UserInspectorAsNonHost.Description": "Sorgt dafür, dass Benutzer-Inspektoren bereits präsente Benutzer auch in Sessions anzeigen, in denen man nicht der Host ist." + "CommunityBugFixCollection.UserInspectorAsNonHost.Description": "Sorgt dafür, dass Benutzer-Inspektoren bereits präsente Benutzer auch in Sessions anzeigen, in denen man nicht der Host ist.", + + "CommunityBugFixCollection.Config.Options.Name": "Optionen", + "CommunityBugFixCollection.Config.Options.Description": "Enthällt die Einstellungen für die wenigen Fixes die diese anbieten.", + "CommunityBugFixCollection.Config.Options.UseIecByteFormat.Name": "IEC Byte-Format Benutzen", + "CommunityBugFixCollection.Config.Options.UseIecByteFormat.Description": "Ob Bytes nach IEC (Faktor 1024) statt dezimal (Faktor 1000) formatiert werden sollen, wenn LocalizedByteFormatting aktiviert ist." } } \ No newline at end of file diff --git a/CommunityBugFixCollection/Locale/en.json b/CommunityBugFixCollection/Locale/en.json index 6eebe5a..fe1fbda 100644 --- a/CommunityBugFixCollection/Locale/en.json +++ b/CommunityBugFixCollection/Locale/en.json @@ -35,7 +35,7 @@ "CommunityBugFixCollection.ImportMultipleAudioFiles.Description": "Fixes it not being possible to import multiple audio clips at once.", "CommunityBugFixCollection.ImportWebFilesAsUrls.Description": "Fixes URLs to text files or Resonite Packages failing to import instead of appearing as a hyperlink.", "CommunityBugFixCollection.IndependentlyScaleDirectCursor.Description": "Fixes direct cursor size becoming very large when snapped to an object much closer than the true cursor.", - "CommunityBugFixCollection.LocalizedByteFormatting.Description": "Localizes the storage units (MiB, GiB, etc.), in particular for the StorageUsageStatus component.", + "CommunityBugFixCollection.LocalizedByteFormatting.Description": "Localizes the storage units (MiB, GiB, etc.), in particular for the StorageUsageStatus component. There's an option to use IEC format (factor 1024) over decimal (factor 1000).", "CommunityBugFixCollection.LongerWorldLoadingFailIndication.Description": "Only lets the World Load Progress Indicator disappear after 20s or more if the process failed.", "CommunityBugFixCollection.NaNtEqual.Description": "Makes NaN floats / doubles never equal to each other for the ProtoFlux == and != nodes, as well as the ValueEqualityDriver component.", "CommunityBugFixCollection.NoLossOfColorProfile.Description": "Fixes Color Profile not being preserved on all operations.", @@ -52,13 +52,19 @@ "CommunityBugFixCollection.ValidQuaternionInputs.Description": "Makes the ProtoFlux Tool spawn valid float and double quaternion inputs.", "CommunityBugFixCollection.ValueModDecimal.Description": "Adds a zero check to the Decimal ValueMod ProtoFlux node to prevent DIV/0 crashes", - "CommunityBugFixCollection.StorageUnits.B": "B", + "CommunityBugFixCollection.Config.Options.Name": "Options", + "CommunityBugFixCollection.Config.Options.Description": "Contains the settings for the few fixes that offer them.", + "CommunityBugFixCollection.Config.Options.UseIecByteFormat.Name": "Use IEC Byte Format", + "CommunityBugFixCollection.Config.Options.UseIecByteFormat.Description": "Whether to format bytes using IEC (factor 1024) as opposed to decimal format (factor 1000) when LocalizedByteFormatting is enabled.", + + "CommunityBugFixCollection.StorageUnits.Bi": "B", "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.B": "B", "CommunityBugFixCollection.StorageUnits.kB": "kB", "CommunityBugFixCollection.StorageUnits.MB": "MB", "CommunityBugFixCollection.StorageUnits.GB": "GB", diff --git a/CommunityBugFixCollection/Locale/fr.json b/CommunityBugFixCollection/Locale/fr.json index fa2363d..6de9853 100644 --- a/CommunityBugFixCollection/Locale/fr.json +++ b/CommunityBugFixCollection/Locale/fr.json @@ -3,10 +3,10 @@ "authors": [ "Banane9" ], "messages": { "CommunityBugFixCollection.StorageUnits.B": "o", - "CommunityBugFixCollection.StorageUnits.kB": "Kio", - "CommunityBugFixCollection.StorageUnits.MB": "Mio", - "CommunityBugFixCollection.StorageUnits.GB": "Gio", - "CommunityBugFixCollection.StorageUnits.TB": "Tio", - "CommunityBugFixCollection.StorageUnits.PB": "Pio" + "CommunityBugFixCollection.StorageUnits.kB": "Ko", + "CommunityBugFixCollection.StorageUnits.MB": "Mo", + "CommunityBugFixCollection.StorageUnits.GB": "Go", + "CommunityBugFixCollection.StorageUnits.TB": "To", + "CommunityBugFixCollection.StorageUnits.PB": "Po" } } \ No newline at end of file diff --git a/CommunityBugFixCollection/LocalizedByteFormatting.cs b/CommunityBugFixCollection/LocalizedByteFormatting.cs index 52b6393..55d5fea 100644 --- a/CommunityBugFixCollection/LocalizedByteFormatting.cs +++ b/CommunityBugFixCollection/LocalizedByteFormatting.cs @@ -1,6 +1,7 @@ using Elements.Core; using FrooxEngine; using HarmonyLib; +using MonkeyLoader.Configuration; using MonkeyLoader.Resonite; using MonkeyLoader.Resonite.Locale; using System; @@ -10,47 +11,41 @@ using System.Text; using System.Threading.Tasks; -#pragma warning disable MHA008 // Assignment to non-ref patch method argument - namespace CommunityBugFixCollection { [HarmonyPatch] [HarmonyPatchCategory(nameof(LocalizedByteFormatting))] - internal sealed class LocalizedByteFormatting : ConfiguredResoniteAsyncEventHandlerMonkey + internal sealed class LocalizedByteFormatting : ConfiguredResoniteAsyncEventHandlerMonkey { - public override IEnumerable Authors => [..Contributors.Banane9, ..Contributors.LJ]; + private static readonly ConditionalWeakTable _lastCultureByStorageStatus = new(); + + public override IEnumerable Authors { get; } = [.. 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) + protected override Task Handle(LocaleLoadingEvent eventData) { - if (!Enabled) - return true; + Engine.Current.GlobalCoroutineManager.RunInSeconds(2, _lastCultureByStorageStatus.Clear); - var format = $"F{decimalPlaces}"; - var culture = Settings.GetActiveSetting()?.ActiveCulture ?? CultureInfo.CurrentCulture; + return Task.CompletedTask; + } - 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}")}"; + protected override bool OnEngineReady() + { + ConfigSection.ItemChanged += ConfigSectionItemChanged; - return false; + return base.OnEngineReady(); } - private static readonly ConditionalWeakTable _lastCultureByStorageStatus = new(); + protected override bool OnShutdown(bool applicationExiting) + { + if (!applicationExiting) + ConfigSection.ItemChanged -= ConfigSectionItemChanged; + + return base.OnShutdown(applicationExiting); + } [HarmonyPrefix] [HarmonyPatch(typeof(StorageUsageStatus), nameof(StorageUsageStatus.OnCommonUpdate))] @@ -128,13 +123,35 @@ private static bool StorageUsageStatusOnCommonUpdatePrefix(StorageUsageStatus __ return false; } - protected override Task Handle(LocaleLoadingEvent eventData) + [HarmonyPrefix] + [HarmonyPatch(typeof(UnitFormatting), nameof(UnitFormatting.FormatBytes))] + private static bool UnitFormatBytesPrefix(double bytes, int decimalPlaces, ref string __result) { - Engine.Current.GlobalCoroutineManager.RunInSeconds(2, _lastCultureByStorageStatus.Clear); + if (!Enabled) + return true; - return Task.CompletedTask; + var format = $"F{decimalPlaces}"; + var culture = Settings.GetActiveSetting()?.ActiveCulture ?? CultureInfo.CurrentCulture; + + // Select base and divisor for suffix determination + var baseNum = ConfigSection.UseIecByteFormat ? 2 : 10; + var divNum = ConfigSection.UseIecByteFormat ? 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.UseIecByteFormat) + 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; } - } -} -#pragma warning restore MHA008 // Assignment to non-ref patch method argument \ No newline at end of file + private void ConfigSectionItemChanged(object sender, IConfigKeyChangedEventArgs configKeyChangedEventArgs) + => Engine.Current.GlobalCoroutineManager.RunInSeconds(0, _lastCultureByStorageStatus.Clear); + } +} \ No newline at end of file diff --git a/CommunityBugFixCollection/TweaksConfig.cs b/CommunityBugFixCollection/TweaksConfig.cs deleted file mode 100644 index a6daf6e..0000000 --- a/CommunityBugFixCollection/TweaksConfig.cs +++ /dev/null @@ -1,29 +0,0 @@ -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 _iecFormatBytes = new("IEC format bytes", "Whether to format bytes in IEC or decimal format when LocalizedByteFormatting is enabled.", () => true); - - /// - /// Gets the session share for whether Resonite Wiki buttons on component categories in Component Selectors should be visible. - /// - public bool IecFormatBytes => _iecFormatBytes.GetValue(); - - /// - public override string Description => "Contains tweaks for bugfix."; - - - /// - public override string Id => "Tweaks"; - - /// - public override Version Version { get; } = new(1, 0, 0); - } -} \ No newline at end of file