diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs
index 8a69d1c..9ae4910 100644
--- a/MainWindow.xaml.cs
+++ b/MainWindow.xaml.cs
@@ -2,6 +2,7 @@ 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;
@@ -77,6 +78,42 @@ 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
@@ -212,20 +249,23 @@ 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)
{
- var item = new QueuedFileItem(path);
+ string effectivePath = TryApplyFolderPrefix(path);
+ var item = new QueuedFileItem(effectivePath);
item.PropertyChanged += QueuedFileItem_PropertyChanged;
_fileQueue.Add(item);
_ = ScanFileItemAsync(item);
+ addedPaths.Add(effectivePath);
}
UpdateLoadingOverlay();
- if (newFiles.Count > 0)
+ if (addedPaths.Count > 0)
{
var first = _fileQueue.FirstOrDefault(q =>
- string.Equals(q.FilePath, newFiles[0], StringComparison.OrdinalIgnoreCase));
+ string.Equals(q.FilePath, addedPaths[0], StringComparison.OrdinalIgnoreCase));
if (first != null) FileQueueList.SelectedItem = first;
}
}