aab7e5ae20
Web half of the desktop feature wave. A shared bridge (`hooks/useTauri.ts`: invokeTauri/isTauri/useTauriEvent) backs per-feature hooks that no-op in the browser and drive the native Tauri commands (compiled in cinny-desktop): - P5-46 useTauriCallPower — hold system awake while a call is active. - P5-36 useTauriJumpList — Windows jump list of recent rooms → matrix: deep links. - P5-44 useTauriThumbbar — taskbar Mute/Deafen/End; events toggle mic/sound/hangup. - P5-43 useTauriSmtc — SMTC call state + button events. - P5-49 useTauriNetwork — react to native network-change → mx.retryImmediately(). - P5-47 window chrome — opt-in `customWindowChromeAtom` + TDS `TitleBar`; DesktopChrome wrapper in App.tsx (zero layout impact when off) + a desktop-only settings toggle. - P5-55 composer toolbar drag-reorder (settings order[] + pragmatic-drag-and-drop). - P5-57 DraftIndicator — subtle "draft saved" cue in the composer. Client-scoped hooks mount via TauriDesktopFeatures in ClientNonUIFeatures; window chrome mounts at App level. Gates: tsc/eslint/prettier clean, build OK, 556 tests. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
19 lines
714 B
TypeScript
19 lines
714 B
TypeScript
import { useEffect } from 'react';
|
|
import { useAtomValue } from 'jotai';
|
|
import { callEmbedAtom } from '../state/callEmbed';
|
|
import { invokeTauri } from './useTauri';
|
|
|
|
/**
|
|
* P5-46 — keep the system awake during calls (call continuity). Mirrors the
|
|
* call-embed atom (undefined = no active call) onto the native `set_call_active`
|
|
* command, which holds a `SetThreadExecutionState` request on Windows while a
|
|
* voice/video call is active and releases it when the call ends. No-op in the
|
|
* browser.
|
|
*/
|
|
export function useTauriCallPower(): void {
|
|
const callEmbed = useAtomValue(callEmbedAtom);
|
|
useEffect(() => {
|
|
invokeTauri('set_call_active', { active: callEmbed !== undefined });
|
|
}, [callEmbed]);
|
|
}
|