docs: document screenshare/PTT/status features in README + landing page
Lint / Shell (shellcheck) (push) Successful in 13s
Lint / JS (eslint) (push) Successful in 7s
Lint / Python (ruff) (push) Successful in 6s
Lint / Python deps (pip-audit) (push) Successful in 58s
Lint / Secret scan (gitleaks) (push) Successful in 4s

README.md:
- Replaced the stale 'Auto-revert spotlight on screenshare' entry
  (that 600ms revert-to-grid code was removed — it caused fullscreen
  to show avatars instead of the screenshare)
- Added accurate entries for all four features added this cycle:
  Screenshare fullscreen, PiP screenshare focus, Screenshare audio
  mute, Custom status message

landing/index.html:
- Updated Lotus Fork feature description paragraph to mention
  screenshare fullscreen, screenshare audio mute, PTT, and custom
  status messages
- Added PTT row to Voice & Video comparison table
- Updated Screenshare row for Lotus Chat to note fullscreen + audio mute
- Added 'Custom status message' row to UX & Extras section

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-27 12:40:02 -04:00
parent b609497179
commit 85ca1ca8a1
2 changed files with 26 additions and 3 deletions
+4 -1
View File
@@ -418,7 +418,10 @@ All custom code lives in `src/app/` on the `lotus` branch of `code.lotusguild.or
| **Element Call embed** | `src/app/plugins/call/`, `src/app/hooks/useCallEmbed.ts`, `src/app/components/CallEmbedProvider.tsx` | EC 0.19.3 (`@element-hq/element-call-embedded`), dist copied to `public/element-call/` by vite |
| **DM calls** | `src/app/features/room/Room.tsx`, `src/app/features/room/RoomViewHeader.tsx` | Phone button in DM room header; `useCallStart(true)` passes `intent: StartedByUser`; Room.tsx switches to CallView layout when DM has active call |
| **Picture-in-picture call** | `src/app/components/CallEmbedProvider.tsx` | When navigating away from the call room, the embed shrinks to a 280×158px PiP in the bottom-right. Click navigates back. Implemented via `useEffect` imperatively overriding styles on `callEmbedRef.current` — cannot use a wrapper div because `useCallEmbedPlacementSync` writes `top/left/width/height` directly onto that element |
| **Auto-revert spotlight on screenshare** | `src/app/plugins/call/CallControl.ts` (`onControlMutation`) | When screenshare starts EC normally forces spotlight view. We detect the `screenshare` button going `primary` and after 600ms click `gridButton` to revert to grid layout |
| **Screenshare fullscreen** | `src/app/features/call/CallControls.tsx`, `src/app/features/call/Controls.tsx` | When screensharing, a fullscreen button appears in call controls. Calls `callEmbedRef.current?.requestFullscreen()` on the Cinny call container. EC naturally spotlights the screenshare — the old 600ms grid-revert code was removed (it caused fullscreen to show avatars instead of the screen) |
| **PiP screenshare focus** | `src/app/components/CallEmbedProvider.tsx`, `src/app/plugins/call/CallControl.ts` | When the floating PiP window is active and screenshare is detected (no cameras present), auto-enables EC spotlight view so the screenshare fills the PiP rather than showing avatar tiles |
| **Screenshare audio mute** | `src/app/features/call/Controls.tsx`, `src/app/features/call/CallControls.tsx`, `src/app/plugins/call/CallControl.ts` | Dedicated button to independently mute/unmute audio from screenshares without muting microphone audio. Targets `audio[data-lk-source="screen_share_audio"]` LiveKit elements. Persists across deafen/undeafen cycles |
| **Custom status message** | `src/app/features/settings/account/Profile.tsx`, `src/app/features/room/MembersDrawer.tsx`, `src/app/components/user-profile/UserHero.tsx`, `src/app/components/user-profile/UserRoomProfile.tsx`, `src/app/hooks/useUserPresence.ts` | Discord-style free-form status text. Set via Settings → Account → "Status Message" with an emoji picker (lazy-loaded `EmojiBoard`). Saved via `mx.setPresence({ status_msg })`. Displayed below the username in the members drawer and user profile popout. Syncs live via Matrix presence events |
| **PTT (Push-to-Talk)** | `src/app/features/call/CallControls.tsx`, `src/app/state/settings.ts` | Hold-to-talk key (default: Space, configurable). Mutes mic on join; holds mic open while key is held. Badge shows `PTT — Hold SPACE` / `● Live`. Listens on both main window and EC iframe `contentWindow` for key events |
| **PTT badge theming** | `src/app/features/call/CallControls.tsx` | Plain folds `Chip` by default; neon terminal style (`#00FF88`/`#FF6B00`, JetBrains Mono) when `lotusTerminal` setting is on |
| **GIF picker** | `src/app/components/GifPicker.tsx`, `src/app/features/room/RoomInput.tsx` | Giphy JS/React SDK (`@giphy/react-components`, `@giphy/js-fetch-api`, `styled-components`). API key in `config.json` → `gifApiKey`. GIF button appears next to Send only when `gifApiKey` is set. Sends GIF as `m.image` (fetches blob → `mx.uploadContent` → `mx.sendMessage`). `FocusTrap` handles click-outside / Escape to close |
+22 -2
View File
@@ -554,7 +554,7 @@
</a>
</div>
<p class="also-available">
Our Lotus Guild fork of Cinny adds: voice message recording (MSC3245, works E2EE), device verification fix (cross-client SAS emoji + inline cards), per-member device session panel with per-device verify buttons, presence status indicators (online/busy/away dots) in member lists, incoming call ring + Answer/Decline (DMs &amp; group chats), GIF picker (Giphy), draggable+resizable picture-in-picture call window, poll display &amp; voting, message forwarding, image/video captions, location sharing (map view + send), deleted message placeholders, per-message read receipt avatars (click for full list with timestamps), chat wallpaper in calls, and the Lotus Terminal design theme.
Our Lotus Guild fork of Cinny adds: voice message recording (MSC3245, works E2EE), device verification fix (cross-client SAS emoji + inline cards), per-member device session panel with per-device verify buttons, presence status indicators (online/busy/away dots) in member lists, incoming call ring + Answer/Decline (DMs &amp; group chats), GIF picker (Giphy), draggable+resizable picture-in-picture call window, poll display &amp; voting, message forwarding, image/video captions, location sharing (map view + send), deleted message placeholders, per-message read receipt avatars (click for full list with timestamps), screenshare fullscreen button, screenshare audio mute (mute a screenshare's audio without leaving the call), PTT (Push-to-Talk with configurable hold key), custom status messages (shown below usernames in member lists, with emoji support, set in Settings), and the Lotus Terminal design theme.
Prefer the unmodified upstream? <a href="https://cinny.in" target="_blank" rel="noopener">cinny.in</a> works with our homeserver &mdash; set it to <code style="font-size:0.8em;color:#e88;">matrix.lotusguild.org</code>.
</p>
@@ -793,7 +793,7 @@
</tr>
<tr>
<td>Screenshare</td>
<td class="ours"><span class="yes"></span><small>via Element Call embed</small></td>
<td class="ours"><span class="yes"></span><small>via Element Call; fullscreen button,<br>independent audio mute</small></td>
<td><span class="yes"></span><small>via Element Call embed</small></td>
<td><span class="yes"></span></td>
<td><span class="no"></span></td>
@@ -801,6 +801,16 @@
<td><span class="yes"></span></td>
<td><span class="yes"></span><small>XDG portals &amp; native</small></td>
</tr>
<tr>
<td>Push-to-Talk<small>hold key to transmit</small></td>
<td class="ours"><span class="yes"></span><small>configurable hold key,<br>PTT badge in call bar</small></td>
<td><span class="no"></span></td>
<td><span class="no"></span></td>
<td><span class="no"></span></td>
<td><span class="no"></span></td>
<td><span class="no"></span></td>
<td><span class="no"></span></td>
</tr>
<tr>
<td>Group calls</td>
<td class="ours"><span class="yes"></span><small>via Element Call embed</small></td>
@@ -997,6 +1007,16 @@
<td><span class="yes"></span><small>avatar row below message</small></td>
<td><span class="yes"></span></td>
</tr>
<tr>
<td>Custom status message<small>shown below username</small></td>
<td class="ours"><span class="yes"></span><small>Discord-style; emoji picker,<br>editable in Settings</small></td>
<td><span class="no"></span></td>
<td><span class="no"></span></td>
<td><span class="no"></span></td>
<td><span class="no"></span></td>
<td><span class="yes"></span><small>via profile settings</small></td>
<td><span class="no"></span></td>
</tr>
<tr>
<td>Push notifications</td>
<td class="ours"><span class="part">~</span><small>web push only</small></td>