Skip to content

Commit bb356f6

Browse files
committed
Merge development into feat/discord-rich-presence
2 parents ce3d3c2 + 87ccc59 commit bb356f6

57 files changed

Lines changed: 423 additions & 517 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "stremio",
33
"displayName": "Stremio",
4-
"version": "5.0.0-beta.36",
4+
"version": "5.0.0-beta.37",
55
"author": "Smart Code OOD",
66
"private": true,
77
"license": "gpl-2.0",
@@ -17,7 +17,7 @@
1717
"@babel/runtime": "7.29.2",
1818
"@sentry/browser": "8.42.0",
1919
"@stremio/stremio-colors": "5.2.0",
20-
"@stremio/stremio-core-web": "0.57.0",
20+
"@stremio/stremio-core-web": "0.58.0",
2121
"@stremio/stremio-icons": "5.10.0",
2222
"@stremio/stremio-video": "0.0.79",
2323
"a-color-picker": "1.2.1",

pnpm-lock.yaml

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/App/App.js

Lines changed: 33 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ const React = require('react');
55
const { useTranslation } = require('react-i18next');
66
const { useCore } = require('stremio/core');
77
const { Router } = require('stremio-router');
8-
const { Shell, Chromecast, Discord, ServicesProvider, GamepadProvider } = require('stremio/services');
8+
const { Chromecast, Discord, ServicesProvider, GamepadProvider } = require('stremio/services');
99
const { NotFound } = require('stremio/routes');
10-
const { FullscreenProvider, PlatformProvider, ToastProvider, TooltipProvider, ShortcutsProvider, DiscordProvider, CONSTANTS, useShell, useBinaryState, useProfile, withCoreSuspender, onFileDrop } = require('stremio/common');
10+
const { FullscreenProvider, ToastProvider, TooltipProvider, ShortcutsProvider, DiscordProvider, CONSTANTS, useBinaryState, useProfile, withCoreSuspender, onFileDrop, usePlatform } = require('stremio/common');
1111
const ServicesToaster = require('./ServicesToaster');
1212
const DeepLinkHandler = require('./DeepLinkHandler');
1313
const SearchParamsHandler = require('./SearchParamsHandler');
@@ -24,14 +24,13 @@ const App = () => {
2424
const core = useCore();
2525
const profile = useProfile();
2626
const { i18n } = useTranslation();
27-
const shell = useShell();
27+
const { shell } = usePlatform();
2828
const [gamepadSupportEnabled, setGamepadSupportEnabled] = React.useState(false);
2929
const onPathNotMatch = React.useCallback(() => {
3030
return NotFound;
3131
}, []);
3232
const services = React.useMemo(() => {
3333
return {
34-
shell: new Shell(),
3534
discord: new Discord(),
3635
chromecast: new Chromecast(),
3736
};
@@ -100,13 +99,11 @@ const App = () => {
10099
}
101100
};
102101
services.chromecast.on('stateChanged', onChromecastStateChange);
103-
services.shell.start();
104102
services.chromecast.start();
105-
services.discord.init(services.shell);
103+
services.discord.init(shell);
106104

107105
window.services = services;
108106
return () => {
109-
services.shell.stop();
110107
services.chromecast.stop();
111108
services.chromecast.off('stateChanged', onChromecastStateChange);
112109
};
@@ -146,10 +143,10 @@ const App = () => {
146143
setGamepadSupportEnabled(profile.settings.gamepadSupport);
147144
}
148145

149-
if (profile.settings?.quitOnClose && shell.windowClosed) {
146+
if (profile.settings?.quitOnClose && shell.state.windowClosed) {
150147
shell.send('quit');
151148
}
152-
}, [profile.settings, shell.windowClosed]);
149+
}, [profile.settings, shell.state.windowClosed]);
153150

