Skip to content

Commit c323d64

Browse files
fix: port disconnecting
1 parent d74f733 commit c323d64

1 file changed

Lines changed: 31 additions & 13 deletions

File tree

src/sidepanel.ts

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ import "@material/web/icon/icon.js";
88
import { ArgoArchiveList } from "./argo-archive-list";
99
import { Downloader } from "./sw/downloader";
1010

11-
import wrRec from "./assets/icons/recLogo.svg";
12-
1311
import {
1412
getLocalOption,
1513
// removeLocalOption,
@@ -429,22 +427,42 @@ class ArgoViewer extends LitElement {
429427
});
430428
}
431429

432-
registerMessages() {
433-
// @ts-expect-error - TS2339 - Property 'port' does not exist on type 'ArgoViewer'.
430+
private connectPort() {
431+
// if already connected, do nothing
432+
// @ts-expect-error
433+
if (this.port) return;
434+
// @ts-expect-error
434435
this.port = chrome.runtime.connect({ name: "sidepanel-port" });
436+
// @ts-expect-error
437+
this.port.onMessage.addListener((msg) => this.onMessage(msg));
438+
// @ts-expect-error
439+
this.port.onDisconnect.addListener(() => {
440+
// clear so next sendMessage() will reconnect
441+
console.warn("Port disconnected, will reconnect on next send.");
442+
// @ts-expect-error
443+
this.port = null;
444+
});
445+
}
435446

447+
registerMessages() {
448+
this.connectPort();
436449
this.updateTabInfo();
437-
438-
// @ts-expect-error - TS2339 - Property 'port' does not exist on type 'ArgoViewer'.
439-
this.port.onMessage.addListener((message) => {
440-
this.onMessage(message);
441-
});
442450
}
443451

444-
// @ts-expect-error - TS7006 - Parameter 'message' implicitly has an 'any' type.
445-
sendMessage(message) {
446-
// @ts-expect-error - TS2339 - Property 'port' does not exist on type 'ArgoViewer'.
447-
this.port.postMessage(message);
452+
private sendMessage(message: any) {
453+
// reconnect if needed
454+
// @ts-expect-error
455+
if (!this.port) this.connectPort();
456+
try {
457+
// @ts-expect-error
458+
this.port!.postMessage(message);
459+
} catch (e) {
460+
console.warn(
461+
"Port died while sending, retrying via chrome.runtime.sendMessage",
462+
e,
463+
);
464+
chrome.runtime.sendMessage(message);
465+
}
448466
}
449467
// @ts-expect-error - TS7006 - Parameter 'message' implicitly has an 'any' type.
450468
async onMessage(message) {

0 commit comments

Comments
 (0)