From 46e8f14436e94e9fa80064003dd0d8e2eac60edb Mon Sep 17 00:00:00 2001 From: talksik Date: Wed, 18 May 2022 20:28:33 -0500 Subject: [PATCH] setting up different way --- .../desktop/src/providers/StreamProvider.tsx | 74 +++++++------------ 1 file changed, 28 insertions(+), 46 deletions(-) diff --git a/packages/desktop/src/providers/StreamProvider.tsx b/packages/desktop/src/providers/StreamProvider.tsx index 9506dec..53b7839 100644 --- a/packages/desktop/src/providers/StreamProvider.tsx +++ b/packages/desktop/src/providers/StreamProvider.tsx @@ -11,12 +11,14 @@ import { } from '@nirvana/core/sockets/channels'; import toast from 'react-hot-toast'; import useTerminalProvider from './TerminalProvider'; +import MasterLineData from '@nirvana/core/models/masterLineData.model'; +import { useEffectOnce } from 'react-use'; -type PeerMap = { - [userId: string]: Peer; +type LinePeerMap = { + [lineId: string]: { userId: string; peer: Peer }[]; }; interface IStreamProvider { - peerMap: PeerMap; + peerMap: LinePeerMap; userLocalStream?: MediaStream; } @@ -30,7 +32,7 @@ export function StreamProvider({ children }: { children: React.ReactChild }) { const { $ws } = useSockets(); - const [peerMap, updatePeerMap] = useImmer({}); + const [peerMap, updatePeerMap] = useImmer({}); const [userLocalStream, setUserLocalStream] = useState(); @@ -56,39 +58,6 @@ export function StreamProvider({ children }: { children: React.ReactChild }) { }); }, []); - useEffect(() => { - if (userLocalStream) { - Object.values(peerMap).forEach((currentPeer) => { - try { - currentPeer.addStream(userLocalStream); - } catch (error) { - toast.error('problem adding stream'); - console.error(error); - } - }); - } - }, [userLocalStream, peerMap]); - - const [distinctPeerUserIds, setDistinctPeerUserIds] = useImmer([]); - - useEffect(() => { - setDistinctPeerUserIds((draft) => { - Object.values(roomsMap).forEach((line) => { - if (!line.tunedInMemberIds?.includes(user._id.toString())) { - return; - } - - line.tunedInMemberIds.forEach((tunedUserId) => { - if (tunedUserId === user._id.toString()) return; - - if (draft.includes(tunedUserId)) return; - - draft.push(tunedUserId); - }); - }); - }); - }, [roomsMap, setDistinctPeerUserIds, user?._id]); - console.log(`peer map: `, peerMap); const handleAddPeer = useCallback( @@ -103,9 +72,16 @@ export function StreamProvider({ children }: { children: React.ReactChild }) { return ( {/* handles stream connections */} - {distinctPeerUserIds?.length > 0 && ( - - )} + {Object.values(roomsMap).map((line) => { + if (line.tunedInMemberIds.includes(user._id.toString())) + return ( + + ); + })} {children} @@ -116,21 +92,27 @@ export default function useStreams() { return useContext(StreamProviderContext); } -const MemoStreamsConnector = React.memo(StreamsConnector); +const MemoLineConnector = React.memo(LineConnector); -function StreamsConnector({ - membersToCall, +function LineConnector({ + line, handleAddPeer, }: { - membersToCall: string[]; + line: MasterLineData; handleAddPeer: (userId: string, peerObj: Peer) => void; }) { console.log('rendering this piece of shit'); - console.log(membersToCall); + console.log(line); + + useEffectOnce(() => { + console.log('got initial list for this channel that I am tuned into'); + + console.log(line.tunedInMemberIds); + }); return ( <> - {membersToCall.map((userId) => ( + {line.tunedInMemberIds.map((userId) => ( ))}