docs: mark P2-1/2/3/5 complete; update README and landing page
CI / Build & Quality Checks (push) Successful in 10m33s
CI / Build & Quality Checks (push) Successful in 10m33s
- LOTUS_TODO.md: [x] P2-1 (upstream JumpToTime), P2-2 (custom sounds), P2-3 (sort rooms), P2-5 (quiet hours) - README.md: new Notification Enhancements section (custom sounds, quiet hours); Room sort order added to UX & Composer section - landing/index.html: three new comparison rows — custom notification sounds, quiet hours, room sort order Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+12
-4
@@ -488,7 +488,7 @@ Body: { "order": 0.5 }
|
||||
|
||||
---
|
||||
|
||||
### [ ] P2-1 · Jump to Date
|
||||
### [x] P2-1 · Jump to Date
|
||||
|
||||
**What:** A calendar date picker accessible from the room header (small calendar icon). Selecting a date navigates the timeline to the first message on or after that date.
|
||||
API: `GET /_matrix/client/v1/rooms/{roomId}/timestamp_to_event?ts={epochMs}&dir=f`
|
||||
@@ -498,9 +498,11 @@ Returns `{ event_id, origin_server_ts }`. Then scroll the timeline to that event
|
||||
**Where:** `src/app/features/room/RoomViewHeader.tsx` (button), new `JumpToDate.tsx` component.
|
||||
**Complexity:** Medium.
|
||||
|
||||
**COMPLETED June 2026 — already upstream.** JumpToTime.tsx in upstream Cinny is a full date+time picker that calls mx.timestampToEvent() and wires into RoomViewHeader.tsx:215 via navigateRoom(). No custom work needed.
|
||||
|
||||
---
|
||||
|
||||
### [ ] P2-2 · Custom Notification Sounds
|
||||
### [x] P2-2 · Custom Notification Sounds
|
||||
|
||||
**What:** Let users pick from a set of built-in notification sounds for mentions, messages, and DMs. Features:
|
||||
|
||||
@@ -515,9 +517,11 @@ Returns `{ event_id, origin_server_ts }`. Then scroll the timeline to that event
|
||||
**[AUDIT REQUIRED]** — Find exactly where notification sounds play in the codebase. Search for `new Audio(` or `.play()` in `src/app/`. Confirm how many distinct notification categories currently exist.
|
||||
**Complexity:** Medium.
|
||||
|
||||
**COMPLETED June 2026.** messageSoundId / inviteSoundId settings ('notification'|'invite'|'call'|'none'). Shared NOTIFICATION_SOUND_MAP in src/app/utils/notificationSounds.ts. Settings → Notifications expands the sound toggle to show Message Sound and Invite Sound selectors with ▶ preview buttons. Audio element src updates reactively via useEffect. playPreview() catches .play() rejections.
|
||||
|
||||
---
|
||||
|
||||
### [ ] P2-3 · Sort Non-Space Rooms on Home Page
|
||||
### [x] P2-3 · Sort Non-Space Rooms on Home Page
|
||||
|
||||
**What:** A sort control on the Home tab for orphan rooms (rooms not in any space). Options:
|
||||
|
||||
@@ -529,6 +533,8 @@ Returns `{ event_id, origin_server_ts }`. Then scroll the timeline to that event
|
||||
**[AUDIT REQUIRED]** — Find where orphan rooms are listed on the Home tab. Confirm which hook/atom provides the room list (`useOrphanRooms()` in `roomList.ts`). Verify the sort is applied purely client-side with no server calls needed.
|
||||
**Complexity:** Medium.
|
||||
|
||||
**COMPLETED June 2026.** homeRoomSort: 'recent'|'alpha'|'unread' setting (default 'recent'). factoryRoomIdByUnread comparator in Home.tsx. Sort icon button in Rooms NavCategoryHeader opens PopOut menu. Persists via settings. Collapsed state always shows unread-only regardless of sort.
|
||||
|
||||
---
|
||||
|
||||
### [ ] P2-4 · Export Room History
|
||||
@@ -547,7 +553,7 @@ Returns `{ event_id, origin_server_ts }`. Then scroll the timeline to that event
|
||||
|
||||
---
|
||||
|
||||
### [ ] P2-5 · Notification Quiet Hours
|
||||
### [x] P2-5 · Notification Quiet Hours
|
||||
|
||||
**What:** Set a daily time window when browser notifications are suppressed (e.g., 11:00 PM – 8:00 AM). Toggle + start/end time pickers in Settings → Notifications.
|
||||
**Architecture:**
|
||||
@@ -570,6 +576,8 @@ function isQuietHours(settings): boolean {
|
||||
**[AUDIT REQUIRED]** — Find the exact location in the codebase where browser `Notification` objects are created. Confirm no other code paths trigger sounds/notifications that also need to be suppressed.
|
||||
**Complexity:** Medium.
|
||||
|
||||
**COMPLETED June 2026.** quietHoursEnabled/Start/End settings (defaults false/'23:00'/'08:00'). isInQuietHours() handles overnight spans; start===end=disabled. Both InviteNotifications and MessageNotifications gate notify()+playSound() behind quiet hours check. Settings → Notifications: Quiet Hours card with Switch + two <input type="time"> pickers.
|
||||
|
||||
---
|
||||
|
||||
### [ ] P2-6 · Room Activity / Moderation Log
|
||||
|
||||
@@ -140,6 +140,7 @@ Emoji reaction buttons styled for terminal mode via `button[data-reaction-key]`
|
||||
- **Message length counter**: A muted character counter appears just left of the send button while typing, disappearing when the composer is empty. Resets on room switch.
|
||||
- **Sidebar room filter**: A search-icon input at the top of the Home and DMs sidebar tabs filters rooms by display name in real time. Clears on tab switch. Styled to match the members-drawer search bar (`size="400"`, search prefix icon).
|
||||
- **DM last message preview**: Each DM row in the sidebar shows a truncated message body (48 chars) and relative timestamp (`Xm`, `Xhr`, `Yesterday`, `D MMM`) below the room name, sourced reactively from `useRoomLatestRenderedEvent`. Encrypted rooms show "Encrypted message" only on actual decryption failure.
|
||||
- **Room sort order**: Sort icon in the Rooms sidebar header lets users sort non-space rooms by Recent Activity (default), A→Z, or Unread First. Persists via `homeRoomSort` setting.
|
||||
- **Favorite rooms**: Right-click any room → "Add to Favorites" / "Remove from Favorites". Favorited rooms (using the standard Matrix `m.favourite` tag) appear in a collapsible "Favorites" section above the main room list on the Home tab. Syncs across devices via account data.
|
||||
- **Poll creation**: Polls can be created directly from the composer — `Icons.OrderList` button opens a modal with question field, 2–10 answer options (add/remove), and Single/Multiple choice toggle. Sends a stable `m.poll.start` event. (Poll display & voting were already supported.)
|
||||
- **Voice message playback speed**: `0.75×` → `1×` → `1.5×` → `2×` speed toggle pill on voice message player — cycles on click via `playbackRate` on the `<audio>` element.
|
||||
@@ -153,6 +154,11 @@ Emoji reaction buttons styled for terminal mode via `button[data-reaction-key]`
|
||||
|
||||
- **Night Light / Blue Light Filter**: Warm orange overlay (`rgba(255,140,0,N%)`) across the entire UI. Toggle + intensity slider (5–80%) in Settings → Appearance. `position:fixed; pointer-events:none; z-index:9998`. Persists across sessions.
|
||||
|
||||
### Notification Enhancements
|
||||
|
||||
- **Custom notification sounds**: `messageSoundId` / `inviteSoundId` settings select per-category notification sound (`notification.ogg`, `invite.ogg`, `call.ogg`, or None). Settings → Notifications expands the sound toggle with Message Sound + Invite Sound selects and ▶ preview buttons. Shared `notificationSounds.ts` module.
|
||||
- **Notification quiet hours**: `quietHoursEnabled` / `quietHoursStart` / `quietHoursEnd` settings suppress all desktop notifications and sounds during a configured time window. Handles overnight spans (e.g. 23:00–08:00). Settings → Notifications: Quiet Hours card with toggle + start/end time pickers.
|
||||
|
||||
### Calls (Extended)
|
||||
|
||||
- **Push-to-Deafen**: Press `M` during a call to toggle speaker mute (deafen). Configurable in Settings → General → Calls alongside the PTT key. Skips editable elements; guards `e.repeat`; uses `el.ownerDocument.body` for iframe safety.
|
||||
|
||||
Reference in New Issue
Block a user