diff --git a/packages/desktop/src/components/FooterControls.tsx b/packages/desktop/src/components/FooterControls.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/packages/desktop/src/components/Terminal.tsx b/packages/desktop/src/components/Terminal.tsx
index e458205..fb1dce7 100644
--- a/packages/desktop/src/components/Terminal.tsx
+++ b/packages/desktop/src/components/Terminal.tsx
@@ -23,6 +23,7 @@ import {
Fab,
Switch,
Dialog,
+ AvatarGroup,
} from '@mui/material';
import { blueGrey } from '@mui/material/colors';
import { FiZap, FiHeadphones, FiLogOut, FiMonitor, FiSun } from 'react-icons/fi';
@@ -51,6 +52,7 @@ import MainPanel from './MainPanel';
import { ConversationList } from './ConversationList';
import NewConversationDialog from './NewConversationDialog';
import { createGroupConversation } from '../firebase/firestore';
+import ConversationLabel from '../subcomponents/ConversationLabel';
type ConversationMap = {
[conversationId: string]: Conversation;
};
@@ -381,6 +383,11 @@ export function TerminalProvider({ children }: { children?: React.ReactNode }) {
navigator.mediaDevices
.getUserMedia({ audio: true })
.then((localUserMedia: MediaStream) => {
+ if (!localUserMedia.active) {
+ enqueueSnackbar('Make sure your microphone is enabled!', { variant: 'error' });
+ return;
+ }
+
localUserMedia.getTracks().forEach((track) => track.stop());
setUserAudioStream(localUserMedia);
@@ -415,7 +422,7 @@ export function TerminalProvider({ children }: { children?: React.ReactNode }) {
}
if (!userAudioStream || !mediaRecorder) {
- enqueueSnackbar('Check your audio mic permissions in preferences!!', { variant: 'error' });
+ enqueueSnackbar('Configure your audio!!', { variant: 'error' });
handleAskForMicrophonePermissions();
return;
@@ -423,12 +430,22 @@ export function TerminalProvider({ children }: { children?: React.ReactNode }) {
// prevent while delaying stopping
// ? better to just start after 200 ms as put below for the delay of stopping recording?
- if (mediaRecorder.state === 'recording') return;
+ if (mediaRecorder.state === 'recording') {
+ enqueueSnackbar(`Please don't spam!!!`, { variant: 'warning' });
+ return;
+ }
- enqueueSnackbar('started recording');
- setIsCloudDoingMagic(true);
- mediaRecorder.start();
- setIsUserSpeaking(true);
+ try {
+ enqueueSnackbar('started recording');
+ setIsCloudDoingMagic(true);
+ mediaRecorder.start();
+ setIsUserSpeaking(true);
+ } catch (error) {
+ console.error(error);
+ enqueueSnackbar('Problem in your audio!!!', { variant: 'error' });
+ setIsCloudDoingMagic(false);
+ setIsUserSpeaking(false);
+ }
}, [
selectedConversation,
setIsUserSpeaking,
@@ -564,162 +581,213 @@ export function TerminalProvider({ children }: { children?: React.ReactNode }) {
handleEscape,
}}
>
-
- {/* side panel */}
-
-
-
-
- {searchVal ? (
-
- ) : (
-
- )}
-
-
- {/* footer controls */}
-
+
+ {/* side panel */}
+
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/* todo: add a third mode which is when toggle broadcasting */}
- {selectedConversation ? (
-
-
-
-
-
+
+ {searchVal ? (
+
) : (
-
-
-
-
-
+
)}
-
+
+
-
-
+
-
-
+ {/* footer controls */}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {selectedConversation && (
+
+
+
+
+
+
+
+
+
+
+
+ {selectedConversation.userCache?.map((conversationUser, index) => (
+
+ ))}
+
+
+
+ )}
+
+ {/* todo: add a third mode which is when toggle broadcasting */}
+ {selectedConversation ? (
+
+
+
+
+
+ ) : (
+
+
+
+
+
+ )}
+
+
+
+
+
{children}