Streaming server model adapted to core

This commit is contained in:
nklhrstv 2020-02-15 12:07:16 +02:00
parent 8a51046b37
commit 6ef88f0609
6 changed files with 60 additions and 74 deletions

View file

@ -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
};

View file

@ -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;

View file

@ -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']}>

View file

@ -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,

View 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;

View file

@ -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 };
};