Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Commit

Permalink
Fix soft-crash when hanging up Jitsi via PIP (#7645)
Browse files Browse the repository at this point in the history
  • Loading branch information
t3chguy authored Jan 26, 2022
1 parent 038f67e commit 79d9a0c
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 18 deletions.
3 changes: 1 addition & 2 deletions src/components/views/voip/CallView/CallViewHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,7 @@ const CallViewHeader: React.FC<CallViewHeaderProps> = ({
onPipMouseDown,
}) => {
const [callRoom, onHoldCallRoom] = callRooms;
const callRoomName = callRoom.name;
const { roomId } = callRoom;
const { roomId, name: callRoomName } = callRoom;

if (!pipMode) {
return <div className="mx_CallViewHeader">
Expand Down
28 changes: 12 additions & 16 deletions src/components/views/voip/PipView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -199,10 +199,7 @@ export default class PipView extends React.Component<IProps, IState> {
};

private onActiveWidgetStoreUpdate = (): void => {
this.setState({
persistentWidgetId: ActiveWidgetStore.instance.getPersistentWidgetId(),
});
this.updateShowWidgetInPip();
this.updateShowWidgetInPip(ActiveWidgetStore.instance.getPersistentWidgetId());
};

private updateCalls = (): void => {
Expand Down Expand Up @@ -237,24 +234,23 @@ export default class PipView extends React.Component<IProps, IState> {
}
};

public updateShowWidgetInPip() {
const wId = this.state.persistentWidgetId;

// Accepts a persistentWidgetId to be able to skip awaiting the setState for persistentWidgetId
public updateShowWidgetInPip(persistentWidgetId = this.state.persistentWidgetId) {
let userIsPartOfTheRoom = false;
let fromAnotherRoom = false;
let notVisible = false;
if (wId) {
const persistentWidgetInRoomId = ActiveWidgetStore.instance.getRoomId(wId);
if (persistentWidgetId) {
const persistentWidgetInRoomId = ActiveWidgetStore.instance.getRoomId(persistentWidgetId);
const persistentWidgetInRoom = MatrixClientPeg.get().getRoom(persistentWidgetInRoomId);

// Sanity check the room - the widget may have been destroyed between render cycles, and
// thus no room is associated anymore.
if (!persistentWidgetInRoom) return null;

const wls = WidgetLayoutStore.instance;
notVisible = !wls.isVisibleOnScreen(persistentWidgetInRoom, wId);
userIsPartOfTheRoom = persistentWidgetInRoom.getMyMembership() == "join";
fromAnotherRoom = this.state.viewedRoomId !== persistentWidgetInRoomId;
if (persistentWidgetInRoom) {
const wls = WidgetLayoutStore.instance;
notVisible = !wls.isVisibleOnScreen(persistentWidgetInRoom, persistentWidgetId);
userIsPartOfTheRoom = persistentWidgetInRoom.getMyMembership() == "join";
fromAnotherRoom = this.state.viewedRoomId !== persistentWidgetInRoomId;
}
}

// The widget should only be shown as a persistent app (in a floating pip container) if it is not visible on screen
Expand All @@ -263,7 +259,7 @@ export default class PipView extends React.Component<IProps, IState> {
(fromAnotherRoom && userIsPartOfTheRoom) ||
(notVisible && userIsPartOfTheRoom);

this.setState({ showWidgetInPip });
this.setState({ showWidgetInPip, persistentWidgetId });
}

public render() {
Expand Down

0 comments on commit 79d9a0c

Please sign in to comment.