Merge pull request #363 from vector-im/dbkr/ptt_connection_lost

Show when connection is lost on PTT mode
This commit is contained in:
David Baker 2022-06-01 10:24:53 +01:00 committed by GitHub
commit 486d0abd30
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 3 deletions

View file

@ -44,8 +44,11 @@ function getPromptText(
activeSpeakerIsLocalUser: boolean, activeSpeakerIsLocalUser: boolean,
talkOverEnabled: boolean, talkOverEnabled: boolean,
activeSpeakerUserId: string, activeSpeakerUserId: string,
activeSpeakerDisplayName: string activeSpeakerDisplayName: string,
connected: boolean
): string { ): string {
if (!connected) return "Connection Lost";
const isTouchScreen = Boolean(window.ontouchstart !== undefined); const isTouchScreen = Boolean(window.ontouchstart !== undefined);
if (showTalkOverError) { if (showTalkOverError) {
@ -127,6 +130,7 @@ export const PTTCallView: React.FC<Props> = ({
startTalking, startTalking,
stopTalking, stopTalking,
transmitBlocked, transmitBlocked,
connected,
} = usePTT( } = usePTT(
client, client,
groupCall, groupCall,
@ -234,7 +238,8 @@ export const PTTCallView: React.FC<Props> = ({
activeSpeakerIsLocalUser, activeSpeakerIsLocalUser,
talkOverEnabled, talkOverEnabled,
activeSpeakerUserId, activeSpeakerUserId,
activeSpeakerDisplayName activeSpeakerDisplayName,
connected
)} )}
</p> </p>
{userMediaFeeds.map((callFeed) => ( {userMediaFeeds.map((callFeed) => (

View file

@ -15,10 +15,11 @@ limitations under the License.
*/ */
import { useCallback, useEffect, useState } from "react"; import { useCallback, useEffect, useState } from "react";
import { MatrixClient } from "matrix-js-sdk/src/client"; import { MatrixClient, ClientEvent } from "matrix-js-sdk/src/client";
import { GroupCall } from "matrix-js-sdk/src/webrtc/groupCall"; import { GroupCall } from "matrix-js-sdk/src/webrtc/groupCall";
import { CallFeed, CallFeedEvent } from "matrix-js-sdk/src/webrtc/callFeed"; import { CallFeed, CallFeedEvent } from "matrix-js-sdk/src/webrtc/callFeed";
import { logger } from "matrix-js-sdk/src/logger"; import { logger } from "matrix-js-sdk/src/logger";
import { SyncState } from "matrix-js-sdk/src/sync";
import { PlayClipFunction, PTTClipID } from "../sound/usePttSounds"; import { PlayClipFunction, PTTClipID } from "../sound/usePttSounds";
@ -67,6 +68,11 @@ export interface PTTState {
startTalking: () => void; startTalking: () => void;
stopTalking: () => void; stopTalking: () => void;
transmitBlocked: boolean; transmitBlocked: boolean;
// connected is actually an indication of whether we're connected to the HS
// (ie. the client's syncing state) rather than media connection, since
// it's peer to peer so we can't really say which peer is 'disconnected' if
// there's only one other person in the call and they've lost Internet.
connected: boolean;
} }
export const usePTT = ( export const usePTT = (
@ -226,6 +232,17 @@ export const usePTT = (
setMicMuteWrapper(true); setMicMuteWrapper(true);
}, [setMicMuteWrapper]); }, [setMicMuteWrapper]);
// separate state for connected: we set it separately from other things
// in the client sync callback
const [connected, setConnected] = useState(true);
const onClientSync = useCallback(
(syncState: SyncState) => {
setConnected(syncState !== SyncState.Error);
},
[setConnected]
);
useEffect(() => { useEffect(() => {
function onKeyDown(event: KeyboardEvent): void { function onKeyDown(event: KeyboardEvent): void {
if (event.code === "Space") { if (event.code === "Space") {
@ -275,8 +292,18 @@ export const usePTT = (
pttButtonHeld, pttButtonHeld,
enablePTTButton, enablePTTButton,
setMicMuteWrapper, setMicMuteWrapper,
client,
onClientSync,
]); ]);
useEffect(() => {
client.on(ClientEvent.Sync, onClientSync);
return () => {
client.removeListener(ClientEvent.Sync, onClientSync);
};
}, [client, onClientSync]);
const setTalkOverEnabled = useCallback((talkOverEnabled) => { const setTalkOverEnabled = useCallback((talkOverEnabled) => {
setState((prevState) => ({ setState((prevState) => ({
...prevState, ...prevState,
@ -293,5 +320,6 @@ export const usePTT = (
startTalking, startTalking,
stopTalking, stopTalking,
transmitBlocked, transmitBlocked,
connected,
}; };
}; };