Add "cycle profiles" hotkey
This commit is contained in:
@@ -851,6 +851,7 @@
|
||||
"offset_spread_pages": "Toggle offset spread pages",
|
||||
"previous_chapter": "Previous chapter",
|
||||
"previous_page": "Previous page",
|
||||
"profiles": "Cycle profiles",
|
||||
"scale_type": "Cycle image scale type",
|
||||
"scroll_backward": "Scroll backward",
|
||||
"scroll_forward": "Scroll forward",
|
||||
|
||||
@@ -11,7 +11,7 @@ import { useEffect } from 'react';
|
||||
import { useTheme } from '@mui/material/styles';
|
||||
import { HOTKEY_SCOPES } from '@/modules/hotkeys/Hotkeys.constants.ts';
|
||||
import { ReaderService } from '@/modules/reader/services/ReaderService.ts';
|
||||
import { ReaderHotkey, ReadingMode } from '@/modules/reader/types/Reader.types.ts';
|
||||
import { IReaderSettings, ReaderHotkey, ReadingMode } from '@/modules/reader/types/Reader.types.ts';
|
||||
import { useReaderOverlayContext } from '@/modules/reader/contexts/ReaderOverlayContext.tsx';
|
||||
import { getNextRotationValue } from '@/modules/core/utils/ValueRotationButton.utils.ts';
|
||||
import {
|
||||
@@ -30,6 +30,31 @@ const useHotkeys = (...args: Parameters<typeof useHotKeysHook>): ReturnType<type
|
||||
return useHotKeysHook(keys, callback, { ...options, ...HOTKEY_SCOPES.reader }, dependencies);
|
||||
};
|
||||
|
||||
const updateSettingCycleThrough = <Setting extends keyof IReaderSettings>(
|
||||
updateSetting: ReturnType<typeof ReaderService.useCreateUpdateSetting>,
|
||||
deleteSetting: ReturnType<typeof ReaderService.useCreateDeleteSetting>,
|
||||
setting: Setting,
|
||||
value: IReaderSettings[Setting],
|
||||
values: IReaderSettings[Setting][],
|
||||
isDefault: boolean,
|
||||
isDefaultable: boolean,
|
||||
) => {
|
||||
if (isDefault) {
|
||||
updateSetting(setting, values[0]);
|
||||
return;
|
||||
}
|
||||
|
||||
const nextValue = getNextRotationValue(values.indexOf(value), values, isDefaultable);
|
||||
|
||||
const isDefaultNextValue = nextValue === undefined;
|
||||
if (isDefaultNextValue) {
|
||||
deleteSetting(setting);
|
||||
return;
|
||||
}
|
||||
|
||||
updateSetting(setting, nextValue);
|
||||
};
|
||||
|
||||
const DEFAULT_MANGA: MangaIdInfo = { id: -1 };
|
||||
|
||||
const CONTINUOUS_READING_MODE_TO_SCROLL_DIRECTION: Record<ReadingMode, ScrollDirection> = {
|
||||
@@ -49,8 +74,16 @@ export const ReaderHotkeys = ({
|
||||
const { enableScope, disableScope } = useHotkeysContext();
|
||||
const { manga } = useReaderStateMangaContext();
|
||||
const { isVisible, setIsVisible } = useReaderOverlayContext();
|
||||
const { hotkeys, pageScaleMode, shouldStretchPage, shouldOffsetDoubleSpreads, readingMode, readingDirection } =
|
||||
ReaderService.useSettings();
|
||||
const {
|
||||
hotkeys,
|
||||
pageScaleMode,
|
||||
shouldStretchPage,
|
||||
shouldOffsetDoubleSpreads,
|
||||
readingMode,
|
||||
readingDirection,
|
||||
defaultProfile,
|
||||
profiles,
|
||||
} = ReaderService.useSettings();
|
||||
|
||||
const openChapter = ReaderControls.useOpenChapter();
|
||||
const openPage = ReaderControls.useOpenPage();
|
||||
@@ -108,23 +141,15 @@ export const ReaderHotkeys = ({
|
||||
useHotkeys(
|
||||
hotkeys[ReaderHotkey.CYCLE_SCALE_TYPE],
|
||||
() => {
|
||||
if (pageScaleMode.isDefault) {
|
||||
updateSetting('pageScaleMode', READER_PAGE_SCALE_MODE_VALUES[0]);
|
||||
return;
|
||||
}
|
||||
|
||||
const nextValue = getNextRotationValue(
|
||||
READER_PAGE_SCALE_MODE_VALUES.indexOf(pageScaleMode.value),
|
||||
updateSettingCycleThrough(
|
||||
updateSetting,
|
||||
deleteSetting,
|
||||
'pageScaleMode',
|
||||
pageScaleMode.value,
|
||||
READER_PAGE_SCALE_MODE_VALUES,
|
||||
pageScaleMode.isDefault,
|
||||
true,
|
||||
);
|
||||
|
||||
if (nextValue === undefined) {
|
||||
deleteSetting('pageScaleMode');
|
||||
return;
|
||||
}
|
||||
|
||||
updateSetting('pageScaleMode', nextValue);
|
||||
},
|
||||
[updateSetting, deleteSetting, pageScaleMode],
|
||||
);
|
||||
@@ -138,6 +163,17 @@ export const ReaderHotkeys = ({
|
||||
() => updateSetting('shouldOffsetDoubleSpreads', !shouldOffsetDoubleSpreads.value),
|
||||
[updateSetting, shouldOffsetDoubleSpreads.value],
|
||||
);
|
||||
useHotkeys(hotkeys[ReaderHotkey.CYCLE_PROFILES], () => {
|
||||
updateSettingCycleThrough(
|
||||
updateSetting,
|
||||
deleteSetting,
|
||||
'defaultProfile',
|
||||
defaultProfile.value,
|
||||
profiles,
|
||||
defaultProfile.isDefault,
|
||||
true,
|
||||
);
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
enableScope(HotkeyScope.READER);
|
||||
|
||||
@@ -31,6 +31,7 @@ const READER_HOTKEY_TO_TITLE: Record<ReaderHotkey, TranslationKey> = {
|
||||
[ReaderHotkey.CYCLE_SCALE_TYPE]: 'reader.settings.hotkey.scale_type',
|
||||
[ReaderHotkey.STRETCH_IMAGE]: 'reader.settings.hotkey.stretch_image',
|
||||
[ReaderHotkey.OFFSET_SPREAD_PAGES]: 'reader.settings.hotkey.offset_spread_pages',
|
||||
[ReaderHotkey.CYCLE_PROFILES]: 'reader.settings.hotkey.profiles',
|
||||
};
|
||||
|
||||
export const ReaderSettingHotkey = ({
|
||||
|
||||
@@ -128,6 +128,7 @@ export const DEFAULT_READER_SETTINGS: IReaderSettings = {
|
||||
[ReaderHotkey.CYCLE_SCALE_TYPE]: ['i'],
|
||||
[ReaderHotkey.STRETCH_IMAGE]: ['f'],
|
||||
[ReaderHotkey.OFFSET_SPREAD_PAGES]: ['o'],
|
||||
[ReaderHotkey.CYCLE_PROFILES]: ['p'],
|
||||
},
|
||||
imagePreLoadAmount: 5,
|
||||
};
|
||||
|
||||
@@ -206,6 +206,7 @@ export enum ReaderHotkey {
|
||||
CYCLE_SCALE_TYPE,
|
||||
STRETCH_IMAGE,
|
||||
OFFSET_SPREAD_PAGES,
|
||||
CYCLE_PROFILES,
|
||||
}
|
||||
|
||||
export interface ReaderPagerProps
|
||||
|
||||
Reference in New Issue
Block a user