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