Add queued FFmpeg conversion and finish splitting the window from the host.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-25 01:49:50 +02:00
parent 48d03f794f
commit 6fc7506eb7
85 changed files with 3394 additions and 512 deletions

View File

@@ -25,6 +25,7 @@ public class UiPreferencesStoreTests
Assert.True(prefs.AutoClearQueueWhenDone);
Assert.Equal(@"C:\Program Files\7-Zip\7z.exe", prefs.SevenZipPath);
Assert.Null(prefs.GitPath);
Assert.Null(prefs.FfmpegPath);
}
[Fact]
@@ -43,6 +44,13 @@ public class UiPreferencesStoreTests
Assert.Equal(@"C:\Program Files\Git\cmd\git.exe", prefs.GitPath);
}
[Fact]
public void Parse_reads_ffmpeg_path()
{
var prefs = UiPreferencesStore.Parse(["ffmpeg=C:\\Tools\\ffmpeg.exe"]);
Assert.Equal(@"C:\Tools\ffmpeg.exe", prefs.FfmpegPath);
}
[Fact]
public void Parse_reads_host_and_removable_index_flags()
{
@@ -70,6 +78,8 @@ public class UiPreferencesStoreTests
Assert.False(prefs.BackgroundHostAtLogon);
Assert.Null(prefs.SevenZipPath);
Assert.Null(prefs.GitPath);
Assert.Null(prefs.FfmpegPath);
Assert.True(prefs.SessionTabs is null || prefs.SessionTabs.Count == 0);
}
[Fact]
@@ -91,6 +101,43 @@ public class UiPreferencesStoreTests
Assert.Equal(24, prefs.WindowTop);
Assert.True(prefs.WindowMaximized);
Assert.Equal(320, prefs.TreeWidth);
Assert.True(prefs.SessionTabs is null || prefs.SessionTabs.Count == 0);
}
[Fact]
public void Parse_reads_session_tabs_and_active_index()
{
var left = @"C:\Users\Dominique\Documents";
var right = @"D:\Photos";
var prefs = UiPreferencesStore.Parse(
[
"session-active-tab=1",
"session-tab=" + UiPreferencesStore.FormatSessionTab(new SessionTabState(LocationRoots.ThisPc)),
"session-tab=" + UiPreferencesStore.FormatSessionTab(new SessionTabState(left, right, true, 0.42, true))
]);
Assert.Equal(1, prefs.SessionActiveTab);
Assert.NotNull(prefs.SessionTabs);
Assert.Equal(2, prefs.SessionTabs.Count);
Assert.Equal(LocationRoots.ThisPc, prefs.SessionTabs[0].LeftPath);
Assert.False(prefs.SessionTabs[0].IsSplit);
Assert.Equal(left, prefs.SessionTabs[1].LeftPath);
Assert.Equal(right, prefs.SessionTabs[1].RightPath);
Assert.True(prefs.SessionTabs[1].IsSplit);
Assert.Equal(0.42, prefs.SessionTabs[1].SplitRatio);
Assert.True(prefs.SessionTabs[1].ActiveIsRight);
}
[Fact]
public void Session_tab_roundtrip_escapes_semicolons_in_paths()
{
var state = new SessionTabState(@"C:\weird;name", @"\\server\share", true, 0.3, false);
var parsed = UiPreferencesStore.TryParseSessionTab(UiPreferencesStore.FormatSessionTab(state));
Assert.NotNull(parsed);
Assert.Equal(state.LeftPath, parsed.LeftPath);
Assert.Equal(state.RightPath, parsed.RightPath);
Assert.True(parsed.IsSplit);
Assert.Equal(0.3, parsed.SplitRatio);
Assert.False(parsed.ActiveIsRight);
}
[Fact]
@@ -100,7 +147,17 @@ public class UiPreferencesStoreTests
try
{
var store = new UiPreferencesStore(new PrefsEnv(dir));
store.Save(new UiPreferences("Light", true, false, true, AutoClearQueueWhenDone: true, WindowWidth: 1100, WindowHeight: 720, TreeWidth: 300));
store.Save(new UiPreferences(
"Light", true, false, true,
AutoClearQueueWhenDone: true,
WindowWidth: 1100,
WindowHeight: 720,
TreeWidth: 300,
SessionTabs:
[
new SessionTabState(@"C:\Temp", @"D:\", true, 0.6, true)
],
SessionActiveTab: 0));
var loaded = store.Load();
Assert.Equal("Light", loaded.Theme);
Assert.True(loaded.GroupNetworkPlaces);
@@ -114,6 +171,13 @@ public class UiPreferencesStoreTests
Assert.Equal(1100, loaded.WindowWidth);
Assert.Equal(720, loaded.WindowHeight);
Assert.Equal(300, loaded.TreeWidth);
Assert.NotNull(loaded.SessionTabs);
var tab = Assert.Single(loaded.SessionTabs);
Assert.Equal(@"C:\Temp", tab.LeftPath);
Assert.Equal(@"D:\", tab.RightPath);
Assert.True(tab.IsSplit);
Assert.Equal(0.6, tab.SplitRatio);
Assert.True(tab.ActiveIsRight);
}
finally
{