Skip to content

Commit b7f9104

Browse files
committed
Fixes for betterScreenshareFix, untested on linux but hopeful
1 parent a140f41 commit b7f9104

1 file changed

Lines changed: 54 additions & 15 deletions

File tree

plugins/betterScreenshareFix/index.jsx

Lines changed: 54 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ const {
1111
solid: { onCleanup },
1212
} = shelter;
1313

14+
const CLEANUP_LISTENER_ID = "shelter-bsf-cleanup";
15+
1416
let originalPremiumType = null;
17+
let layoutToggleActive = false;
1518

1619
function patchNiterState() {
1720
const user = UserStore.getCurrentUser();
@@ -31,34 +34,70 @@ function restoreNiterState() {
3134
originalPremiumType = null;
3235
}
3336

34-
function CleanupListener() {
37+
function hasCleanupListener(node) {
38+
return node?.querySelector?.(`#${CLEANUP_LISTENER_ID}`) !== null;
39+
}
40+
41+
function CleanupListener(props) {
3542
onCleanup(() => {
43+
if (!props?.isLayoutToggle && layoutToggleActive) {
44+
return;
45+
}
46+
if (props?.isLayoutToggle) {
47+
layoutToggleActive = false;
48+
}
49+
props?.onCleanup?.();
3650
restoreNiterState();
3751
});
3852

39-
return <div style={{ display: "none" }} />;
53+
props?.onMount?.();
54+
55+
return <div id={CLEANUP_LISTENER_ID} style={{ display: "none" }} />;
56+
}
57+
58+
function injectCleanupListener(node, props = {}) {
59+
if (hasCleanupListener(node)) {
60+
return false;
61+
}
62+
node.append(
63+
<ReactiveRoot>
64+
<CleanupListener {...props} />
65+
</ReactiveRoot>,
66+
);
67+
return true;
4068
}
4169

4270
export function onLoad() {
4371
subscribe("TRACK", (e) => {
44-
if (
45-
e.event === "impression_go_live_modal" ||
46-
(e.event == "open_modal" && e.properties.type == "Go Live Modal") ||
47-
e.event === "impression_call_tile_context_menu"
48-
) {
49-
const searchQuery =
50-
e.event == "impression_call_tile_context_menu" ? "#stream-context" : "[class*='focusLock'] > div";
51-
patchNiterState();
72+
const callButtonClicked = e.event === "call_button_clicked";
73+
const callMenuItemClicked = e.event === "call_menu_item_interacted";
74+
const streamButtonClicked = callButtonClicked && e.properties.button_name === "Stream";
75+
const streamSettingsButtonClicked = callButtonClicked && e.properties.button_name === "Stream Settings";
76+
const changeStreamButtonClicked = callMenuItemClicked && e.properties.menu_name === "ManageStreamsButton";
77+
const videoLayoutToggled = e.event === "video_layout_toggled";
78+
79+
if (streamButtonClicked || streamSettingsButtonClicked || changeStreamButtonClicked) {
80+
const searchQuery = streamSettingsButtonClicked ? "#manage-streams" : "[class*='scrim']";
5281
const stopObserving = observeDom(searchQuery, (node) => {
5382
stopObserving();
54-
node.parentNode.append(
55-
<ReactiveRoot>
56-
<CleanupListener />
57-
</ReactiveRoot>,
58-
);
83+
if (injectCleanupListener(node)) {
84+
patchNiterState();
85+
}
5986
});
6087
setTimeout(stopObserving, 500);
6188
}
89+
90+
if (videoLayoutToggled) {
91+
const callContainer = document.querySelector("[class*='callContainer']");
92+
if (!callContainer) {
93+
return;
94+
}
95+
96+
layoutToggleActive = true;
97+
if (injectCleanupListener(callContainer, { isLayoutToggle: true })) {
98+
patchNiterState();
99+
}
100+
}
62101
});
63102
}
64103

0 commit comments

Comments
 (0)