mirror of
https://github.com/Stremio/stremio-web.git
synced 2026-04-21 07:32:02 +00:00
added esc key and short shift rewind
This commit is contained in:
parent
eb682fd8c3
commit
05321aa103
4 changed files with 65 additions and 1 deletions
|
|
@ -4,6 +4,7 @@ const CHROMECAST_RECEIVER_APP_ID = '1634F54B';
|
||||||
const SUBTITLES_SIZES = [75, 100, 125, 150, 175, 200, 250];
|
const SUBTITLES_SIZES = [75, 100, 125, 150, 175, 200, 250];
|
||||||
const SUBTITLES_FONTS = ['PlusJakartaSans', 'Arial', 'Halvetica', 'Times New Roman', 'Verdana', 'Courier', 'Lucida Console', 'sans-serif', 'serif', 'monospace'];
|
const SUBTITLES_FONTS = ['PlusJakartaSans', 'Arial', 'Halvetica', 'Times New Roman', 'Verdana', 'Courier', 'Lucida Console', 'sans-serif', 'serif', 'monospace'];
|
||||||
const SEEK_TIME_DURATIONS = [5000, 10000, 15000, 20000, 25000, 30000];
|
const SEEK_TIME_DURATIONS = [5000, 10000, 15000, 20000, 25000, 30000];
|
||||||
|
const SEEK_SHORT_TIME_DURATIONS = [5000, 10000, 15000, 20000, 25000, 30000];
|
||||||
const NEXT_VIDEO_POPUP_DURATIONS = [0, 5000, 10000, 15000, 20000, 25000, 30000, 35000, 40000, 45000, 50000, 55000, 60000, 65000, 70000, 75000, 80000, 85000, 90000];
|
const NEXT_VIDEO_POPUP_DURATIONS = [0, 5000, 10000, 15000, 20000, 25000, 30000, 35000, 40000, 45000, 50000, 55000, 60000, 65000, 70000, 75000, 80000, 85000, 90000];
|
||||||
const CATALOG_PREVIEW_SIZE = 10;
|
const CATALOG_PREVIEW_SIZE = 10;
|
||||||
const CATALOG_PAGE_SIZE = 100;
|
const CATALOG_PAGE_SIZE = 100;
|
||||||
|
|
@ -45,6 +46,7 @@ module.exports = {
|
||||||
SUBTITLES_SIZES,
|
SUBTITLES_SIZES,
|
||||||
SUBTITLES_FONTS,
|
SUBTITLES_FONTS,
|
||||||
SEEK_TIME_DURATIONS,
|
SEEK_TIME_DURATIONS,
|
||||||
|
SEEK_SHORT_TIME_DURATIONS,
|
||||||
NEXT_VIDEO_POPUP_DURATIONS,
|
NEXT_VIDEO_POPUP_DURATIONS,
|
||||||
CATALOG_PREVIEW_SIZE,
|
CATALOG_PREVIEW_SIZE,
|
||||||
CATALOG_PAGE_SIZE,
|
CATALOG_PAGE_SIZE,
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,8 @@ const Settings = () => {
|
||||||
subtitlesOutlineColorInput,
|
subtitlesOutlineColorInput,
|
||||||
audioLanguageSelect,
|
audioLanguageSelect,
|
||||||
seekTimeDurationSelect,
|
seekTimeDurationSelect,
|
||||||
|
seekShortTimeDurationSelect,
|
||||||
|
escExitFullscreenCheckbox,
|
||||||
playInExternalPlayerSelect,
|
playInExternalPlayerSelect,
|
||||||
nextVideoPopupDurationSelect,
|
nextVideoPopupDurationSelect,
|
||||||
bingeWatchingCheckbox,
|
bingeWatchingCheckbox,
|
||||||
|
|
@ -57,6 +59,7 @@ const Settings = () => {
|
||||||
return profile.auth !== null && profile.auth.user !== null && profile.auth.user.trakt !== null &&
|
return profile.auth !== null && profile.auth.user !== null && profile.auth.user.trakt !== null &&
|
||||||
(Date.now() / 1000) < (profile.auth.user.trakt.created_at + profile.auth.user.trakt.expires_in);
|
(Date.now() / 1000) < (profile.auth.user.trakt.created_at + profile.auth.user.trakt.expires_in);
|
||||||
}, [profile.auth]);
|
}, [profile.auth]);
|
||||||
|
console.log(profile.settings)
|
||||||
const configureServerUrlModalButtons = React.useMemo(() => {
|
const configureServerUrlModalButtons = React.useMemo(() => {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
|
|
@ -334,6 +337,15 @@ const Settings = () => {
|
||||||
{...subtitlesLanguageSelect}
|
{...subtitlesLanguageSelect}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
<div className={styles['option-container']}>
|
||||||
|
<div className={styles['option-name-container']}>
|
||||||
|
<div className={styles['label']}>{ t('SETTINGS_FULLSCREEN_EXIT') }</div>
|
||||||
|
</div>
|
||||||
|
<Checkbox
|
||||||
|
className={classnames(styles['option-input-container'], styles['checkbox-container'])}
|
||||||
|
{...escExitFullscreenCheckbox}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
<div className={styles['option-container']}>
|
<div className={styles['option-container']}>
|
||||||
<div className={styles['option-name-container']}>
|
<div className={styles['option-name-container']}>
|
||||||
<div className={styles['label']}>{ t('SETTINGS_SUBTITLES_SIZE') }</div>
|
<div className={styles['label']}>{ t('SETTINGS_SUBTITLES_SIZE') }</div>
|
||||||
|
|
@ -381,13 +393,22 @@ const Settings = () => {
|
||||||
</div>
|
</div>
|
||||||
<div className={styles['option-container']}>
|
<div className={styles['option-container']}>
|
||||||
<div className={styles['option-name-container']}>
|
<div className={styles['option-name-container']}>
|
||||||
<div className={styles['label']}>{ t('SETTINGS_REWIND_FAST_FORWARD_DURATION') }</div>
|
<div className={styles['label']}>{ t('SETTINGS_SEEK_KEY') }</div>
|
||||||
</div>
|
</div>
|
||||||
<Multiselect
|
<Multiselect
|
||||||
className={classnames(styles['option-input-container'], styles['multiselect-container'])}
|
className={classnames(styles['option-input-container'], styles['multiselect-container'])}
|
||||||
{...seekTimeDurationSelect}
|
{...seekTimeDurationSelect}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
<div className={styles['option-container']}>
|
||||||
|
<div className={styles['option-name-container']}>
|
||||||
|
<div className={styles['label']}>{ t('SETTINGS_SEEK_KEY_SHIFT') }</div>
|
||||||
|
</div>
|
||||||
|
<Multiselect
|
||||||
|
className={classnames(styles['option-input-container'], styles['multiselect-container'])}
|
||||||
|
{...seekShortTimeDurationSelect}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
<div className={styles['option-container']}>
|
<div className={styles['option-container']}>
|
||||||
<div className={styles['option-name-container']}>
|
<div className={styles['option-name-container']}>
|
||||||
<div className={styles['label']}>{ t('AUTO_PLAY') }</div>
|
<div className={styles['label']}>{ t('AUTO_PLAY') }</div>
|
||||||
|
|
|
||||||
|
|
@ -135,6 +135,21 @@ const useProfileSettingsInputs = (profile) => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}), [profile.settings]);
|
}), [profile.settings]);
|
||||||
|
const escExitFullscreenCheckbox = React.useMemo(() => ({
|
||||||
|
checked: profile.settings.escExitFullscreen,
|
||||||
|
onClick: () => {
|
||||||
|
core.transport.dispatch({
|
||||||
|
action: 'Ctx',
|
||||||
|
args: {
|
||||||
|
action: 'UpdateSettings',
|
||||||
|
args: {
|
||||||
|
escExistFullscreen: !profile.settings.escExitFullscreen
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}), [profile.settings]);
|
||||||
|
|
||||||
const seekTimeDurationSelect = React.useMemo(() => ({
|
const seekTimeDurationSelect = React.useMemo(() => ({
|
||||||
options: CONSTANTS.SEEK_TIME_DURATIONS.map((size) => ({
|
options: CONSTANTS.SEEK_TIME_DURATIONS.map((size) => ({
|
||||||
value: `${size}`,
|
value: `${size}`,
|
||||||
|
|
@ -157,6 +172,28 @@ const useProfileSettingsInputs = (profile) => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}), [profile.settings]);
|
}), [profile.settings]);
|
||||||
|
const seekShortTimeDurationSelect = React.useMemo(() => ({
|
||||||
|
options: CONSTANTS.SEEK_SHORT_TIME_DURATIONS.map((size) => ({
|
||||||
|
value: `${size}`,
|
||||||
|
label: `${size / 1000} ${t('SECONDS')}`
|
||||||
|
})),
|
||||||
|
selected: [`${profile.settings.seekShortTimeDuration}`],
|
||||||
|
renderLabelText: () => {
|
||||||
|
return `${profile.settings.seekShortTimeDuration / 1000} ${t('SECONDS')}`;
|
||||||
|
},
|
||||||
|
onSelect: (event) => {
|
||||||
|
core.transport.dispatch({
|
||||||
|
action: 'Ctx',
|
||||||
|
args: {
|
||||||
|
action: 'UpdateSettings',
|
||||||
|
args: {
|
||||||
|
...profile.settings,
|
||||||
|
seekShortTimeDuration: parseInt(event.value, 10)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}), [profile.settings]);
|
||||||
const playInExternalPlayerSelect = React.useMemo(() => ({
|
const playInExternalPlayerSelect = React.useMemo(() => ({
|
||||||
options: externalPlayerOptions.map((opt) => {
|
options: externalPlayerOptions.map((opt) => {
|
||||||
opt.label = t(opt.label);
|
opt.label = t(opt.label);
|
||||||
|
|
@ -269,7 +306,9 @@ const useProfileSettingsInputs = (profile) => {
|
||||||
subtitlesBackgroundColorInput,
|
subtitlesBackgroundColorInput,
|
||||||
subtitlesOutlineColorInput,
|
subtitlesOutlineColorInput,
|
||||||
audioLanguageSelect,
|
audioLanguageSelect,
|
||||||
|
escExitFullscreenCheckbox,
|
||||||
seekTimeDurationSelect,
|
seekTimeDurationSelect,
|
||||||
|
seekShortTimeDurationSelect,
|
||||||
playInExternalPlayerSelect,
|
playInExternalPlayerSelect,
|
||||||
nextVideoPopupDurationSelect,
|
nextVideoPopupDurationSelect,
|
||||||
bingeWatchingCheckbox,
|
bingeWatchingCheckbox,
|
||||||
|
|
|
||||||
2
src/types/models/Ctx.d.ts
vendored
2
src/types/models/Ctx.d.ts
vendored
|
|
@ -25,6 +25,8 @@ type Settings = {
|
||||||
secondaryAudioLanguage: string | null,
|
secondaryAudioLanguage: string | null,
|
||||||
secondarySubtitlesLanguage: string | null,
|
secondarySubtitlesLanguage: string | null,
|
||||||
seekTimeDuration: number,
|
seekTimeDuration: number,
|
||||||
|
escExitFullscreen: boolean,
|
||||||
|
seekShortTimeDuration: number,
|
||||||
streamingServerUrl: string,
|
streamingServerUrl: string,
|
||||||
streamingServerWarningDismissed: Date | null,
|
streamingServerWarningDismissed: Date | null,
|
||||||
subtitlesBackgroundColor: string,
|
subtitlesBackgroundColor: string,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue