diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs index 9ae4910..8a69d1c 100644 --- a/MainWindow.xaml.cs +++ b/MainWindow.xaml.cs @@ -2,7 +2,6 @@ using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.IO; -using System.Text.RegularExpressions; using System.Threading; using System.Windows; using System.Windows.Controls; @@ -78,42 +77,6 @@ public partial class MainWindow : FluentWindow // ── Helpers ────────────────────────────────────────────────────────────── - /// - /// If the file's parent folder has a bracketed prefix (e.g. "[neoHEVC] ") - /// and the file itself doesn't, renames the file on disk to include that - /// prefix and returns the new path. Returns the original path unchanged if - /// the condition isn't met or the rename fails. - /// - private static string TryApplyFolderPrefix(string filePath) - { - string? folder = Path.GetDirectoryName(filePath); - if (string.IsNullOrEmpty(folder)) return filePath; - - string folderName = Path.GetFileName(folder); - var match = Regex.Match(folderName, @"^\[.+?\] "); - if (!match.Success) return filePath; - - string prefix = match.Value; - string fileName = Path.GetFileName(filePath); - - if (fileName.StartsWith(prefix, StringComparison.Ordinal)) return filePath; - - string newFileName = prefix + fileName; - string newFilePath = Path.Combine(folder, newFileName); - - if (File.Exists(newFilePath)) return filePath; - - try - { - File.Move(filePath, newFilePath); - return newFilePath; - } - catch - { - return filePath; - } - } - private static void RestartApplication() { try @@ -249,23 +212,20 @@ public partial class MainWindow : FluentWindow && !_fileQueue.Any(q => string.Equals(q.FilePath, p, StringComparison.OrdinalIgnoreCase))) .ToList(); - var addedPaths = new List(); foreach (var path in newFiles) { - string effectivePath = TryApplyFolderPrefix(path); - var item = new QueuedFileItem(effectivePath); + var item = new QueuedFileItem(path); item.PropertyChanged += QueuedFileItem_PropertyChanged; _fileQueue.Add(item); _ = ScanFileItemAsync(item); - addedPaths.Add(effectivePath); } UpdateLoadingOverlay(); - if (addedPaths.Count > 0) + if (newFiles.Count > 0) { var first = _fileQueue.FirstOrDefault(q => - string.Equals(q.FilePath, addedPaths[0], StringComparison.OrdinalIgnoreCase)); + string.Equals(q.FilePath, newFiles[0], StringComparison.OrdinalIgnoreCase)); if (first != null) FileQueueList.SelectedItem = first; } } diff --git a/Views/ProgressWindow.xaml.cs b/Views/ProgressWindow.xaml.cs index 58e5a08..4b4a22a 100644 --- a/Views/ProgressWindow.xaml.cs +++ b/Views/ProgressWindow.xaml.cs @@ -1,6 +1,7 @@ using System.Collections.ObjectModel; using System.ComponentModel; using System.IO; +using System.Text.RegularExpressions; using System.Windows; using Futonizer.Models; using Futonizer.Services; @@ -110,6 +111,28 @@ public partial class ProgressWindow : FluentWindow TotalBytesText.Text = $"{doneMb:F0} / {totalMb:F0} MB copied"; } + /// + /// If the source file's parent folder starts with a bracketed tag + /// (e.g. "[KAA]" or "[neoHEVC]") and the file name doesn't already + /// start with that tag, returns the file name with the tag prepended + /// (e.g. "[KAA] episode.mkv"). Otherwise returns the file name unchanged. + /// Only applied to the output file — the source is never touched. + /// + private static string PrefixedFileName(string sourceFilePath, string fileName) + { + string? folder = Path.GetDirectoryName(sourceFilePath); + if (string.IsNullOrEmpty(folder)) return fileName; + + string folderName = Path.GetFileName(folder); + var match = Regex.Match(folderName, @"^\[.+?\]"); + if (!match.Success) return fileName; + + string prefix = match.Value + " "; // e.g. "[KAA] " + if (fileName.StartsWith(match.Value, StringComparison.Ordinal)) return fileName; + + return prefix + fileName; + } + private static long SafeFileLength(string path) { try { return new FileInfo(path).Length; } @@ -159,7 +182,7 @@ public partial class ProgressWindow : FluentWindow { string outputFilePath = overwritingInPlace ? file.FilePath - : Path.Combine(_outputFolder, file.FileName); + : Path.Combine(_outputFolder, PrefixedFileName(file.FilePath, file.FileName)); var videoIds = file.Tracks .Where(t => t.Type == "video" && t.Copy)