Skip to content

Commit

Permalink
Keep initial opened chapter as duplicate reference
Browse files Browse the repository at this point in the history
In case "skip duplicated chapters" is enabled and the next chapter is from a different scanlator, the initial opened chapter should still be used to remove duplicated chapters.

Otherwise, the original scanlator would get lost and the scanlator of the next chapter would get used, which was only a fallback chapter, because the initial chapters scanlator did not have a next chapter.
  • Loading branch information
schroda committed May 13, 2024
1 parent ca747b3 commit a65ca22
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 16 deletions.
7 changes: 4 additions & 3 deletions src/lib/data/Chapters.ts
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,7 @@ export class Chapters {
{
offset = ChapterOffset.NEXT,
...options
}: { offset?: ChapterOffset; onlyUnread?: boolean; skipDupe?: boolean } = {},
}: { offset?: ChapterOffset; onlyUnread?: boolean; skipDupe?: boolean; skipDupeChapter?: Chapter } = {},
): Chapter | undefined {
const nextChapters = Chapters.getNextChapters(currentChapter, chapters, { offset, ...options });

Expand All @@ -360,7 +360,8 @@ export class Chapters {
offset = ChapterOffset.NEXT,
onlyUnread = false,
skipDupe = false,
}: { offset?: ChapterOffset; onlyUnread?: boolean; skipDupe?: boolean } = {},
skipDupeChapter = fromChapter,
}: { offset?: ChapterOffset; onlyUnread?: boolean; skipDupe?: boolean; skipDupeChapter?: Chapter } = {},
): Chapter[] {
const fromChapterIndex = chapters.findIndex((chapter) => chapter.id === fromChapter.id);

Expand All @@ -370,7 +371,7 @@ export class Chapters {

const nextChaptersIncludingCurrent = chapters.slice(sliceStartIndex, sliceEndIndex);
const uniqueNextChapters = skipDupe
? Chapters.removeDuplicates(fromChapter, nextChaptersIncludingCurrent)
? Chapters.removeDuplicates(skipDupeChapter, nextChaptersIncludingCurrent)
: nextChaptersIncludingCurrent;
const nextChapters = uniqueNextChapters.toSpliced(isNextChapterOffset ? -1 : 0, 1);

Expand Down
45 changes: 32 additions & 13 deletions src/screens/Reader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,13 @@ const getReaderComponent = (readerType: ReaderType) => {
};

const range = (n: number) => Array.from({ length: n }, (value, key) => key);
const initialChapter = {
const fallbackChapter = {
pageCount: -1,
sourceOrder: -1,
chapterCount: 0,
lastPageRead: 0,
name: 'Loading...',
manga: { id: -1 },
} as unknown as TChapter;

export function Reader() {
Expand All @@ -75,7 +76,7 @@ export function Reader() {

const { chapterIndex, mangaId } = useParams<{ chapterIndex: string; mangaId: string }>();

const initialManga = useMemo(
const fallbackManga = useMemo(
() =>
({
id: +mangaId,
Expand All @@ -101,7 +102,7 @@ export function Reader() {
Number(mangaId) === loadedChapter.current?.manga.id &&
Number(chapterIndex) === loadedChapter.current?.sourceOrder &&
loadedChapter.current?.pageCount !== -1;
const manga = data?.manga ?? initialManga;
const manga = data?.manga ?? fallbackManga;
const {
data: chapterData,
loading: isChapterLoading,
Expand Down Expand Up @@ -135,7 +136,16 @@ export function Reader() {
};
loadedChapter.current = getLoadedChapter();

const chapter = loadedChapter.current ?? initialChapter;
const chapter = loadedChapter.current ?? fallbackChapter;

const initialChapterRef = useRef<TChapter>(fallbackChapter);
if (initialChapterRef.current === fallbackChapter) {
initialChapterRef.current = chapter;
}
if (chapter.manga.id !== initialChapterRef.current?.manga.id) {
initialChapterRef.current = fallbackChapter;
}

const [fetchPages, { loading: arePagesLoading, error: pagesError }] = requestManager.useGetChapterPagesFetch(
chapter.id,
);
Expand Down Expand Up @@ -187,39 +197,48 @@ export function Reader() {

const uniqueChapters = useMemo(
() =>
settings.skipDupChapters ? Chapters.removeDuplicates(chapter, mangaChapters ?? []) : mangaChapters ?? [],
[chapter, mangaChapters, settings.skipDupChapters],
settings.skipDupChapters
? Chapters.removeDuplicates(initialChapterRef.current, mangaChapters ?? [])
: mangaChapters ?? [],
[initialChapterRef.current, mangaChapters, settings.skipDupChapters],
);
const prevChapters = useMemo(
() =>
Chapters.getNextChapters(chapter, mangaChapters ?? [], {
offset: ChapterOffset.PREV,
skipDupe: settings.skipDupChapters,
skipDupeChapter: initialChapterRef.current,
}),
[chapter, mangaChapters, settings.skipDupChapters],
[chapter, initialChapterRef.current, mangaChapters, settings.skipDupChapters],
);
const nextChapters = useMemo(
() => Chapters.getNextChapters(chapter, mangaChapters ?? [], { skipDupe: settings.skipDupChapters }),
[chapter, mangaChapters, settings.skipDupChapters],
() =>
Chapters.getNextChapters(chapter, mangaChapters ?? [], {
skipDupe: settings.skipDupChapters,
skipDupeChapter: initialChapterRef.current,
}),
[chapter, initialChapterRef.current, mangaChapters, settings.skipDupChapters],
);
const prevChapter = useMemo(
() =>
Chapters.getNextChapter(chapter, mangaChapters ?? [], {
offset: ChapterOffset.PREV,
skipDupe: settings.skipDupChapters,
skipDupeChapter: initialChapterRef.current,
}),
[chapter, mangaChapters, settings.skipDupChapters],
[chapter, initialChapterRef.current, mangaChapters, settings.skipDupChapters],
);
const nextChapter = useMemo(
() =>
Chapters.getNextChapter(chapter, mangaChapters ?? [], {
skipDupe: settings.skipDupChapters,
skipDupeChapter: initialChapterRef.current,
}),
[chapter, mangaChapters, settings.skipDupChapters],
[chapter, initialChapterRef.current, mangaChapters, settings.skipDupChapters],
);

const updateChapter = (patch: UpdateChapterPatchInput) => {
if (chapter === initialChapter) {
if (chapter === fallbackChapter) {
return;
}

Expand Down Expand Up @@ -404,7 +423,7 @@ export function Reader() {
return;
}

if (chapter === initialChapter) {
if (chapter === fallbackChapter) {
return;
}

Expand Down

0 comments on commit a65ca22

Please sign in to comment.