mirror of
https://github.com/Stremio/stremio-web.git
synced 2026-03-11 21:27:05 +00:00
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:
commit
36efe4bf3e
2 changed files with 17 additions and 4 deletions
|
|
@ -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
11
src/types/global.d.ts
vendored
|
|
@ -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 {};
|
||||
|
|
|
|||
Loading…
Reference in a new issue