From 6693ccf4c08c99f8b70a93cc8312bb00b72700df Mon Sep 17 00:00:00 2001 From: Bryan1029384756 <23323626+Bryan1029384756@users.noreply.github.com> Date: Mon, 16 Feb 2026 14:39:44 -0600 Subject: [PATCH] feat: Implement incoming call UI with sound and integrate core chat and voice components. --- TODO.md | 9 +- .../src/assets/sounds/default_call_sound.mp3 | Bin 0 -> 90625 bytes .../shared/src/components/IncomingCallUI.jsx | 28 +++++ packages/shared/src/components/Sidebar.jsx | 20 +++- packages/shared/src/index.css | 109 +++++++++++++++++- packages/shared/src/pages/Chat.jsx | 82 ++++++++++++- 6 files changed, 231 insertions(+), 17 deletions(-) create mode 100644 packages/shared/src/assets/sounds/default_call_sound.mp3 create mode 100644 packages/shared/src/components/IncomingCallUI.jsx diff --git a/TODO.md b/TODO.md index 6b1ce5a..c9838cf 100644 --- a/TODO.md +++ b/TODO.md @@ -8,4 +8,11 @@ - Can we add a way to tell the user they are connecting to voice. Like show them its connecting so the user knows something is happening instead of them clicking on the voice stage again and again. -- Add photo / video albums like Commit https://commet.chat/ \ No newline at end of file +- Add photo / video albums like Commit https://commet.chat/ + + + + + When i switch from a private dm to the server i hear a ping notification even though i have no notifications. Also when i switch from a text channel to another text channel a certain text channel is the one thats triggering it and i dont know why. Its only for one user that its doing it. \ No newline at end of file diff --git a/packages/shared/src/assets/sounds/default_call_sound.mp3 b/packages/shared/src/assets/sounds/default_call_sound.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..0e04ded1e0d9de3230389845af8cd00d7da22ba8 GIT binary patch literal 90625 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

