Add video preview, source crop, find-videos, and render toasts

Bring the Video tab closer to Shorts with 4K preview stills and crop
modes (none, auto, center, plus the visual editor). Settings store a
default source folder so Find videos can collect output.avi sequences.
Cap the FFmpeg log with auto-scroll, hide repeat spam, and show a
Windows notification when a video or short finishes or fails.
This commit is contained in:
2026-08-16 09:20:56 +02:00
parent e635b708a2
commit a590904e89
20 changed files with 1259 additions and 103 deletions
+49
View File
@@ -81,6 +81,55 @@ public class AppSettingsTests
Assert.AreEqual("3", normalized.FadeSeconds);
Assert.AreEqual("4", normalized.EndCardHoldSeconds);
Assert.AreEqual("10", normalized.ThumbnailInterval);
Assert.AreEqual("", normalized.SourceSearchFolder);
Assert.AreEqual("Auto", normalized.VideoSourceCropMode);
Assert.AreEqual("0", normalized.VideoCropLeft);
}
[TestMethod]
public void Normalize_WithBlankVideoSourceSettings_RestoresDefaults()
{
// Arrange
AppSettings settings = AppSettings.Default(@"C:\Videos") with
{
SourceSearchFolder = null!,
VideoSourceCropMode = "",
VideoCropLeft = " ",
VideoCropRight = "",
VideoCropTop = "",
VideoCropBottom = "",
};
// Act
AppSettings normalized = settings.Normalize(@"C:\Videos");
// Assert
Assert.AreEqual("", normalized.SourceSearchFolder);
Assert.AreEqual("Auto", normalized.VideoSourceCropMode);
Assert.AreEqual("0", normalized.VideoCropLeft);
Assert.AreEqual("0", normalized.VideoCropRight);
Assert.AreEqual("0", normalized.VideoCropTop);
Assert.AreEqual("0", normalized.VideoCropBottom);
}
[TestMethod]
public void Normalize_WithSourceSearchFolder_KeepsItUnchanged()
{
// Arrange
AppSettings settings = AppSettings.Default(@"C:\Videos") with
{
SourceSearchFolder = @"D:\AmigaIntrosVideos",
VideoSourceCropMode = "Center",
VideoCropLeft = "12",
};
// Act
AppSettings normalized = settings.Normalize(@"C:\Videos");
// Assert
Assert.AreEqual(@"D:\AmigaIntrosVideos", normalized.SourceSearchFolder);
Assert.AreEqual("Center", normalized.VideoSourceCropMode);
Assert.AreEqual("12", normalized.VideoCropLeft);
}
[TestMethod]