fix(novelfire): fix changing filters causing results to disappear (#2220)

* fix(novelfire): fix changing filters causing results to disappear

Signed-off-by: K1ngfish3r <26593485+K1ngfish3r@users.noreply.github.com>

* Update index.ts

Signed-off-by: K1ngfish3r <26593485+K1ngfish3r@users.noreply.github.com>

---------

Signed-off-by: K1ngfish3r <26593485+K1ngfish3r@users.noreply.github.com>
This commit is contained in:
K1ngfish3r
2026-05-26 04:51:04 +05:00
committed by GitHub
parent 59ce8079ca
commit e265277383
2 changed files with 132 additions and 126 deletions
+42 -38
View File
@@ -9,11 +9,11 @@ import { storage } from '@libs/storage';
class NovelFire implements Plugin.PluginBase { class NovelFire implements Plugin.PluginBase {
id = 'novelfire'; id = 'novelfire';
name = 'Novel Fire'; name = 'Novel Fire';
version = '1.4.2'; version = '1.4.3';
icon = 'src/en/novelfire/icon.png'; icon = 'src/en/novelfire/icon.png';
site = 'https://novelfire.net/'; site = 'https://novelfire.net/';
webStorageUtilized = true; webStorageUtilized = true;
novelList: string[] = []; novelList = new Set<string>();
draw = 0; draw = 0;
pluginSettings = { pluginSettings = {
@@ -50,45 +50,44 @@ class NovelFire implements Plugin.PluginBase {
parseNovels( parseNovels(
loadedCheerio: CheerioAPI, loadedCheerio: CheerioAPI,
selector = '.novel-item', selector = '.novel-item',
isFirstPage = false,
): Plugin.NovelItem[] { ): Plugin.NovelItem[] {
return loadedCheerio(selector) const novels: Plugin.NovelItem[] = [];
.map((_, el) => {
const $el = loadedCheerio(el);
const titleElement = $el.find('.novel-title > a');
const fallbackElement = $el.find('a');
const novelName = const elements = loadedCheerio(selector).toArray();
titleElement.text() || for (const el of elements) {
fallbackElement.attr('title') || const $el = loadedCheerio(el);
'No Title Found';
const imgElement = $el.find('.novel-cover > img'); const novelName =
const rawSrc = imgElement.attr('data-src') ?? imgElement.attr('src'); $el.find('a').attr('title') ?? $el.find('h4').text().trim();
const novelCover = rawSrc const novelPath =
? new URL(rawSrc, this.site).href $el.children('a').attr('href') ?? $el.find('h4 a').attr('href');
: defaultCover;
const novelPath = if (!novelPath) continue;
titleElement.attr('href') || fallbackElement.attr('href');
if (!novelPath) return null; const path = new URL(novelPath, this.site).pathname.substring(1);
return { if (!isFirstPage) {
name: novelName, if (this.novelList.has(path)) continue;
cover: novelCover, this.novelList.add(path);
path: new URL(novelPath, this.site).pathname.substring(1), } else {
}; this.novelList.add(path);
}) }
.get()
.filter(novel => novel !== null) const imgElement = $el.find('.novel-cover > img');
.filter(novel => { const rawSrc = imgElement.attr('data-src') ?? imgElement.attr('src');
if (this.novelList.includes(novel.path)) { const novelCover = rawSrc
return false; ? new URL(rawSrc, this.site).href
} else { : defaultCover;
this.novelList.push(novel.path);
return true; novels.push({
} name: novelName,
cover: novelCover,
path,
}); });
}
return novels;
} }
async popularNovels( async popularNovels(
@@ -99,9 +98,10 @@ class NovelFire implements Plugin.PluginBase {
}: Plugin.PopularNovelsOptions<typeof this.filters>, }: Plugin.PopularNovelsOptions<typeof this.filters>,
): Promise<Plugin.NovelItem[]> { ): Promise<Plugin.NovelItem[]> {
if (pageNo === 1) { if (pageNo === 1) {
this.novelList = []; this.novelList.clear();
this.draw = 0; this.draw = 0;
} }
const url = this.site + 'search-adv'; const url = this.site + 'search-adv';
const params = new URLSearchParams(); const params = new URLSearchParams();
@@ -125,7 +125,7 @@ class NovelFire implements Plugin.PluginBase {
false, false,
); );
return this.parseNovels(loadedCheerio); return this.parseNovels(loadedCheerio, '.novel-item', pageNo === 1);
} }
async getAllChapters( async getAllChapters(
@@ -425,7 +425,7 @@ class NovelFire implements Plugin.PluginBase {
page: number, page: number,
): Promise<Plugin.NovelItem[]> { ): Promise<Plugin.NovelItem[]> {
if (page === 1) { if (page === 1) {
this.novelList = []; this.novelList.clear();
this.draw = 0; this.draw = 0;
} }
const params = new URLSearchParams(); const params = new URLSearchParams();
@@ -437,7 +437,11 @@ class NovelFire implements Plugin.PluginBase {
const loadedCheerio = load(body); const loadedCheerio = load(body);
return this.parseNovels(loadedCheerio, '.novel-list.chapters .novel-item'); return this.parseNovels(
loadedCheerio,
'.novel-list.chapters .novel-item',
page === 1,
);
} }
filters = { filters = {
+90 -88
View File
@@ -158,94 +158,95 @@ import p_155 from '@plugins/french/chireads';
import p_156 from '@plugins/french/harkeneliwood'; import p_156 from '@plugins/french/harkeneliwood';
import p_157 from '@plugins/french/kisswood'; import p_157 from '@plugins/french/kisswood';
import p_158 from '@plugins/french/noveldeglace'; import p_158 from '@plugins/french/noveldeglace';
import p_159 from '@plugins/french/novhell'; import p_159 from '@plugins/french/novelfrance';
import p_160 from '@plugins/french/warriorlegendtrad'; import p_160 from '@plugins/french/novhell';
import p_161 from '@plugins/french/wuxialnscantrad'; import p_161 from '@plugins/french/warriorlegendtrad';
import p_162 from '@plugins/french/xiaowaz'; import p_162 from '@plugins/french/wuxialnscantrad';
import p_163 from '@plugins/indonesian/BacaLightNovel[lightnovelwp]'; import p_163 from '@plugins/french/xiaowaz';
import p_164 from '@plugins/indonesian/MTLNovel(ID)[mtlnovel]'; import p_164 from '@plugins/indonesian/BacaLightNovel[lightnovelwp]';
import p_165 from '@plugins/indonesian/MeioNovel[madara]'; import p_165 from '@plugins/indonesian/MTLNovel(ID)[mtlnovel]';
import p_166 from '@plugins/indonesian/NovelBookID[madara]'; import p_166 from '@plugins/indonesian/MeioNovel[madara]';
import p_167 from '@plugins/indonesian/SekteNovel[lightnovelwp]'; import p_167 from '@plugins/indonesian/NovelBookID[madara]';
import p_168 from '@plugins/indonesian/Vanovel[madara]'; import p_168 from '@plugins/indonesian/SekteNovel[lightnovelwp]';
import p_169 from '@plugins/indonesian/WBNovel[madara]'; import p_169 from '@plugins/indonesian/Vanovel[madara]';
import p_170 from '@plugins/indonesian/indowebnovel'; import p_170 from '@plugins/indonesian/WBNovel[madara]';
import p_171 from '@plugins/indonesian/sakuranovel'; import p_171 from '@plugins/indonesian/indowebnovel';
import p_172 from '@plugins/japanese/Syosetu'; import p_172 from '@plugins/indonesian/sakuranovel';
import p_173 from '@plugins/japanese/kakuyomu'; import p_173 from '@plugins/japanese/Syosetu';
import p_174 from '@plugins/korean/Agitoon'; import p_174 from '@plugins/japanese/kakuyomu';
import p_175 from '@plugins/korean/FortuneEternal[madara]'; import p_175 from '@plugins/korean/Agitoon';
import p_176 from '@plugins/multi/komga'; import p_176 from '@plugins/korean/FortuneEternal[madara]';
import p_177 from '@plugins/polish/novelki'; import p_177 from '@plugins/multi/komga';
import p_178 from '@plugins/portuguese/BetterNovels[lightnovelwp]'; import p_178 from '@plugins/polish/novelki';
import p_179 from '@plugins/portuguese/CentralNovel[lightnovelwp]'; import p_179 from '@plugins/portuguese/BetterNovels[lightnovelwp]';
import p_180 from '@plugins/portuguese/Kiniga[madara]'; import p_180 from '@plugins/portuguese/CentralNovel[lightnovelwp]';
import p_181 from '@plugins/portuguese/LaNovels[hotnovelpub]'; import p_181 from '@plugins/portuguese/Kiniga[madara]';
import p_182 from '@plugins/portuguese/LightNovelBrasil[lightnovelwp]'; import p_182 from '@plugins/portuguese/LaNovels[hotnovelpub]';
import p_183 from '@plugins/portuguese/MTLNovel(PT)[mtlnovel]'; import p_183 from '@plugins/portuguese/LightNovelBrasil[lightnovelwp]';
import p_184 from '@plugins/portuguese/blogdoamonnovels'; import p_184 from '@plugins/portuguese/MTLNovel(PT)[mtlnovel]';
import p_185 from '@plugins/portuguese/illusia'; import p_185 from '@plugins/portuguese/blogdoamonnovels';
import p_186 from '@plugins/portuguese/novelmania'; import p_186 from '@plugins/portuguese/illusia';
import p_187 from '@plugins/portuguese/tsundoku'; import p_187 from '@plugins/portuguese/novelmania';
import p_188 from '@plugins/russian/Bllate[rulate]'; import p_188 from '@plugins/portuguese/tsundoku';
import p_189 from '@plugins/russian/Bookhamster[ifreedom]'; import p_189 from '@plugins/russian/Bllate[rulate]';
import p_190 from '@plugins/russian/Erolate[rulate]'; import p_190 from '@plugins/russian/Bookhamster[ifreedom]';
import p_191 from '@plugins/russian/EzNovels[hotnovelpub]'; import p_191 from '@plugins/russian/Erolate[rulate]';
import p_192 from '@plugins/russian/MTLNovel(RU)[mtlnovel]'; import p_192 from '@plugins/russian/EzNovels[hotnovelpub]';
import p_193 from '@plugins/russian/NovelCool(RU)[novelcool]'; import p_193 from '@plugins/russian/MTLNovel(RU)[mtlnovel]';
import p_194 from '@plugins/russian/Ranobes(RU)[ranobes]'; import p_194 from '@plugins/russian/NovelCool(RU)[novelcool]';
import p_195 from '@plugins/russian/Rulate[rulate]'; import p_195 from '@plugins/russian/Ranobes(RU)[ranobes]';
import p_196 from '@plugins/russian/authortoday'; import p_196 from '@plugins/russian/Rulate[rulate]';
import p_197 from '@plugins/russian/bookriver'; import p_197 from '@plugins/russian/authortoday';
import p_198 from '@plugins/russian/ficbook'; import p_198 from '@plugins/russian/bookriver';
import p_199 from '@plugins/russian/jaomix'; import p_199 from '@plugins/russian/ficbook';
import p_200 from '@plugins/russian/neobook'; import p_200 from '@plugins/russian/jaomix';
import p_201 from '@plugins/russian/novelTL'; import p_201 from '@plugins/russian/neobook';
import p_202 from '@plugins/russian/ranobehub'; import p_202 from '@plugins/russian/novelTL';
import p_203 from '@plugins/russian/ranobelib'; import p_203 from '@plugins/russian/ranobehub';
import p_204 from '@plugins/russian/ranoberf'; import p_204 from '@plugins/russian/ranobelib';
import p_205 from '@plugins/russian/renovels'; import p_205 from '@plugins/russian/ranoberf';
import p_206 from '@plugins/russian/topliba'; import p_206 from '@plugins/russian/renovels';
import p_207 from '@plugins/russian/zelluloza'; import p_207 from '@plugins/russian/topliba';
import p_208 from '@plugins/russian/СвободныйМирРанобэ[ifreedom]'; import p_208 from '@plugins/russian/zelluloza';
import p_209 from '@plugins/spanish/AllNovelRead[lightnovelwp]'; import p_209 from '@plugins/russian/СвободныйМирРанобэ[ifreedom]';
import p_210 from '@plugins/spanish/AnimesHoy12[madara]'; import p_210 from '@plugins/spanish/AllNovelRead[lightnovelwp]';
import p_211 from '@plugins/spanish/LightNovelDaily[hotnovelpub]'; import p_211 from '@plugins/spanish/AnimesHoy12[madara]';
import p_212 from '@plugins/spanish/MTLNovel(ES)[mtlnovel]'; import p_212 from '@plugins/spanish/LightNovelDaily[hotnovelpub]';
import p_213 from '@plugins/spanish/NOVA'; import p_213 from '@plugins/spanish/MTLNovel(ES)[mtlnovel]';
import p_214 from '@plugins/spanish/PanchoTranslations[madara]'; import p_214 from '@plugins/spanish/NOVA';
import p_215 from '@plugins/spanish/TC&Sega[lightnovelwp]'; import p_215 from '@plugins/spanish/PanchoTranslations[madara]';
import p_216 from '@plugins/spanish/TraduccionesAmistosas[madara]'; import p_216 from '@plugins/spanish/TC&Sega[lightnovelwp]';
import p_217 from '@plugins/spanish/hasutl'; import p_217 from '@plugins/spanish/TraduccionesAmistosas[madara]';
import p_218 from '@plugins/spanish/novelasligera'; import p_218 from '@plugins/spanish/hasutl';
import p_219 from '@plugins/spanish/novelawuxia'; import p_219 from '@plugins/spanish/novelasligera';
import p_220 from '@plugins/spanish/novelyra'; import p_220 from '@plugins/spanish/novelawuxia';
import p_221 from '@plugins/spanish/oasistranslations'; import p_221 from '@plugins/spanish/novelyra';
import p_222 from '@plugins/spanish/skynovels'; import p_222 from '@plugins/spanish/oasistranslations';
import p_223 from '@plugins/spanish/tunovelaligera'; import p_223 from '@plugins/spanish/skynovels';
import p_224 from '@plugins/spanish/yukitls'; import p_224 from '@plugins/spanish/tunovelaligera';
import p_225 from '@plugins/thai/NovelLucky[madara]'; import p_225 from '@plugins/spanish/yukitls';
import p_226 from '@plugins/thai/NovelPDF[madara]'; import p_226 from '@plugins/thai/NovelLucky[madara]';
import p_227 from '@plugins/turkish/ArazNovel[madara]'; import p_227 from '@plugins/thai/NovelPDF[madara]';
import p_228 from '@plugins/turkish/EKTAPLAR[madara]'; import p_228 from '@plugins/turkish/ArazNovel[madara]';
import p_229 from '@plugins/turkish/KodeksLibrary[lightnovelwp]'; import p_229 from '@plugins/turkish/EKTAPLAR[madara]';
import p_230 from '@plugins/turkish/MangaTR'; import p_230 from '@plugins/turkish/KodeksLibrary[lightnovelwp]';
import p_231 from '@plugins/turkish/NABSCANS[madara]'; import p_231 from '@plugins/turkish/MangaTR';
import p_232 from '@plugins/turkish/Namevt[lightnovelwp]'; import p_232 from '@plugins/turkish/NABSCANS[madara]';
import p_233 from '@plugins/turkish/NovelTR[lightnovelwp]'; import p_233 from '@plugins/turkish/Namevt[lightnovelwp]';
import p_234 from '@plugins/turkish/Noveloku[madara]'; import p_234 from '@plugins/turkish/NovelTR[lightnovelwp]';
import p_235 from '@plugins/turkish/RagnarScans[madara]'; import p_235 from '@plugins/turkish/Noveloku[madara]';
import p_236 from '@plugins/turkish/ThNovels[hotnovelpub]'; import p_236 from '@plugins/turkish/RagnarScans[madara]';
import p_237 from '@plugins/turkish/TurkceLightNovels[madara]'; import p_237 from '@plugins/turkish/ThNovels[hotnovelpub]';
import p_238 from '@plugins/turkish/WebNovelOku[madara]'; import p_238 from '@plugins/turkish/TurkceLightNovels[madara]';
import p_239 from '@plugins/turkish/epiknovel'; import p_239 from '@plugins/turkish/WebNovelOku[madara]';
import p_240 from '@plugins/turkish/kakikata[madara]'; import p_240 from '@plugins/turkish/epiknovel';
import p_241 from '@plugins/ukrainian/bakainua'; import p_241 from '@plugins/turkish/kakikata[madara]';
import p_242 from '@plugins/ukrainian/smakolykytl'; import p_242 from '@plugins/ukrainian/bakainua';
import p_243 from '@plugins/vietnamese/LNHako'; import p_243 from '@plugins/ukrainian/smakolykytl';
import p_244 from '@plugins/vietnamese/lightnovelvn'; import p_244 from '@plugins/vietnamese/LNHako';
import p_245 from '@plugins/vietnamese/nettruyen'; import p_245 from '@plugins/vietnamese/lightnovelvn';
import p_246 from '@plugins/vietnamese/truyenss'; import p_246 from '@plugins/vietnamese/nettruyen';
import p_247 from '@plugins/vietnamese/truyenss';
const PLUGINS: Plugin.PluginBase[] = [ const PLUGINS: Plugin.PluginBase[] = [
p_0, p_0,
@@ -495,5 +496,6 @@ const PLUGINS: Plugin.PluginBase[] = [
p_244, p_244,
p_245, p_245,
p_246, p_246,
p_247,
]; ];
export default PLUGINS; export default PLUGINS;