Replace method already ported to IO

This commit is contained in:
Matt Nadareski
2026-03-22 17:30:33 -04:00
parent 1a43bd4475
commit fbda917c75
6 changed files with 8 additions and 87 deletions

View File

@@ -1,6 +1,7 @@
### WIP (xxxx-xx-xx) ### WIP (xxxx-xx-xx)
- Display the path being processed in Check since multiple are allowed - Display the path being processed in Check since multiple are allowed
- Replace method already ported to IO
### 3.7.0 (2026-03-20) ### 3.7.0 (2026-03-20)

View File

@@ -6,6 +6,7 @@ using System.Threading.Tasks;
#endif #endif
using MPF.Frontend; using MPF.Frontend;
using MPF.Frontend.Tools; using MPF.Frontend.Tools;
using SabreTools.IO;
using SabreTools.RedumpLib.Data; using SabreTools.RedumpLib.Data;
using SabreTools.RedumpLib.Web; using SabreTools.RedumpLib.Web;
using LogCompression = MPF.Processors.LogCompression; using LogCompression = MPF.Processors.LogCompression;
@@ -221,7 +222,7 @@ namespace MPF.CLI.Features
} }
if (FilePath is not null) if (FilePath is not null)
FilePath = FrontendTool.NormalizeOutputPaths(FilePath, getFullPath: true); FilePath = PathTool.NormalizeFilePath(FilePath, fullPath: true);
// Get the speed from the options // Get the speed from the options
int speed = DriveSpeed ?? FrontendTool.GetDefaultSpeedForMediaType(MediaType, Options); int speed = DriveSpeed ?? FrontendTool.GetDefaultSpeedForMediaType(MediaType, Options);

View File

@@ -1,4 +1,3 @@
using System.IO;
using MPF.Frontend.Tools; using MPF.Frontend.Tools;
using SabreTools.RedumpLib.Data; using SabreTools.RedumpLib.Data;
using Xunit; using Xunit;
@@ -61,38 +60,5 @@ namespace MPF.Frontend.Test.Tools
// TODO: Write NormalizeDiscTitle(string?, Language?) test // TODO: Write NormalizeDiscTitle(string?, Language?) test
#endregion #endregion
#region NormalizeOutputPaths
[Theory]
[InlineData(null, false, "")]
[InlineData(null, true, "")]
[InlineData("", false, "")]
[InlineData("", true, "")]
[InlineData("filename.bin", false, "filename.bin")]
[InlineData("filename.bin", true, "filename.bin")]
[InlineData("\"filename.bin\"", false, "filename.bin")]
[InlineData("\"filename.bin\"", true, "filename.bin")]
[InlineData("<filename.bin>", false, "filename.bin")]
[InlineData("<filename.bin>", true, "filename.bin")]
[InlineData("1.2.3.4..bin", false, "1.2.3.4..bin")]
[InlineData("1.2.3.4..bin", true, "1.2.3.4..bin")]
[InlineData("dir/filename.bin", false, "dir/filename.bin")]
[InlineData("dir/filename.bin", true, "dir/filename.bin")]
[InlineData(" dir / filename.bin", false, "dir/filename.bin")]
[InlineData(" dir / filename.bin", true, "dir/filename.bin")]
[InlineData("\0dir/\0filename.bin", false, "_dir/_filename.bin")]
[InlineData("\0dir/\0filename.bin", true, "_dir/_filename.bin")]
public void NormalizeOutputPathsTest(string? path, bool getFullPath, string expected)
{
// Modify expected to account for test data if necessary
if (getFullPath && !string.IsNullOrEmpty(expected))
expected = Path.GetFullPath(expected);
string actual = FrontendTool.NormalizeOutputPaths(path, getFullPath);
Assert.Equal(expected, actual);
}
#endregion
} }
} }

View File

