fix(lifecycle): no dialogs while the app is closing
1ce6b9c made closing stop the session first, which was right and incomplete: the stop path opens TWO
modals, and WPF forbids that during a close. The creator's #2 test produced it immediately —
System.InvalidOperationException: Cannot set Visibility to Visible or call Show, ShowDialog, Close,
or WindowInteropHelper.EnsureHandle while a Window is closing.
Two prompts are suppressed by a `_shuttingDown` flag, each taking its safe default rather than a prompt
nobody can answer:
- The rename dialog: the recording is saved under its automatic name. Never discard footage the creator
did not choose to discard.
- The private-broadcast keep/delete prompt: the broadcast is KEPT (stays private on YouTube) instead of
being deleted by an answer that was never given.
The general rule this establishes: a teardown path may not ask questions. Any future prompt reached from
stop must check IsShuttingDown.
Not covered by a unit test — the trigger is a real WPF close, not reachable from the view model. Verified
against the exception in %APPDATA%\ytLlive\startup.log (09:40:27) and it needs the creator's retest.
This commit is contained in:
@@ -690,7 +690,11 @@ public partial class MainViewModel : ViewModelBase
|
||||
{
|
||||
var title = BroadcastForm.Title;
|
||||
var (outcome, error) = await ClosePrivateBroadcastAsync(_youtubeStream, broadcastId,
|
||||
() => KeepBroadcastPromptOverride?.Invoke(title) ?? new KeepBroadcastDialog(title).ShowDialog() == true);
|
||||
// Closing the app cannot open a modal (WPF forbids ShowDialog while a window closes), so the
|
||||
// safe default is KEEP: the broadcast stays on YouTube as a private video for the creator to
|
||||
// deal with, instead of being deleted by a prompt nobody could answer.
|
||||
() => _shuttingDown
|
||||
|| (KeepBroadcastPromptOverride?.Invoke(title) ?? new KeepBroadcastDialog(title).ShowDialog() == true));
|
||||
switch (outcome)
|
||||
{
|
||||
case PrivateBroadcastOutcome.Kept:
|
||||
|
||||
Reference in New Issue
Block a user