Creator design (2026-11-05). A stack of red rows at the top of the left panel, above both mode grids so it shows while editing and while live, pushing the panel's content down. - Row 1 is the **Steam licence indicator** and nothing displaces it. It reads as status, not a warning: "Entitlement 30 fps · Maximum 60 fps", both numbers derived from QualityOptions and HasProOutput. While higher tiers are unavailable it shows a **pin** (standing indicator, no close control); once ownership is verified the pin becomes a **close control** and the dismissal is persisted (`Steam.LicenceIndicatorDismissed`), permanent while ownership holds. Losing ownership restores it as pinned — a change of state, not a preference. Click → About. - **Event rows stack beneath, newest first**, one row per episode (an episode advancing its state updates its own row rather than adding another). Each is dismissible. Click → the Logs tab opens with that event's sequence range painted red (`HighlightedLogFrom/To` + `LogInRangeConverter`; two numbers rather than a collection because the log list is virtualised and realised rows do not re-evaluate on membership changes). - Replaces the old red panel under the quality picker, which is removed. - The Steam diagnostic text loses "Contact the creator or support" for a neutral "Steam licensing is not configured in this build." Tests: `AttentionAlertStackTests` — pinned first with the status text; owned → closable and the close survives a reload but ownership loss restores it pinned; pinned cannot be dismissed; event rows LIFO with in-place episode updates; clicking an event opens Logs and sets its range. AboutHub + Entitlement tests updated for the removed panel and the new wording. FAST gate: 532 passed, 0 failed, 0 warnings.
36 lines
1.3 KiB
C#
36 lines
1.3 KiB
C#
namespace ytLive.Models;
|
|
|
|
/// <summary>
|
|
/// One row in the left panel's alert stack (creator design, 2026-11-05). The stack sits above the
|
|
/// panel's content and pushes it down, so an alert is seen without hunting for a tab.
|
|
/// <para><b>Pinned</b> rows are standing state, not errors to clear: they show a pin instead of a
|
|
/// close control and are only removed when the state itself changes (the Steam licence indicator
|
|
/// becomes dismissible — and its dismissal permanent — once ownership is verified).</para>
|
|
/// <para>Clicking a row runs its action: the licence indicator opens About; an event alert opens the
|
|
/// Logs tab with that event's lines highlighted.</para>
|
|
/// </summary>
|
|
public sealed record AttentionAlert(
|
|
string Id,
|
|
string Label,
|
|
string Text,
|
|
bool IsPinned,
|
|
AttentionAlertAction Action,
|
|
long LogFrom = 0,
|
|
long LogTo = 0)
|
|
{
|
|
/// <summary>True while a close control should be shown (a dismissible row).</summary>
|
|
public bool CanDismiss => !IsPinned;
|
|
|
|
/// <summary>True while the row should show the pin glyph instead of a close control.</summary>
|
|
public bool ShowsPin => IsPinned;
|
|
}
|
|
|
|
public enum AttentionAlertAction
|
|
{
|
|
/// <summary>Open the About panel (the licence indicator).</summary>
|
|
About,
|
|
|
|
/// <summary>Open the Logs tab and highlight this event's lines.</summary>
|
|
Logs,
|
|
}
|