• v0.9.4 84824589ae

    Shell-mode PS-style update modal + cached-update getter
    release / Build Windows .zip (push) Canceled after 0s

    LastSkywalker released this 2026-05-31 10:33:16 +03:00

    The desktop UpdateBanner lives between the sidebar and topbar — both
    of which shell mode replaces with a full-screen ShellApp. As a result
    shell-mode users on a controller had no way to learn about or apply
    incoming updates without dropping back to Explorer.

    ShellUpdateModal mirrors PowerMenu's shape so the controller
    bindings are familiar: <-/-> walks three buttons (Обновить /
    Позже / Пропустить), A or Enter activates the focused one, B or
    Esc dismisses to "Позже" (a fat finger should not silently hide
    the update for good). "Обновить" is pre-selected so a single A
    confirms — same one-press feel as the monitor / audio pickers.

    Mid-download the modal locks navigation and ignores B so a stray
    press can't abort the binary swap. Same stale-closure guard as
    PowerMenu (activate(i) takes the index explicitly).

    Queueing: the modal only renders once pickerOpen && audioOpen are
    both clear. On a fresh shell boot the user thus walks monitor ->
    audio -> (if relevant) update before reaching the carousel, all
    without leaving the controller.

    inputBlocked / keyboard / wheel handlers also gate on the modal so
    the carousel behind it doesn't double-handle the d-pad.

    Backend: added App.GetCachedUpdate() returning a.lastUpdate. Wails
    does not replay missed events, and shell mode mounts AFTER
    GetShellModeStatus resolves — the startup goroutine's
    "update:available" emit usually lands before our EventsOn arm. The
    getter closes that race: App.tsx pulls it on mount and seeds the
    update state if anything was already found.

    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com

    Downloads