154151
React.useEffect(() => {
155152
const onWindowFocus = () => {
@@ -190,35 +187,33 @@ const App = () => {
190187

191188
return (
192189
<ServicesProvider services={services}>
193-
<PlatformProvider>
194-
<ToastProvider className={styles['toasts-container']}>
195-
<TooltipProvider className={styles['tooltip-container']}>
196-
<GamepadProvider enabled={gamepadSupportEnabled} onGuide={toggleGamepadModal}>
197-
<ShortcutsProvider onShortcut={onShortcut}>
198-
<FullscreenProvider>
199-
<DiscordProvider>
200-
{
201-
shortcutModalOpen && <ShortcutsModal onClose={closeShortcutsModal}/>
202-
}
203-
{
204-
gamepadModalOpen && <GamepadModal onClose={closeGamepadModal}/>
205-
}
206-
<ServicesToaster />
207-
<DeepLinkHandler />
208-
<SearchParamsHandler />
209-
<UpdaterBanner className={styles['updater-banner-container']} />
210-
<RouterWithProtectedRoutes
211-
className={styles['router']}
212-
viewsConfig={routerViewsConfig}
213-
onPathNotMatch={onPathNotMatch}
214-
/>
215-
</DiscordProvider>
216-
</FullscreenProvider>
217-
</ShortcutsProvider>
218-
</GamepadProvider>
219-
</TooltipProvider>
220-
</ToastProvider>
221-
</PlatformProvider>
190+
<ToastProvider className={styles['toasts-container']}>
191+
<TooltipProvider className={styles['tooltip-container']}>
192+
<GamepadProvider enabled={gamepadSupportEnabled} onGuide={toggleGamepadModal}>
193+
<ShortcutsProvider onShortcut={onShortcut}>
194+
<FullscreenProvider>
195+
<DiscordProvider>
196+
{
197+
shortcutModalOpen && <ShortcutsModal onClose={closeShortcutsModal}/>
198+
}
199+
{
200+
gamepadModalOpen && <GamepadModal onClose={closeGamepadModal}/>
201+
}
202+
<ServicesToaster />
203+
<DeepLinkHandler />
204+
<SearchParamsHandler />
205+
<UpdaterBanner className={styles['updater-banner-container']} />
206+
<RouterWithProtectedRoutes
207+
className={styles['router']}
208+
viewsConfig={routerViewsConfig}
209+
onPathNotMatch={onPathNotMatch}
210+
/>
211+
</DiscordProvider>
212+
</FullscreenProvider>
213+
</ShortcutsProvider>
214+
</GamepadProvider>
215+
</TooltipProvider>
216+
</ToastProvider>
222217
</ServicesProvider>
223218
);
224219
};

src/App/UpdaterBanner/UpdaterBanner.tsx

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import React, { useEffect } from 'react';
22
import Icon from '@stremio/stremio-icons/react';
33
import { useTranslation } from 'react-i18next';
4-
import { useServices } from 'stremio/services';
5-
import { useBinaryState, useShell } from 'stremio/common';
4+
import { useBinaryState, usePlatform } from 'stremio/common';
65
import { Button, Transition } from 'stremio/components';
76
import styles from './UpdaterBanner.less';
87

@@ -12,19 +11,18 @@ type Props = {
1211

1312
const UpdaterBanner = ({ className }: Props) => {
1413
const { t } = useTranslation();
15-
const { shell } = useServices();
16-
const shellTransport = useShell();
14+
const { shell } = usePlatform();
1715
const [visible, show, hide] = useBinaryState(false);
1816

1917
const onInstallClick = () => {
20-
shellTransport.send('autoupdater-notif-clicked');
18+
shell.send('autoupdater-notif-clicked');
2119
};
2220

2321
useEffect(() => {
24-
shell.transport && shell.transport.on('autoupdater-show-notif', show);
22+
shell.on('autoupdater-show-notif', show);
2523

2624
return () => {
27-
shell.transport && shell.transport.off('autoupdater-show-notif', show);
25+
shell.off('autoupdater-show-notif', show);
2826
};
2927
}, []);
3028

src/common/Fullscreen/FullscreenProvider.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
44
import { withCoreSuspender } from '../CoreSuspender';
55
import onShortcut from '../Shortcuts/onShortcut';
66
import useSettings from '../useSettings';
7-
import useShell, { type WindowVisibility } from '../useShell';
87
import FullscreenContext, { type FullscreenContextValue } from './FullscreenContext';
8+
import { usePlatform } from '../Platform';
99

1010
type Props = {
1111
children: React.ReactNode,
@@ -15,7 +15,7 @@ const hasWebkitFullscreen = typeof HTMLVideoElement !== 'undefined' &&
1515
typeof HTMLVideoElement.prototype.webkitEnterFullscreen === 'function';
1616

1717
const FullscreenProvider = ({ children }: Props) => {
18-
const shell = useShell();
18+
const { shell } = usePlatform();
1919
const [settings] = useSettings();
2020
const escExitFullscreen = settings.escExitFullscreen;
2121

src/common/Platform/Platform.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import React, { createContext, useContext } from 'react';
22
import { WHITELISTED_HOSTS } from 'stremio/common/CONSTANTS';
33
import { name, isMobile } from './device';
4+
import useShell from './shell/useShell';
45

56
interface PlatformContext {
67
name: string;
78
isMobile: boolean;
9+
shell: Shell;
810
openExternal: (url: string) => void;
911
}
1012

@@ -15,6 +17,8 @@ type Props = {
1517
};
1618

1719
const PlatformProvider = ({ children }: Props) => {
20+
const shell = useShell();
21+
1822
const openExternal = (url: string) => {
1923
try {
2024
const { hostname } = new URL(url);
@@ -30,7 +34,7 @@ const PlatformProvider = ({ children }: Props) => {
3034
};
3135

3236
return (
33-
<PlatformContext.Provider value={{ openExternal, name, isMobile }}>
37+
<PlatformContext.Provider value={{ openExternal, shell, name, isMobile }}>
3438
{children}
3539
</PlatformContext.Provider>
3640
);
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ type QtTransportMessage = {
33
};
44

55
interface QtTransport {
6-
send: (message: string) => void,
76
onmessage: (message: QtTransportMessage) => void,
87
}
98

@@ -22,8 +21,8 @@ interface Chrome {
2221
}
2322

2423
declare global {
25-
var qt: Qt | undefined;
24+
var qt: Qt;
2625
var chrome: Chrome | undefined;
2726
}
2827

29-
export { };
28+
export {};
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
type WindowVisibility = {
2+
visible: boolean;
3+
visibility: number;
4+
isFullscreen: boolean;
5+
};
6+
7+
type WindowState = {
8+
state: number;
9+
};
10+
11+
type MediaStatus = {
12+
paused: boolean;
13+
};
14+
15+
interface Shell {
16+
active: boolean,
17+
state: ShellState,
18+
on: (name: string, listener: (arg: any) => void) => void;
19+
off: (name: string, listener: (arg: any) => void) => void;
20+
send: (method: string, ...args: (string | number | object)[]) => void;
21+
}
22+
23+
type ShellState = {
24+
version: string | null;
25+
windowClosed: boolean;
26+
windowHidden: boolean;
27+
};

0 commit comments

Comments
 (0)