From 5768e41efda5d5c951f902552bb395bc05543b58 Mon Sep 17 00:00:00 2001 From: D3ICIDE <183315953+D3ICIDE@users.noreply.github.com> Date: Sat, 17 Oct 2026 15:46:25 +0530 Subject: [PATCH 1/3] fix duplication for novel pages --- plugins/multisrc/readnovelfull/template.ts | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/plugins/multisrc/readnovelfull/template.ts b/plugins/multisrc/readnovelfull/template.ts index 24aa4b262..7961ce0d4 100644 --- a/plugins/multisrc/readnovelfull/template.ts +++ b/plugins/multisrc/readnovelfull/template.ts @@ -47,6 +47,7 @@ export class ReadNovelFullPlugin implements Plugin.PluginBase { options: ReadNovelFullOptions; filters?: Filters | undefined; imageRequestInit?: Plugin.ImageRequestInit; + private lastPage: { no: number; paths: string[] } | null = null; constructor(metadata: ReadNovelFullMetadata) { this.id = metadata.id; @@ -54,7 +55,7 @@ export class ReadNovelFullPlugin implements Plugin.PluginBase { this.icon = `multisrc/readnovelfull/${metadata.id.toLowerCase()}/icon.png`; this.site = metadata.sourceSite; const versionIncrements = metadata.options?.versionIncrements || 0; - this.version = `2.2.${1 + versionIncrements}`; + this.version = `2.3.${1 + versionIncrements}`; this.options = metadata.options; this.filters = metadata.filters; if (this.options?.imageReferer) { @@ -374,7 +375,22 @@ export class ReadNovelFullPlugin implements Plugin.PluginBase { ); } const html = await result.text(); - return this.parseNovels(html); + const novels = this.parseNovels(html); + const paths = novels.map(n => n.path); + + // Next page identical to the previous one: the site is repeating the last page. Stop. + const prev = this.lastPage; + if ( + prev && + pageNo === prev.no + 1 && + prev.paths.length === paths.length && + prev.paths.every((p, i) => p === paths[i]) + ) { + return []; + } + + this.lastPage = { no: pageNo, paths }; + return novels; } async parseNovel(novelPath: string): Promise { From a017243ac068bc876de3b9490f784b20bc4ea6c7 Mon Sep 17 00:00:00 2001 From: D3ICIDE <183315953+D3ICIDE@users.noreply.github.com> Date: Sat, 17 Oct 2026 16:01:28 +0530 Subject: [PATCH 2/3] clean up --- plugins/multisrc/readnovelfull/template.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/multisrc/readnovelfull/template.ts b/plugins/multisrc/readnovelfull/template.ts index 7961ce0d4..b4992bd87 100644 --- a/plugins/multisrc/readnovelfull/template.ts +++ b/plugins/multisrc/readnovelfull/template.ts @@ -378,7 +378,7 @@ export class ReadNovelFullPlugin implements Plugin.PluginBase { const novels = this.parseNovels(html); const paths = novels.map(n => n.path); - // Next page identical to the previous one: the site is repeating the last page. Stop. + // If the previous and current page share the same novel items then return [] const prev = this.lastPage; if ( prev && From 4dfd6214f223811ea00c5bbf151363ec98af105d Mon Sep 17 00:00:00 2001 From: D3ICIDE <183315953+D3ICIDE@users.noreply.github.com> Date: Sun, 18 Oct 2026 10:24:36 +0530 Subject: [PATCH 3/3] changed page comparison logic --- plugins/multisrc/readnovelfull/template.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/multisrc/readnovelfull/template.ts b/plugins/multisrc/readnovelfull/template.ts index b4992bd87..eab2ede9f 100644 --- a/plugins/multisrc/readnovelfull/template.ts +++ b/plugins/multisrc/readnovelfull/template.ts @@ -382,7 +382,7 @@ export class ReadNovelFullPlugin implements Plugin.PluginBase { const prev = this.lastPage; if ( prev && - pageNo === prev.no + 1 && + pageNo > prev.no && prev.paths.length === paths.length && prev.paths.every((p, i) => p === paths[i]) ) {