From 5ac7798e45c91d2f59f8ea73a32e923b11fe272b Mon Sep 17 00:00:00 2001 From: reven Date: Mon, 31 Jan 2022 21:17:56 +1300 Subject: [PATCH] improved track parser --- MusicNodes/MusicInfoHelper.cs | 3 +- MusicNodes/Tests/MusicInfoTests.cs | 51 ++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 MusicNodes/Tests/MusicInfoTests.cs diff --git a/MusicNodes/MusicInfoHelper.cs b/MusicNodes/MusicInfoHelper.cs index df9f7214..7c59672a 100644 --- a/MusicNodes/MusicInfoHelper.cs +++ b/MusicNodes/MusicInfoHelper.cs @@ -87,7 +87,8 @@ namespace FileFlows.MusicNodes mi.Language = line.Substring(colonIndex + 1).Trim(); else if (line.Trim().ToLower().StartsWith("track")) { - if (int.TryParse(line.Substring(colonIndex + 1).Trim(), out int value)) + var trackMatch = Regex.Match(line.Substring(colonIndex + 1).Trim(), @"^[\d]+"); + if (trackMatch.Success && int.TryParse(trackMatch.Value, out int value)) mi.Track = value; } else if (line.Trim().ToLower().StartsWith("artist") || line.Trim().ToLower().StartsWith("album_artist")) diff --git a/MusicNodes/Tests/MusicInfoTests.cs b/MusicNodes/Tests/MusicInfoTests.cs new file mode 100644 index 00000000..4e339c2f --- /dev/null +++ b/MusicNodes/Tests/MusicInfoTests.cs @@ -0,0 +1,51 @@ +#if(DEBUG) + + +namespace FileFlows.MusicNodes.Tests +{ + using FileFlows.MusicNodes; + using Microsoft.VisualStudio.TestTools.UnitTesting; + using System; + using System.Collections.Generic; + using System.Linq; + using System.Text; + using System.Threading.Tasks; + + [TestClass] + public class MusicInfoTests + { + [TestMethod] + public void MusicInfo_SplitTrack() + { + + const string file = @"\\oracle\music\The Cranberries\No Need To Argue\The Cranberries - No Need To Argue - 00 - I Don't Need (Demo).mp3"; + const string ffmpegExe = @"C:\utils\ffmpeg\ffmpeg.exe"; + + var args = new FileFlows.Plugin.NodeParameters(file, new TestLogger(), false, string.Empty); + args.GetToolPathActual = (string tool) => ffmpegExe; + args.TempPath = @"D:\music\temp"; + + var musicInfo = new MusicInfoHelper(ffmpegExe, args.Logger).Read(args.WorkingFile); + + Assert.AreEqual(9, musicInfo.Track); + } + + [TestMethod] + public void MusicInfo_NormalTrack() + { + + const string file = @"\\oracle\music\Taylor Swift\Speak Now\Taylor Swift - Speak Now - 08 - Never Grow Up.mp3"; + const string ffmpegExe = @"C:\utils\ffmpeg\ffmpeg.exe"; + + var args = new FileFlows.Plugin.NodeParameters(file, new TestLogger(), false, string.Empty); + args.GetToolPathActual = (string tool) => ffmpegExe; + args.TempPath = @"D:\music\temp"; + + var musicInfo = new MusicInfoHelper(ffmpegExe, args.Logger).Read(args.WorkingFile); + + Assert.AreEqual(8, musicInfo.Track); + } + } +} + +#endif \ No newline at end of file