?&Fnm-!_nI`RIp!nh2crC^E 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 { + return ( +

+
+ +
+
{callerUsername}
+
Incoming call...
+
+ + +
+
+ ); +}; + +export default IncomingCallUI; diff --git a/packages/shared/src/components/Sidebar.jsx b/packages/shared/src/components/Sidebar.jsx index 4d06260..e1e2a5b 100644 --- a/packages/shared/src/components/Sidebar.jsx +++ b/packages/shared/src/components/Sidebar.jsx @@ -798,14 +798,17 @@ const Sidebar = ({ channels, categories, activeChannel, onSelectChannel, usernam ...channels.map(c => c._id), ...dmChannels.map(dm => dm.channel_id) ], [channels, dmChannels]); - const allReadStates = useQuery( + const rawAllReadStates = useQuery( api.readState.getAllReadStates, userId ? { userId } : "skip" - ) || []; - const latestTimestamps = useQuery( + ); + const rawLatestTimestamps = useQuery( api.readState.getLatestMessageTimestamps, channelIds.length > 0 ? { channelIds } : "skip" - ) || []; + ); + const allReadStates = rawAllReadStates || []; + const latestTimestamps = rawLatestTimestamps || []; + const unreadQueriesLoaded = rawAllReadStates !== undefined && rawLatestTimestamps !== undefined; const unreadChannels = React.useMemo(() => { const set = new Set(); @@ -835,8 +838,13 @@ const Sidebar = ({ channels, categories, activeChannel, onSelectChannel, usernam const prevUnreadDMsRef = useRef(null); useEffect(() => { + if (!unreadQueriesLoaded) return; + const currentIds = new Set( - dmChannels.filter(dm => unreadChannels.has(dm.channel_id)).map(dm => dm.channel_id) + dmChannels.filter(dm => + unreadChannels.has(dm.channel_id) && + !(view === 'me' && activeDMChannel?.channel_id === dm.channel_id) + ).map(dm => dm.channel_id) ); if (prevUnreadDMsRef.current === null) { @@ -856,7 +864,7 @@ const Sidebar = ({ channels, categories, activeChannel, onSelectChannel, usernam } prevUnreadDMsRef.current = currentIds; - }, [dmChannels, unreadChannels, isReceivingScreenShareAudio]); + }, [dmChannels, unreadChannels, unreadQueriesLoaded, view, activeDMChannel, isReceivingScreenShareAudio]); const onRenameChannel = () => {}; diff --git a/packages/shared/src/index.css b/packages/shared/src/index.css index 90dd76c..067f361 100644 --- a/packages/shared/src/index.css +++ b/packages/shared/src/index.css @@ -3757,14 +3757,29 @@ img.search-dropdown-avatar { opacity: 0.3; } -.dm-call-banner { +.dm-call-idle-stage { display: flex; + flex-direction: column; align-items: center; - justify-content: space-between; - padding: 8px 16px; - background-color: var(--bg-secondary); - border-bottom: 1px solid var(--bg-tertiary); + justify-content: center; + background-color: var(--bg-tertiary); + padding: 32px 16px; + gap: 8px; + min-height: 200px; + height: 45%; + max-height: 80%; + border-bottom: 2px solid var(--bg-tertiary); +} + +.dm-call-idle-username { color: var(--text-normal); + font-size: 18px; + font-weight: 600; + margin-top: 8px; +} + +.dm-call-idle-status { + color: var(--text-muted); font-size: 14px; } @@ -3781,4 +3796,88 @@ img.search-dropdown-avatar { .dm-call-join-btn:hover { background-color: #2d7d46; +} + +/* Incoming call UI */ +.incoming-call-ui { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background-color: var(--bg-tertiary); + padding: 32px 16px; + gap: 12px; + flex: 1; + min-height: 260px; +} + +.incoming-call-avatar-ring { + position: relative; + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 8px; +} + +.incoming-call-avatar-ring::before { + content: ''; + position: absolute; + width: 96px; + height: 96px; + border-radius: 50%; + border: 3px solid #3ba55c; + animation: call-ring-pulse 1.5s ease-out infinite; +} + +@keyframes call-ring-pulse { + 0% { + transform: scale(1); + opacity: 0.8; + } + 100% { + transform: scale(1.4); + opacity: 0; + } +} + +.incoming-call-username { + color: var(--text-normal); + font-size: 20px; + font-weight: 600; +} + +.incoming-call-subtitle { + color: var(--text-muted); + font-size: 14px; +} + +.incoming-call-buttons { + display: flex; + gap: 24px; + margin-top: 16px; +} + +.incoming-call-btn { + width: 56px; + height: 56px; + border-radius: 50%; + border: none; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + color: white; + transition: filter 0.15s; +} + +.incoming-call-btn:hover { + filter: brightness(1.15); +} + +.incoming-call-btn.join { + background-color: #3ba55c; +} + +.incoming-call-btn.reject { + background-color: #ed4245; } \ No newline at end of file diff --git a/packages/shared/src/pages/Chat.jsx b/packages/shared/src/pages/Chat.jsx index 4447a32..67e9b67 100644 --- a/packages/shared/src/pages/Chat.jsx +++ b/packages/shared/src/pages/Chat.jsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect, useCallback, useRef } from 'react'; +import React, { useState, useEffect, useCallback, useRef, useMemo } from 'react'; import { useQuery, useConvex } from 'convex/react'; import { api } from '../../../../convex/_generated/api'; import Sidebar from '../components/Sidebar'; @@ -16,6 +16,9 @@ import { PresenceProvider } from '../contexts/PresenceContext'; import { getUserPref, setUserPref } from '../utils/userPreferences'; import { usePlatform } from '../platform'; import { useIsMobile } from '../hooks/useIsMobile'; +import IncomingCallUI from '../components/IncomingCallUI'; +import Avatar from '../components/Avatar'; +import callRingSound from '../assets/sounds/default_call_sound.mp3'; const MAX_SEARCH_HISTORY = 10; @@ -211,11 +214,66 @@ const Chat = () => { ? voiceActiveChannelId === activeDMChannel.channel_id : false; const [dmCallExpanded, setDmCallExpanded] = useState(false); const [dmCallStageHeight, setDmCallStageHeight] = useState(45); + const [rejectedCallChannelId, setRejectedCallChannelId] = useState(null); + const ringAudioRef = useRef(null); + const ringTimeoutRef = useRef(null); useEffect(() => { if (!isInDMCall) setDmCallExpanded(false); }, [isInDMCall]); + // Global incoming DM call detection — not gated by current view + const incomingDMCall = useMemo(() => { + if (!userId) return null; + for (const dm of dmChannels) { + const users = voiceStates[dm.channel_id] || []; + if (users.length > 0 && voiceActiveChannelId !== dm.channel_id) { + const caller = users.find(u => u.userId !== userId); + if (caller) { + return { + channelId: dm.channel_id, + otherUsername: dm.other_username, + callerUsername: caller.username, + callerAvatarUrl: caller.avatarUrl || null, + }; + } + } + } + return null; + }, [dmChannels, voiceStates, voiceActiveChannelId, userId]); + + // Play ringing sound for incoming DM calls (global — works from any view) + useEffect(() => { + if (incomingDMCall && incomingDMCall.channelId !== rejectedCallChannelId) { + const audio = new Audio(callRingSound); + audio.loop = true; + audio.volume = 0.5; + audio.play().catch(() => {}); + ringAudioRef.current = audio; + + ringTimeoutRef.current = setTimeout(() => { + audio.pause(); + audio.currentTime = 0; + setRejectedCallChannelId(incomingDMCall.channelId); + }, 30000); + + return () => { + audio.pause(); + audio.currentTime = 0; + ringAudioRef.current = null; + clearTimeout(ringTimeoutRef.current); + ringTimeoutRef.current = null; + }; + } + }, [incomingDMCall?.channelId, rejectedCallChannelId]); + + // Clear rejected state when the rejected call's channel becomes empty + useEffect(() => { + if (rejectedCallChannelId && !(voiceStates[rejectedCallChannelId]?.length > 0)) { + setRejectedCallChannelId(null); + } + }, [rejectedCallChannelId, voiceStates]); + const handleDmCallResizeStart = useCallback((e) => { e.preventDefault(); const chatContent = e.target.closest('.chat-content'); @@ -246,6 +304,9 @@ const Chat = () => { // Already in this DM call if (voiceActiveChannelId === dmChannelId) return; + // Suppress ringing when we leave later — just show the banner + setRejectedCallChannelId(dmChannelId); + // If in another voice channel, disconnect first if (voiceActiveChannelId) { disconnectVoice(); @@ -417,6 +478,7 @@ const Chat = () => { function renderMainContent() { if (view === 'me') { if (activeDMChannel) { + const showIncomingUI = dmCallActive && !isInDMCall && incomingDMCall?.channelId === activeDMChannel?.channel_id && rejectedCallChannelId !== activeDMChannel?.channel_id; return (
{ isDMCallActive={dmCallActive} {...searchProps} /> -
- {dmCallActive && !isInDMCall && ( -
- {activeDMChannel.other_username} is in a call +
+ {showIncomingUI && ( + setRejectedCallChannelId(incomingDMCall.channelId)} + /> + )} + {dmCallActive && !isInDMCall && !showIncomingUI && ( +
+ +
{activeDMChannel.other_username}
+
In a call
)}