fix(english/mvlempyr.ts): structure fix on the search novel not inclu… (#2542)
Co-authored-by: Little Falcon <113622554+LittleFanwo@users.noreply.github.com>
This commit is contained in:
+56
-18
@@ -30,7 +30,7 @@ class MVLEMPYRPlugin implements Plugin.PluginBase {
|
|||||||
name = 'MVLEMPYR';
|
name = 'MVLEMPYR';
|
||||||
icon = 'src/en/mvlempyr/icon.png';
|
icon = 'src/en/mvlempyr/icon.png';
|
||||||
site = 'https://www.mvlempyr.io/';
|
site = 'https://www.mvlempyr.io/';
|
||||||
version = '1.0.13';
|
version = '1.0.14';
|
||||||
|
|
||||||
_chapSite = 'https://chap.heliosarchive.online/';
|
_chapSite = 'https://chap.heliosarchive.online/';
|
||||||
_allNovels: (Plugin.NovelItem & ExtraNovelData)[] | undefined;
|
_allNovels: (Plugin.NovelItem & ExtraNovelData)[] | undefined;
|
||||||
@@ -220,24 +220,50 @@ class MVLEMPYRPlugin implements Plugin.PluginBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async loadAll() {
|
async loadAll() {
|
||||||
const data = await fetchApi(
|
const baseUrl = this._chapSite + 'wp-json/wp/v2/mvl-novels';
|
||||||
this._chapSite + 'wp-json/wp/v2/mvl-novels?per_page=10000',
|
|
||||||
).then(r => r.json());
|
const fetchPage = async (
|
||||||
|
page: number,
|
||||||
|
perPage: number,
|
||||||
|
): Promise<MvlNovelItem[]> => {
|
||||||
|
const url = `${baseUrl}?per_page=${perPage}&page=${page}`;
|
||||||
|
const res = await fetchApi(url);
|
||||||
|
|
||||||
|
const text = await res.text();
|
||||||
|
if (!text) return [];
|
||||||
|
try {
|
||||||
|
const data = JSON.parse(text);
|
||||||
|
const items = Array.isArray(data) ? (data as MvlNovelItem[]) : [];
|
||||||
|
return items;
|
||||||
|
} catch (e) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Fire all 4 requests at once — no delay, no sequencing
|
||||||
|
const [big, p11, p12, p13] = await Promise.all([
|
||||||
|
fetchPage(1, 10000), // items 1 – 10,000
|
||||||
|
fetchPage(11, 1000), // items 10,001 – 11,000
|
||||||
|
fetchPage(12, 1000), // items 11,001 – 12,000
|
||||||
|
fetchPage(13, 1000), // items 12,001 – ~12,070 (may 400 if out of range → returns [])
|
||||||
|
]);
|
||||||
|
|
||||||
|
const allData = big.concat(p11, p12, p13);
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
return data.map(novel => {
|
const mapped = allData.map(novel => ({
|
||||||
return {
|
name: novel.name,
|
||||||
name: novel.name,
|
path: 'novel/' + novel.slug,
|
||||||
path: 'novel/' + novel.slug,
|
cover: `https://assets.mvlempyr.app/images/600/${novel['novel-code']}.webp`,
|
||||||
cover: `https://assets.mvlempyr.app/images/600/${novel['novel-code']}.webp`,
|
avgReview: novel['average-review'],
|
||||||
avgReview: novel['average-review'],
|
reviewCount: novel['total-reviews'],
|
||||||
reviewCount: novel['total-reviews'],
|
chapterCount: novel['total-chapters'],
|
||||||
chapterCount: novel['total-chapters'],
|
created: new Date(novel['createdOn']).getTime(),
|
||||||
created: new Date(novel['createdOn']).getTime(),
|
genres: novel.genre,
|
||||||
genres: novel.genre,
|
tags: novel.tags,
|
||||||
tags: novel.tags,
|
random: Math.random(),
|
||||||
random: Math.random(),
|
}));
|
||||||
};
|
return mapped;
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
filters = {
|
filters = {
|
||||||
@@ -1250,4 +1276,16 @@ type ExtraNovelData = {
|
|||||||
tags: string[];
|
tags: string[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type MvlNovelItem = {
|
||||||
|
name: string;
|
||||||
|
slug: string;
|
||||||
|
'novel-code': string | number;
|
||||||
|
'average-review': number;
|
||||||
|
'total-reviews': number;
|
||||||
|
'total-chapters': number;
|
||||||
|
createdOn: string;
|
||||||
|
genre: string[];
|
||||||
|
tags: string[];
|
||||||
|
};
|
||||||
|
|
||||||
export default new MVLEMPYRPlugin();
|
export default new MVLEMPYRPlugin();
|
||||||
|
|||||||
Reference in New Issue
Block a user