From 81673dc9144e6eb2e86a873d59ef8925f75e53d7 Mon Sep 17 00:00:00 2001 From: affederaffe <68356204+affederaffe@users.noreply.github.com> Date: Wed, 14 Dec 2022 09:40:18 +0100 Subject: [PATCH] Properly parse exotic versions --- BeatSaberModManager/BeatSaberModManager.csproj | 2 +- .../BeatSaber/BeatSaberGameVersionProvider.cs | 17 +++++++++++------ BeatSaberModManager/Utils/IOUtils.cs | 2 -- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/BeatSaberModManager/BeatSaberModManager.csproj b/BeatSaberModManager/BeatSaberModManager.csproj index 64b8c0c..db35a70 100644 --- a/BeatSaberModManager/BeatSaberModManager.csproj +++ b/BeatSaberModManager/BeatSaberModManager.csproj @@ -3,7 +3,7 @@ net7.0 preview - 0.0.3 + 0.0.4 true false true diff --git a/BeatSaberModManager/Services/Implementations/BeatSaber/BeatSaberGameVersionProvider.cs b/BeatSaberModManager/Services/Implementations/BeatSaber/BeatSaberGameVersionProvider.cs index 45988a4..4ef7996 100644 --- a/BeatSaberModManager/Services/Implementations/BeatSaber/BeatSaberGameVersionProvider.cs +++ b/BeatSaberModManager/Services/Implementations/BeatSaber/BeatSaberGameVersionProvider.cs @@ -1,5 +1,6 @@ using System.IO; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; using BeatSaberModManager.Services.Interfaces; @@ -9,7 +10,7 @@ namespace BeatSaberModManager.Services.Implementations.BeatSaber { /// - public class BeatSaberGameVersionProvider : IGameVersionProvider + public partial class BeatSaberGameVersionProvider : IGameVersionProvider { /// public async Task DetectGameVersionAsync(string installDir) @@ -22,14 +23,15 @@ public class BeatSaberGameVersionProvider : IGameVersionProvider SearchForKey(reader, key); if (fileStream.Position == fileStream.Length) return null; // we went through the entire stream without finding the key - ReadWhileDigit(reader); + SearchForDigit(reader); const int rewind = -sizeof(int) - sizeof(byte); fileStream.Seek(rewind, SeekOrigin.Current); // rewind to the string length - int len = reader.ReadInt32(); - byte[] bytes = reader.ReadBytes(len); - return Encoding.UTF8.GetString(bytes); + string str = reader.ReadString(); + Regex regex = VersionRegex(); + Match match = regex.Match(str); + return !match.Success ? null : match.Value; } private static void SearchForKey(BinaryReader reader, string key) @@ -42,7 +44,7 @@ private static void SearchForKey(BinaryReader reader, string key) } } - private static void ReadWhileDigit(BinaryReader reader) + private static void SearchForDigit(BinaryReader reader) { while (reader.BaseStream.Position < reader.BaseStream.Length) { @@ -50,5 +52,8 @@ private static void ReadWhileDigit(BinaryReader reader) if (char.IsDigit(current)) break; } } + + [GeneratedRegex("[\\d]+.[\\d]+.[\\d]+")] + private static partial Regex VersionRegex(); } } diff --git a/BeatSaberModManager/Utils/IOUtils.cs b/BeatSaberModManager/Utils/IOUtils.cs index 7fe1bcf..323f1f1 100644 --- a/BeatSaberModManager/Utils/IOUtils.cs +++ b/BeatSaberModManager/Utils/IOUtils.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; using System.IO; using System.IO.Compression; using System.Threading.Tasks;