Merge pull request #852 from Stremio/fix/shell-player-stuck

Player(Shell): fix issue where player couldn't play any stream
This commit is contained in:
Tim 2025-02-27 23:04:01 +01:00 committed by GitHub
commit 36efe4bf3e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 17 additions and 4 deletions

View file

@ -2,7 +2,7 @@ import { useEffect } from 'react';
import EventEmitter from 'eventemitter3';
const SHELL_EVENT_OBJECT = 'transport';
const transport = globalThis?.qt?.webChannelTransport;
const transport = globalThis?.chrome?.webview;
const events = new EventEmitter();
enum ShellEventType {
@ -30,7 +30,7 @@ const useShell = () => {
const send = (method: string, ...args: (string | number)[]) => {
try {
transport?.send(JSON.stringify({
transport?.postMessage(JSON.stringify({
id: createId(),
type: ShellEventType.INVOKE_METHOD,
object: SHELL_EVENT_OBJECT,
@ -45,10 +45,9 @@ const useShell = () => {
useEffect(() => {
if (!transport) return;
transport.onmessage = ({ data }) => {
const onMessage = ({ data }: { data: string }) => {
try {
const { type, args } = JSON.parse(data) as ShellEvent;
if (type === ShellEventType.SIGNAL) {
const [methodName, methodArg] = args;
events.emit(methodName, methodArg);
@ -57,6 +56,9 @@ const useShell = () => {
console.error('Shell', 'Failed to handle event', e);
}
};
transport.addEventListener('message', onMessage);
return () => transport.removeEventListener('message', onMessage);
}, []);
return {

11
src/types/global.d.ts vendored
View file

@ -13,8 +13,19 @@ interface Qt {
webChannelTransport: QtTransport,
}
interface ChromeWebView {
addEventListener: (type: 'message', listenenr: (event: any) => void) => void,
removeEventListener: (type: 'message', listenenr: (event: any) => void) => void,
postMessage: (message: string) => void,
}
interface Chrome {
webview: ChromeWebView,
}
declare global {
var qt: Qt | undefined;
var chrome: Chrome | undefined;
}
export {};