Add "auto webtoon mode" option to reader

This commit is contained in:
schroda
2024-12-26 17:15:50 +01:00
parent cfd5b78488
commit 33e184ba18
13 changed files with 184 additions and 24 deletions

View File

@@ -42,6 +42,7 @@ import {
ReaderResumeMode,
ReaderStateChapters,
ReaderTransitionPageMode,
ReadingMode,
TReaderStateMangaContext,
TReaderStateSettingsContext,
} from '@/modules/reader/types/Reader.types.ts';
@@ -52,7 +53,7 @@ import { TReaderOverlayContext } from '@/modules/reader/types/ReaderOverlay.type
import { ReaderStatePages } from '@/modules/reader/types/ReaderProgressBar.types.ts';
import { withPropsFrom } from '@/modules/core/hoc/withPropsFrom.tsx';
import { useReaderStateChaptersContext } from '@/modules/reader/contexts/state/ReaderStateChaptersContext.tsx';
import { FALLBACK_MANGA } from '@/modules/manga/Manga.constants.ts';
import { isAutoWebtoonMode } from '@/modules/reader/utils/ReaderSettings.utils.tsx';
const BaseReader = ({
setTitle,
@@ -221,25 +222,36 @@ const BaseReader = ({
// set settings state
useEffect(() => {
if (!mangaResponse.data?.manga || defaultSettingsResponse.loading || defaultSettingsResponse.error) {
const mangaFromResponse = mangaResponse.data?.manga;
if (!mangaFromResponse || defaultSettingsResponse.loading || defaultSettingsResponse.error) {
return;
}
const settingsWithDefaultProfileFallback = getReaderSettingsFor(
mangaResponse.data?.manga ?? FALLBACK_MANGA,
defaultSettings,
const settingsWithDefaultProfileFallback = getReaderSettingsFor(mangaFromResponse, defaultSettings);
const shouldUseWebtoonMode = isAutoWebtoonMode(
mangaFromResponse,
settingsWithDefaultProfileFallback.shouldUseAutoWebtoonMode,
settingsWithDefaultProfileFallback.readingMode,
);
const profile = settingsWithDefaultProfileFallback.readingMode.value;
const defaultSettingsWithAutoReadingMode = {
...defaultSettings,
readingMode: shouldUseWebtoonMode ? ReadingMode.WEBTOON : defaultSettings.readingMode,
};
const profile = shouldUseWebtoonMode
? ReadingMode.WEBTOON
: settingsWithDefaultProfileFallback.readingMode.value;
const profileSettings = getReaderSettings(
'global',
{ meta: defaultSettingsMetadata! },
defaultSettings,
defaultSettingsWithAutoReadingMode,
undefined,
profile,
);
setSettings(getReaderSettingsFor(mangaResponse.data!.manga, profileSettings));
setSettings(getReaderSettingsFor(mangaFromResponse, profileSettings));
}, [mangaResponse.data?.manga, defaultSettings]);
// set chapters state