diff options
| author | Adam Soltys <[email protected]> | 2026-10-18 08:41:13 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-10-18 08:41:13 -0700 |
| commit | 98d90827cbf581c4322232063b4f785f97bcb45b (patch) | |
| tree | 21e6cfcd45c5182172ea0e7ceff1c9b105ddff61 /src/app.js | |
| parent | a9cdc8a6fd7abd38a185f9d8828531374307cf41 (diff) | |
| download | coinosv3-98d90827cbf581c4322232063b4f785f97bcb45b.tar.gz coinosv3-98d90827cbf581c4322232063b4f785f97bcb45b.zip | |
Voice and video calls in DMs (NIP-AC, as Amethyst, nospeak and Noscall speak it): 📞 and 🎥 in a conversation's header; a call from someone you follow or have written to rings over any page (tone, buzz, a notification when the app is out of sight) with Answer and Decline; mute, camera off, switch camera, minimize to a bar, hang up. WebRTC device to device (DTLS-SRTP), set up by signed messages in ephemeral gift wraps to the DM inboxes; TURN from coinos's live server (Cloudflare) for the connections that can't go direct. A remote signer puts the candidates inside the offer and answer instead of signing one each.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013ZDf1cyCQLkfjftYhymZAg
Diffstat (limited to 'src/app.js')
| -rw-r--r-- | src/app.js | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -853,7 +853,9 @@ function renderInner() { if (bottomNav) bottomNav.prepend(h('div', { class: 'app-nav-wide app-nav-brand' }, brandLogo())); // the wallet beside the feed and chats on a wide screen (its own page needs no twin) const side = bottomNav && featScreen && WIDE_MQ && WIDE_MQ.matches ? walletSide() : null; - morphChildren(root, [screen, footer(), ...(bottomNav ? [bottomNav] : []), ...(side ? [side] : []), ...(ui.lightbox ? [imageViewer()] : [])]); + // a call, over whatever page is up (the messages feature's) + const callOv = activeAccount() ? featureHook('callOverlay') : null; + morphChildren(root, [screen, footer(), ...(bottomNav ? [bottomNav] : []), ...(side ? [side] : []), ...(ui.lightbox ? [imageViewer()] : []), ...(callOv ? [callOv] : [])]); promoteLazySrc(root); // sources on the nodes that actually made it into the page try { document.documentElement.classList.toggle('no-scroll', !!(ui.lightbox || ui.mediaPager)); } catch {} if (fpath) { |
