mirror of
https://github.com/Stremio/stremio-web.git
synced 2026-03-11 21:27:05 +00:00
Streaming server model adapted to core
This commit is contained in:
parent
8a51046b37
commit
6ef88f0609
6 changed files with 60 additions and 74 deletions
|
|
@ -28,7 +28,6 @@ const useInLibrary = require('./useInLibrary');
|
|||
const useLiveRef = require('./useLiveRef');
|
||||
const useModelState = require('./useModelState');
|
||||
const useProfile = require('./useProfile');
|
||||
const useStreamingServer = require('./useStreamingServer');
|
||||
|
||||
module.exports = {
|
||||
AddonDetailsModal,
|
||||
|
|
@ -62,5 +61,4 @@ module.exports = {
|
|||
useLiveRef,
|
||||
useModelState,
|
||||
useProfile,
|
||||
useStreamingServer
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,23 +0,0 @@
|
|||
const React = require('react');
|
||||
const { useServices } = require('stremio/services');
|
||||
const useModelState = require('stremio/common/useModelState');
|
||||
|
||||
const mapStreamingServerState = (ctx) => {
|
||||
return ctx.streaming_server;
|
||||
};
|
||||
|
||||
const useStreamingServer = () => {
|
||||
const { core } = useServices();
|
||||
const initStreamingServer = React.useCallback(() => {
|
||||
const ctx = core.getState('ctx');
|
||||
return mapStreamingServerState(ctx);
|
||||
}, []);
|
||||
const streamingServer = useModelState({
|
||||
model: 'ctx',
|
||||
init: initStreamingServer,
|
||||
map: mapStreamingServerState
|
||||
});
|
||||
return streamingServer;
|
||||
};
|
||||
|
||||
module.exports = useStreamingServer;
|
||||
|
|
@ -3,7 +3,8 @@ const classnames = require('classnames');
|
|||
const throttle = require('lodash.throttle');
|
||||
const Icon = require('stremio-icons/dom');
|
||||
const { useServices } = require('stremio/services');
|
||||
const { Button, Checkbox, NavBar, Multiselect, ColorInput, useProfile, useStreamingServer } = require('stremio/common');
|
||||
const { Button, Checkbox, NavBar, Multiselect, ColorInput, useProfile } = require('stremio/common');
|
||||
const useStreamingServer = require('./useStreamingServer');
|
||||
const useProfileSettingsInputs = require('./useProfileSettingsInputs');
|
||||
const useStreamingServerSettingsInputs = require('./useStreamingServerSettingsInputs');
|
||||
const styles = require('./styles');
|
||||
|
|
@ -15,7 +16,7 @@ const STREAMING_SECTION = 'streaming';
|
|||
const Settings = () => {
|
||||
const { core } = useServices();
|
||||
const profile = useProfile();
|
||||
const streaminServer = useStreamingServer();
|
||||
const streamingServer = useStreamingServer();
|
||||
const {
|
||||
interfaceLanguageSelect,
|
||||
subtitlesLanguageSelect,
|
||||
|
|
@ -27,11 +28,11 @@ const Settings = () => {
|
|||
playInBackgroundCheckbox,
|
||||
playInExternalPlayerCheckbox,
|
||||
hardwareDecodingCheckbox
|
||||
} = useProfileSettingsInputs();
|
||||
} = useProfileSettingsInputs(profile);
|
||||
const {
|
||||
cacheSizeSelect,
|
||||
torrentProfileSelect
|
||||
} = useStreamingServerSettingsInputs();
|
||||
} = useStreamingServerSettingsInputs(streamingServer);
|
||||
const logoutButtonOnClick = React.useCallback(() => {
|
||||
core.dispatch({
|
||||
action: 'Ctx',
|
||||
|
|
@ -54,9 +55,9 @@ const Settings = () => {
|
|||
}, []);
|
||||
const reloadStreamingServer = React.useCallback(() => {
|
||||
core.dispatch({
|
||||
action: 'Ctx',
|
||||
action: 'StreamingServer',
|
||||
args: {
|
||||
action: 'ReloadStreamingServer'
|
||||
action: 'Reload'
|
||||
}
|
||||
});
|
||||
}, []);
|
||||
|
|
@ -121,8 +122,8 @@ const Settings = () => {
|
|||
<div className={styles['spacing']} />
|
||||
<div className={styles['version-info-label']}>App Version: {process.env.VERSION}</div>
|
||||
{
|
||||
streaminServer.type === 'Ready' ?
|
||||
<div className={styles['version-info-label']}>Server Version: {streaminServer.settings.serverVersion}</div>
|
||||
streamingServer.settings !== null && streamingServer.settings.type === 'Ready' ?
|
||||
<div className={styles['version-info-label']}>Server Version: {streamingServer.settings.content.serverVersion}</div>
|
||||
:
|
||||
null
|
||||
}
|
||||
|
|
@ -337,32 +338,30 @@ const Settings = () => {
|
|||
<div className={classnames(styles['option-input-container'], styles['info-container'])}>
|
||||
<div className={styles['label']}>
|
||||
{
|
||||
streaminServer.type === 'Ready' ?
|
||||
'Online'
|
||||
streamingServer.settings === null ?
|
||||
'NotLoaded'
|
||||
:
|
||||
streaminServer.type === 'Error' ?
|
||||
`Error: (${streaminServer.error})`
|
||||
streamingServer.settings.type === 'Ready' ?
|
||||
'Online'
|
||||
:
|
||||
streaminServer.type
|
||||
streamingServer.settings.type === 'Error' ?
|
||||
`Error: (${streamingServer.settings.content})`
|
||||
:
|
||||
streamingServer.settings.type
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{
|
||||
streaminServer.type === 'Ready' ?
|
||||
<div className={styles['option-container']}>
|
||||
<div className={styles['option-name-container']}>
|
||||
<div className={styles['label']}>Base Url</div>
|
||||
</div>
|
||||
<div className={classnames(styles['option-input-container'], styles['info-container'], styles['selectable'])}>
|
||||
<div className={styles['label']}>
|
||||
{streaminServer.base_url}
|
||||
</div>
|
||||
</div>
|
||||
<div className={styles['option-container']}>
|
||||
<div className={styles['option-name-container']}>
|
||||
<div className={styles['label']}>Url</div>
|
||||
</div>
|
||||
<div className={classnames(styles['option-input-container'], styles['info-container'], styles['selectable'])}>
|
||||
<div className={styles['label']}>
|
||||
{profile.settings.streaming_server_url}
|
||||
</div>
|
||||
:
|
||||
null
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
{
|
||||
cacheSizeSelect !== null ?
|
||||
<div className={styles['option-container']}>
|
||||
|
|
|
|||
|
|
@ -1,13 +1,11 @@
|
|||
const React = require('react');
|
||||
const { useServices } = require('stremio/services');
|
||||
const { useProfile } = require('stremio/common');
|
||||
const languages = require('./languages');
|
||||
|
||||
const SUBTITLES_SIZES = [75, 100, 125, 150, 175, 200, 250];
|
||||
|
||||
const useProfileSettingsInputs = () => {
|
||||
const useProfileSettingsInputs = (profile) => {
|
||||
const { core } = useServices();
|
||||
const profile = useProfile();
|
||||
const interfaceLanguageSelect = React.useMemo(() => ({
|
||||
options: Object.keys(languages).map((code) => ({
|
||||
value: code,
|
||||
|
|
|
|||
16
src/routes/Settings/useStreamingServer.js
Normal file
16
src/routes/Settings/useStreamingServer.js
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
const { useModelState } = require('stremio/common');
|
||||
|
||||
const initStreamingServer = () => ({
|
||||
selected: null,
|
||||
settings: null
|
||||
});
|
||||
|
||||
const useStreamingServer = () => {
|
||||
const streamingServer = useModelState({
|
||||
model: 'streaming_server',
|
||||
init: initStreamingServer,
|
||||
});
|
||||
return streamingServer;
|
||||
};
|
||||
|
||||
module.exports = useStreamingServer;
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
const React = require('react');
|
||||
const isEqual = require('lodash.isequal');
|
||||
const { useServices } = require('stremio/services');
|
||||
const { useStreamingServer } = require('stremio/common');
|
||||
|
||||
const CACHE_SIZES = [0, 2147483648, 5368709120, 10737418240, null];
|
||||
|
||||
|
|
@ -42,11 +41,10 @@ const TORRENT_PROFILES = {
|
|||
}
|
||||
};
|
||||
|
||||
const useStreaminServerSettingsInputs = () => {
|
||||
const useStreaminServerSettingsInputs = (streaminServer) => {
|
||||
const { core } = useServices();
|
||||
const streaminServer = useStreamingServer();
|
||||
const cacheSizeSelect = React.useMemo(() => {
|
||||
if (streaminServer.type !== 'Ready') {
|
||||
if (streaminServer.settings === null || streaminServer.settings.type !== 'Ready') {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
@ -55,36 +53,36 @@ const useStreaminServerSettingsInputs = () => {
|
|||
label: cacheSizeToString(size),
|
||||
value: JSON.stringify(size)
|
||||
})),
|
||||
selected: [JSON.stringify(streaminServer.settings.cacheSize)],
|
||||
selected: [JSON.stringify(streaminServer.settings.content.cacheSize)],
|
||||
renderLabelText: () => {
|
||||
return cacheSizeToString(streaminServer.settings.cacheSize);
|
||||
return cacheSizeToString(streaminServer.settings.content.cacheSize);
|
||||
},
|
||||
onSelect: (event) => {
|
||||
core.dispatch({
|
||||
action: 'Ctx',
|
||||
action: 'StreamingServer',
|
||||
args: {
|
||||
action: 'UpdateSettings',
|
||||
args: {
|
||||
...streaminServer.settings,
|
||||
...streaminServer.settings.content,
|
||||
cacheSize: JSON.parse(event.value)
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}, [streaminServer.type, streaminServer.settings]);
|
||||
}, [streaminServer.settings]);
|
||||
const torrentProfileSelect = React.useMemo(() => {
|
||||
if (streaminServer.type !== 'Ready') {
|
||||
if (streaminServer.settings === null || streaminServer.settings.type !== 'Ready') {
|
||||
return null;
|
||||
}
|
||||
|
||||
const selectedTorrentProfile = {
|
||||
btDownloadSpeedHardLimit: streaminServer.settings.btDownloadSpeedHardLimit,
|
||||
btDownloadSpeedSoftLimit: streaminServer.settings.btDownloadSpeedSoftLimit,
|
||||
btHandshakeTimeout: streaminServer.settings.btHandshakeTimeout,
|
||||
btMaxConnections: streaminServer.settings.btMaxConnections,
|
||||
btMinPeersForStable: streaminServer.settings.btMinPeersForStable,
|
||||
btRequestTimeout: streaminServer.settings.btRequestTimeout
|
||||
btDownloadSpeedHardLimit: streaminServer.settings.content.btDownloadSpeedHardLimit,
|
||||
btDownloadSpeedSoftLimit: streaminServer.settings.content.btDownloadSpeedSoftLimit,
|
||||
btHandshakeTimeout: streaminServer.settings.content.btHandshakeTimeout,
|
||||
btMaxConnections: streaminServer.settings.content.btMaxConnections,
|
||||
btMinPeersForStable: streaminServer.settings.content.btMinPeersForStable,
|
||||
btRequestTimeout: streaminServer.settings.content.btRequestTimeout
|
||||
};
|
||||
const isCustomTorrentProfileSelected = Object.values(TORRENT_PROFILES).every((torrentProfile) => {
|
||||
return !isEqual(torrentProfile, selectedTorrentProfile);
|
||||
|
|
@ -116,18 +114,18 @@ const useStreaminServerSettingsInputs = () => {
|
|||
},
|
||||
onSelect: (event) => {
|
||||
core.dispatch({
|
||||
action: 'Ctx',
|
||||
action: 'StreamingServer',
|
||||
args: {
|
||||
action: 'UpdateSettings',
|
||||
args: {
|
||||
...streaminServer.settings,
|
||||
...streaminServer.settings.content,
|
||||
...JSON.parse(event.value)
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}, [streaminServer.type, streaminServer.settings]);
|
||||
}, [streaminServer.settings]);
|
||||
return { cacheSizeSelect, torrentProfileSelect };
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue