TASK 4 ship step 7: one-click go live + private-only enforcement (req 8) — the Go Live dialog is locked to Private (GoLiveViewModel.Visibility is a get-only string, no dropdown; settings' dead Default Visibility dropdown + Visibilities/DefaultStreamVisibility removed); YouTubeStreamService.CreateBroadcast always sends privacyStatus='private' and gained an injectable HttpClient? http = null seam; BeginGoLive fires CreateBroadcastAsync which stashes _currentBroadcastId for TASK 5's bind/transition (failure → StreamStatus.Error via AppLog, never a crash) alongside the frame pump, and StopStream clears it; the REC sign shows a dark-red PRIVATE badge next to REC whenever the live stream is private (IsLivePrivate) — the broadcast-insert integration test asserts the request body carries privacyStatus private (RecordingHandler seam) + a no-session guard test — 173 tests passing, 0 warnings

This commit is contained in:
2026-08-14 09:20:03 -07:00
parent 0b71b030e4
commit 801219ec46
11 changed files with 167 additions and 83 deletions
+5 -9
View File
@@ -9,12 +9,16 @@ public class GoLiveViewModel : ViewModelBase
private readonly Func<Task<YouTubeChannel?>> _signInProvider;
private string _streamTitle = string.Empty;
private string _streamDescription = string.Empty;
private string _visibility = "Public";
private bool _isSignedIn;
private string _accountDisplayName = string.Empty;
private string _accountAvatarUrl = string.Empty;
private bool _isBusy;
/// <summary>Streams always start Private (ship step 7 — private-only by
/// enforcement); the creator can change visibility on YouTube after going
/// live. No dropdown — no dead-end option.</summary>
public string Visibility => "Private";
public GoLiveViewModel(Func<Task<YouTubeChannel?>> signInProvider, YouTubeChannel? account)
{
_signInProvider = signInProvider;
@@ -39,14 +43,6 @@ public class GoLiveViewModel : ViewModelBase
set => SetProperty(ref _streamDescription, value);
}
public string Visibility
{
get => _visibility;
set => SetProperty(ref _visibility, value);
}
public string[] Visibilities { get; } = { "Public", "Unlisted", "Private" };
public bool IsSignedIn
{
get => _isSignedIn;