Social bar (Branch B): global resource with per-scene presence — Models/Socials.cs (19 services, icons, canonical URLs), Services/SocialValidator.cs (HTTP lookup validation seam), LayoutStore schema v7 (Socials + SocialEntry tables + Scene.HasSocialBar), MainViewModel (socials collection, AddSocial/RemoveSocial/ToggleSceneSocialBar commands, freemium cap YT+1, premium seam), MainWindow.xaml (footer Social button + [+/-] toggle on meter line, preview bar rendering top/bottom + LCR), 4 integration tests (roundtrip, empty-not-persisted, canonical URLs, icons), 85 tests passing, 0 warnings

This commit is contained in:
2026-08-12 07:33:03 -07:00
parent e1d9e1388d
commit 5e8b8e5835
12 changed files with 715 additions and 17 deletions
+5 -5
View File
@@ -30,14 +30,14 @@ public class LayoutStorePersistenceTests
Width = 480,
Height = 270,
});
store.Save(new[] { scene }, webcam);
store.Save(new[] { scene }, webcam, null);
var reloaded = store.Load();
var config = Assert.Single(reloaded[0].Elements);
Assert.IsType<WebcamSceneConfig>(config);
reloaded[0].Elements.RemoveAt(0);
store.Save(reloaded, store.Webcam);
store.Save(reloaded, store.Webcam, null);
var afterDelete = store.Load();
Assert.Empty(afterDelete[0].Elements);
@@ -74,7 +74,7 @@ public class LayoutStorePersistenceTests
};
var scene = new Scene { Name = "Starting" };
scene.Elements.Add(backdrop);
store.Save(new[] { scene }, null);
store.Save(new[] { scene }, null, null);
var reloaded = store.Load();
var restored = Assert.IsType<Source>(Assert.Single(reloaded[0].Elements));
@@ -102,7 +102,7 @@ public class LayoutStorePersistenceTests
using var store = new LayoutStore(path);
var on = new Scene { Name = "Live", HasBackdrop = true };
var off = new Scene { Name = "Ending", HasBackdrop = false };
store.Save(new[] { on, off }, null);
store.Save(new[] { on, off }, null, null);
var reloaded = store.Load();
@@ -216,7 +216,7 @@ public class LayoutStorePersistenceTests
RectWidth = 480,
RectHeight = 270,
});
store.Save(new[] { scene }, webcam);
store.Save(new[] { scene }, webcam, null);
var reloaded = store.Load();
var config = Assert.IsType<WebcamSceneConfig>(Assert.Single(reloaded[0].Elements));