fix: use correct server state and improve checks for server running/not running

This commit is contained in:
Botzy 2026-08-13 15:38:51 +03:00
parent e3a622fe88
commit 19a597aa78
6 changed files with 36 additions and 27 deletions

View file

@ -0,0 +1,18 @@
// Copyright (C) 2017-2024 Smart code 203358507
const isStreamingServerNotRunning = (streamingServer: StreamingServer): boolean => (
streamingServer.state === null ||
streamingServer.state.type === 'Err' ||
(streamingServer.state.type === 'Ready' && streamingServer.state.content === 'notRunning')
);
const getStreamingServerWarning = (streamingServer: StreamingServer, profile: Profile): boolean => {
if (!isStreamingServerNotRunning(streamingServer)) {
return false;
}
const dismissedAt = profile.settings.streamingServerWarningDismissed;
return dismissedAt === null || isNaN(dismissedAt.getTime()) || dismissedAt.getTime() < Date.now();
};
export default getStreamingServerWarning;

View file

@ -10,6 +10,7 @@ const { DiscordProvider, useDiscord, EMPTY_DISCORD_TIMESTAMPS, getPlaybackDiscor
const CONSTANTS = require('./CONSTANTS');
const { withCoreSuspender, useCoreSuspender } = require('./CoreSuspender');
const getVisibleChildrenRange = require('./getVisibleChildrenRange');
const { default: getStreamingServerWarning } = require('./getStreamingServerWarning');
const interfaceLanguages = require('./interfaceLanguages.json');
const languageNames = require('./languageNames.json');
const languages = require('./languages');
@ -56,6 +57,7 @@ module.exports = {
withCoreSuspender,
useCoreSuspender,
getVisibleChildrenRange,
getStreamingServerWarning,
interfaceLanguages,
languageNames,
languages,

View file

@ -48,8 +48,9 @@ const usePlayUrl = () => {
const parsed = magnet.decode(trimmed);
if (parsed && typeof parsed.infoHash === 'string') {
const serverReady = streamingServer.settings !== null
&& streamingServer.settings.type === 'Ready';
const serverReady = streamingServer.state !== null
&& streamingServer.state.type === 'Ready'
&& streamingServer.state.content === 'running';
if (!serverReady) {
toast.show({
type: 'error',
@ -63,7 +64,7 @@ const usePlayUrl = () => {
}
return false;
}, [streamingServer.settings, createTorrentFromMagnet]);
}, [streamingServer.state, createTorrentFromMagnet]);
return { handlePlayUrl };
};

View file

@ -15,6 +15,7 @@ const { default: usePlayUrl } = require('stremio/common/usePlayUrl');
const useToast = require('stremio/common/Toast/useToast');
const { withCoreSuspender } = require('stremio/common/CoreSuspender');
const useStreamingServer = require('stremio/common/useStreamingServer');
const { default: getStreamingServerWarning } = require('stremio/common/getStreamingServerWarning');
const styles = require('./styles');
const NavMenuContent = ({ onClick }) => {
@ -27,16 +28,10 @@ const NavMenuContent = ({ onClick }) => {
const toast = useToast();
const [fullscreen, requestFullscreen, exitFullscreen, , supported] = useFullscreen();
const [, isAndroidPWA] = usePWA();
const showStreamingServerWarning = React.useMemo(() => {
return streamingServer.state === null ||
streamingServer.state.type === 'Err' ||
(streamingServer.state.type === 'Ready' && streamingServer.state.content === 'notRunning') ?
(
isNaN(profile.settings.streamingServerWarningDismissed.getTime()) ||
profile.settings.streamingServerWarningDismissed.getTime() < Date.now()
)
: false;
}, [profile.settings, streamingServer.state]);
const showStreamingServerWarning = React.useMemo(
() => getStreamingServerWarning(streamingServer, profile),
[profile.settings, streamingServer.state]
);
const logoutButtonOnClick = React.useCallback(() => {
core.transport.dispatch({
action: 'Ctx',

View file

@ -4,7 +4,7 @@ const React = require('react');
const classnames = require('classnames');
const debounce = require('lodash.debounce');
const useTranslate = require('stremio/common/useTranslate');
const { useStreamingServer, useNotifications, withCoreSuspender, getVisibleChildrenRange, useProfile } = require('stremio/common');
const { useStreamingServer, useNotifications, withCoreSuspender, getVisibleChildrenRange, getStreamingServerWarning, useProfile } = require('stremio/common');
const { ContinueWatchingItem, EventModal, MainNavBars, MetaItem, MetaRow } = require('stremio/components');
const useBoard = require('./useBoard');
const useContinueWatchingPreview = require('./useContinueWatchingPreview');
@ -22,17 +22,10 @@ const Board = () => {
const profile = useProfile();
const boardCatalogsOffset = continueWatchingPreview.items.length > 0 ? 1 : 0;
const scrollContainerRef = React.useRef();
const showStreamingServerWarning = React.useMemo(() => {
return streamingServer.state === null ||
streamingServer.state.type === 'Err' ||
(streamingServer.state.type === 'Ready' && streamingServer.state.content === 'notRunning') ?
(
isNaN(profile.settings.streamingServerWarningDismissed.getTime()) ||
profile.settings.streamingServerWarningDismissed.getTime() < Date.now()
)
: false;
}, [profile.settings, streamingServer.state]);
const showStreamingServerWarning = React.useMemo(
() => getStreamingServerWarning(streamingServer, profile),
[profile.settings, streamingServer.state]
);
const onVisibleRangeChange = React.useCallback(() => {
const range = getVisibleChildrenRange(scrollContainerRef.current);
if (range === null) {

View file

@ -23,8 +23,8 @@ const Item = ({ url }: Props) => {
const selected = useMemo(() => profile.settings.streamingServerUrl === url, [url, profile.settings]);
const defaultUrl = useMemo(() => url === DEFAULT_STREAMING_SERVER_URL, [url]);
const serverReady = useMemo(() => streamingServer.state?.type === 'Ready' && streamingServer.state.content === 'running', [streamingServer]);
const serverError = useMemo(() => streamingServer.state?.type === 'Err' || (streamingServer.state?.type === 'Ready' && streamingServer.state.content === 'notRunning'), [streamingServer]);
const serverReady = useMemo(() => streamingServer.state?.type === 'Ready' && streamingServer.state.content === 'running', [streamingServer.state]);
const serverError = useMemo(() => streamingServer.state?.type === 'Err' || (streamingServer.state?.type === 'Ready' && streamingServer.state.content === 'notRunning'), [streamingServer.state]);
const handleDelete = useCallback(() => {
deleteServerUrl(url);