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

Fix soft-crash when hanging up Jitsi via PIP #7645

Merged
merged 1 commit into from
Jan 26, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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