Skip to content

Commit 94e7b5b

Browse files
authored
refactor: pull in changes from mv3-ltl branch (#193)
* refactor: pull in changes from mv3-ltl branch * chore: remove null actualPort spread --------- Co-authored-by: arkon <arkon@users.noreply.github.com>
1 parent faa1b44 commit 94e7b5b

3 files changed

Lines changed: 43 additions & 19 deletions

File tree

src/scripts/chat-background.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,25 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
2626
});
2727

2828
chrome.runtime.onConnect.addListener(hc => {
29-
// frameId and tabId should be int
3029
const { frameId, tabId } = JSON.parse(hc.name) as { frameId: number, tabId: number };
3130
const interceptorPort = chrome.tabs.connect(tabId, { frameId });
32-
interceptorPort.onMessage.addListener(msg => {
31+
32+
const onInterceptorMessage = (msg: any): void => {
3333
hc.postMessage(msg);
34+
};
35+
interceptorPort.onMessage.addListener(onInterceptorMessage);
36+
interceptorPort.onDisconnect.addListener(() => {
37+
interceptorPort.onMessage.removeListener(onInterceptorMessage);
38+
hc.disconnect();
3439
});
35-
hc.onMessage.addListener(msg => {
40+
41+
const onHcMessage = (msg: any): void => {
3642
interceptorPort.postMessage(msg);
43+
};
44+
hc.onMessage.addListener(onHcMessage);
45+
hc.onDisconnect.addListener(() => {
46+
hc.onMessage.removeListener(onHcMessage);
47+
interceptorPort.disconnect();
3748
});
3849
});
3950

src/scripts/chat-injector.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,18 @@ const hcWarning = 'An existing HyperChat button has been detected. This ' +
1717
'Having multiple instances of the same scripts running WILL cause ' +
1818
'problems such as chat messages not loading.';
1919

20+
const getScriptURL = (path: string): string => {
21+
if (isLiveTL) {
22+
return chrome.runtime.getURL('submodules/chat/src/scripts/' + path);
23+
}
24+
return chrome.runtime.getURL('scripts/' + path);
25+
};
26+
2027
const chatLoaded = async (): Promise<void> => {
2128
if (!isLiveTL && checkInjected(hcWarning)) return;
2229

2330
const metagetter = document.createElement('script');
24-
metagetter.src = chrome.runtime.getURL('scripts/chat-metagetter.js');
31+
metagetter.src = getScriptURL('chat-metagetter.js');
2532
const ytcfg: any = await new Promise((resolve) => {
2633
window.addEventListener('fetchMeta', (event) => {
2734
resolve(JSON.parse((event as any).detail as string));
@@ -39,7 +46,7 @@ const chatLoaded = async (): Promise<void> => {
3946
processSentMessage((d as CustomEvent).detail);
4047
});
4148
const script = document.createElement('script');
42-
script.src = chrome.runtime.getURL('scripts/chat-interceptor.js');
49+
script.src = getScriptURL('chat-interceptor.js');
4350
document.body.appendChild(script);
4451

4552
// Handle initial data

src/ts/chat-utils.ts

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -70,24 +70,30 @@ export const checkInjected = (error: string): boolean => {
7070
return false;
7171
};
7272

73-
export const useReconnect = <T extends Chat.Port>(connect: () => T): T & { destroy: () => void } => {
74-
let actualPort = connect();
75-
const onDisconnect = (): void => {
76-
actualPort = connect();
77-
actualPort.onDisconnect.addListener(onDisconnect);
73+
type ReconnectingPort<T extends Chat.Port> =
74+
Partial<Pick<T, 'name' | 'disconnect' | 'postMessage' | 'onMessage' | 'onDisconnect'>> &
75+
{ destroy: () => void };
76+
77+
export const useReconnect = <T extends Chat.Port>(connect: () => Promise<T>): ReconnectingPort<T> => {
78+
let actualPort: T | null = null;
79+
80+
const doConnect = async (): Promise<void> => {
81+
actualPort = await connect();
82+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
83+
actualPort.onDisconnect.addListener(doConnect);
7884
};
79-
actualPort.onDisconnect.addListener(onDisconnect);
85+
void doConnect();
8086

8187
return {
82-
...actualPort,
83-
get name() { return actualPort.name; },
84-
disconnect(...args) { return actualPort.disconnect(...args); },
85-
postMessage(...args) { return actualPort.postMessage(...args); },
86-
get onMessage() { return actualPort.onMessage; },
87-
get onDisconnect() { return actualPort.onDisconnect; },
88+
get name() { return actualPort?.name; },
89+
disconnect(...args) { return actualPort?.disconnect(...args); },
90+
postMessage(...args) { return actualPort?.postMessage(...args); },
91+
get onMessage() { return actualPort?.onMessage; },
92+
get onDisconnect() { return actualPort?.onDisconnect; },
8893
destroy: () => {
89-
actualPort.onDisconnect.removeListener(onDisconnect);
90-
actualPort.disconnect();
94+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
95+
actualPort?.onDisconnect.removeListener(doConnect);
96+
actualPort?.disconnect();
9197
}
9298
};
9399
};

0 commit comments

Comments
 (0)