From 9dc3e579b5cd9df5e50740f27921eca3cacbbe4d Mon Sep 17 00:00:00 2001 From: fuzzball Date: Sat, 25 Feb 2023 12:15:58 +0900 Subject: [PATCH] Get the version of redumper (#446) * Get the version * Correct the name of redumper (lowercase) --- MPF.Core/Converters/EnumConverter.cs | 2 +- MPF.Modules/Redumper/Parameters.cs | 45 ++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/MPF.Core/Converters/EnumConverter.cs b/MPF.Core/Converters/EnumConverter.cs index 7e6bb5aa..e11be6bc 100644 --- a/MPF.Core/Converters/EnumConverter.cs +++ b/MPF.Core/Converters/EnumConverter.cs @@ -136,7 +136,7 @@ namespace MPF.Core.Converters case InternalProgram.DiscImageCreator: return "DiscImageCreator"; case InternalProgram.Redumper: - return "Redumper"; + return "redumper"; #endregion diff --git a/MPF.Modules/Redumper/Parameters.cs b/MPF.Modules/Redumper/Parameters.cs index 559a3d9d..18fe3aba 100644 --- a/MPF.Modules/Redumper/Parameters.cs +++ b/MPF.Modules/Redumper/Parameters.cs @@ -196,8 +196,8 @@ namespace MPF.Modules.Redumper /// public override void GenerateSubmissionInfo(SubmissionInfo info, Options options, string basePath, Drive drive, bool includeArtifacts) { - // TODO: Determine if there's a Redumper version anywhere - info.DumpingInfo.DumpingProgram = EnumConverter.LongName(this.InternalProgram); + // Get the dumping program and version + info.DumpingInfo.DumpingProgram = $"{EnumConverter.LongName(this.InternalProgram)} {GetVersion($"{basePath}.log") ?? "Unknown Version"}"; switch (this.Type) { @@ -1105,6 +1105,47 @@ namespace MPF.Modules.Redumper } } + /// + /// Get the version. if possible + /// + /// Log file location + /// Version if possible, null on error + private static string GetVersion(string log) + { + // If the file doesn't exist, we can't get info from it + if (!File.Exists(log)) + return null; + + // Samples: + // redumper v2022.10.28 [Oct 28 2022, 05:41:43] (print usage: --help,-h) + // redumper v2022.12.22 build_87 [Dec 22 2022, 01:56:26] + + using (StreamReader sr = File.OpenText(log)) + { + try + { + // Skip first line (dump date) + sr.ReadLine(); + + // Generate regex + // Permissive + var regex = new Regex(@"^redumper (v.+) \[.+\]"); + // Strict + //var regex = new Regex(@"^redumper (v\d{4}\.\d{2}\.\d{2}(| build_\d+)) \[.+\]"); + + // Extract the version string + var match = regex.Match(sr.ReadLine().Trim()); + var version = match.Groups[1].Value; + return string.IsNullOrWhiteSpace(version) ? null : version; + } + catch + { + // We don't care what the exception is right now + return null; + } + } + } + #endregion } }