@@ -9,6 +9,7 @@ using MPF.ExecutionContexts;
using MPF.Frontend.Tools; using MPF.Frontend.Tools;
using MPF.Processors; using MPF.Processors;
using Newtonsoft.Json; using Newtonsoft.Json;
using SabreTools.IO;
using SabreTools.RedumpLib; using SabreTools.RedumpLib;
using SabreTools.RedumpLib.Data; using SabreTools.RedumpLib.Data;
using Formatting = Newtonsoft.Json.Formatting; using Formatting = Newtonsoft.Json.Formatting;
@@ -116,7 +117,7 @@ namespace MPF.Frontend
_options = new Options(options); _options = new Options(options);
// Output paths // Output paths
OutputPath = FrontendTool.NormalizeOutputPaths(outputPath, false); OutputPath = PathTool.NormalizeFilePath(outputPath, fullPath: false);
// UI information // UI information
_drive = drive; _drive = drive;
@@ -713,7 +714,7 @@ namespace MPF.Frontend
return ResultEventArgs.Failure("Error! Current configuration is not supported!"); return ResultEventArgs.Failure("Error! Current configuration is not supported!");
// Fix the output paths, just in case // Fix the output paths, just in case
OutputPath = FrontendTool.NormalizeOutputPaths(OutputPath, false); OutputPath = PathTool.NormalizeFilePath(OutputPath, fullPath: false);
// Validate that the output path isn't on the dumping drive // Validate that the output path isn't on the dumping drive
if (_drive?.Name is not null && OutputPath.StartsWith(_drive.Name)) if (_drive?.Name is not null && OutputPath.StartsWith(_drive.Name))

View File

@@ -1,8 +1,6 @@
using System; using System;
using System.IO;
using System.Reflection; using System.Reflection;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
using SabreTools.RedumpLib.Data; using SabreTools.RedumpLib.Data;
namespace MPF.Frontend.Tools namespace MPF.Frontend.Tools
@@ -529,52 +527,6 @@ namespace MPF.Frontend.Tools
return newTitle; return newTitle;
} }
/// <summary>
/// Normalize a split set of paths
/// </summary>
/// <param name="path">Path value to normalize</param>
public static string NormalizeOutputPaths(string? path, bool getFullPath)
{
try
{
// If we have an invalid path
if (string.IsNullOrEmpty(path))
return string.Empty;
// Remove quotes and angle brackets from path
path = path!.Trim('\"');
path = path!.Trim('<');
path = path!.Trim('>');
// Remove invalid path characters
foreach (char c in Path.GetInvalidPathChars())
{
path = path.Replace(c, '_');
}
// Try getting the combined path and returning that directly
string fullPath = getFullPath ? Path.GetFullPath(path) : path;
var fullDirectory = Path.GetDirectoryName(fullPath)?.Trim();
string fullFile = Path.GetFileName(fullPath).Trim();
// Remove invalid filename characters
foreach (char c in Path.GetInvalidFileNameChars())
{
fullFile = fullFile.Replace(c, '_');
}
// Rebuild the path, if necessary
if (!string.IsNullOrEmpty(fullDirectory))
fullFile = Path.Combine(fullDirectory, fullFile);
// Remove spaces before and after separators
return Regex.Replace(fullFile, @"\s*([\\|/])\s*", @"$1");
}
catch { }
return path ?? string.Empty;
}
#endregion #endregion
#region Versioning #region Versioning

View File

@@ -1463,7 +1463,7 @@ namespace MPF.Frontend.ViewModels
} }
// For all other cases, separate the last path // For all other cases, separate the last path
string lastPath = FrontendTool.NormalizeOutputPaths(OutputPath, false); string lastPath = PathTool.NormalizeFilePath(OutputPath, fullPath: false);
string lastDirectory = Path.GetDirectoryName(lastPath) ?? string.Empty; string lastDirectory = Path.GetDirectoryName(lastPath) ?? string.Empty;
string lastFilename = Path.GetFileNameWithoutExtension(lastPath); string lastFilename = Path.GetFileNameWithoutExtension(lastPath);
@@ -1918,7 +1918,7 @@ namespace MPF.Frontend.ViewModels
// Disable change handling // Disable change handling
DisableEventHandlers(); DisableEventHandlers();
OutputPath = FrontendTool.NormalizeOutputPaths(_environment.ContextOutputPath, false); OutputPath = PathTool.NormalizeFilePath(_environment.ContextOutputPath, fullPath: false);
if (MediaTypes is not null) if (MediaTypes is not null)
{ {