Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 47 additions & 43 deletions plugins/english/novelfire.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {
Expand Down Expand Up @@ -50,45 +50,44 @@ class NovelFire implements Plugin.PluginBase {
parseNovels(
loadedCheerio: CheerioAPI,
selector = '.novel-item',
isFirstPage = false,
): Plugin.NovelItem[] {
return loadedCheerio(selector)
.map((_, el) => {
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';

const imgElement = $el.find('.novel-cover > img');
const rawSrc = imgElement.attr('data-src') ?? imgElement.attr('src');
const novelCover = rawSrc
? new URL(rawSrc, this.site).href
: defaultCover;

const novelPath =
titleElement.attr('href') || fallbackElement.attr('href');

if (!novelPath) return null;

return {
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;
}
const novels: Plugin.NovelItem[] = [];

const elements = loadedCheerio(selector).toArray();
for (const el of elements) {
const $el = loadedCheerio(el);

const novelName =
$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');
const novelCover = rawSrc
? new URL(rawSrc, this.site).href
: defaultCover;

novels.push({
name: novelName,
cover: novelCover,
path,
});
}

return novels;
}

async popularNovels(
Expand All @@ -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();

Expand All @@ -125,7 +125,7 @@ class NovelFire implements Plugin.PluginBase {
false,
);

return this.parseNovels(loadedCheerio);
return this.parseNovels(loadedCheerio, '.novel-item', pageNo === 1);
}

async getAllChapters(
Expand Down Expand Up @@ -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();
Expand All @@ -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 = {
Expand Down
178 changes: 90 additions & 88 deletions plugins/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -495,5 +496,6 @@ const PLUGINS: Plugin.PluginBase[] = [
p_244,
p_245,
p_246,
p_247,
];
export default PLUGINS;
Loading