fix(teamx): simplify chapter parsing and fix date format

This commit is contained in:
xMohnad
2025-06-04 20:27:28 +03:00
parent 073bc7c109
commit 4920b3a216

View File

@@ -36,7 +36,7 @@ class DefaultExtension extends MProvider {
} }
parseChapterDate(date) { parseChapterDate(date) {
return new Date(date).toISOString().split("T")[0]; return new Date(date).getTime().toString();
} }
getBaseUrl() { getBaseUrl() {
@@ -60,50 +60,6 @@ class DefaultExtension extends MProvider {
return new Document(res.body); return new Document(res.body);
} }
// Chapters
chapterFromElement(element) {
const chpNum = element.selectFirst("div.epl-num")?.text.trim();
const chpTitle = element.selectFirst("div.epl-title")?.text.trim();
let name;
if (chpTitle?.includes(chpNum?.replace(/[^0-9]/g, ""))) {
name = chpTitle;
} else if (!chpNum) {
name = chpTitle;
} else if (!chpTitle) {
name = chpNum;
} else {
name = `${chpNum} - ${chpTitle}`;
}
return {
name,
dateUpload: this.parseChapterDate(
element.selectFirst("div.epl-date")?.text.trim(),
),
url: element.getHref,
};
}
async chapterListParse(response) {
const allElements = [];
let doc = response;
while (true) {
const pageChapters = doc.select("div.eplister ul a");
if (pageChapters.length === 0) break;
allElements.push(...pageChapters);
const nextPage = doc.select("a[rel=next]");
if (nextPage.length === 0) break;
const nextUrl = nextPage[0].attr("href");
doc = await this.request(nextUrl, false);
}
return allElements.map((element) => this.chapterFromElement(element));
}
// Manga Listing // Manga Listing
async getMangaList(slug) { async getMangaList(slug) {
const doc = await this.request(`/${slug}`); const doc = await this.request(`/${slug}`);
@@ -152,9 +108,34 @@ class DefaultExtension extends MProvider {
return { list, hasNextPage: false }; return { list, hasNextPage: false };
} }
// Chapters
chapterFromElement(element) {
const chpNum = element.selectFirst("div.epl-num")?.text.trim();
const chpTitle = element.selectFirst("div.epl-title")?.text.trim();
let name;
if (chpTitle?.includes(chpNum?.replace(/[^0-9]/g, ""))) {
name = chpTitle;
} else if (!chpNum) {
name = chpTitle;
} else if (!chpTitle) {
name = chpNum;
} else {
name = `${chpNum} - ${chpTitle}`;
}
return {
name,
dateUpload: this.parseChapterDate(
element.selectFirst("div.epl-date")?.text.trim(),
),
url: element.getHref,
};
}
// Detail // Detail
async getDetail(url) { async getDetail(url) {
const doc = await this.request(url, false); let doc = await this.request(url, false);
const title = doc.selectFirst("div.author-info-title h1")?.text.trim(); const title = doc.selectFirst("div.author-info-title h1")?.text.trim();
const imageUrl = doc.selectFirst("img.shadow-sm")?.getSrc; const imageUrl = doc.selectFirst("img.shadow-sm")?.getSrc;
@@ -178,7 +159,24 @@ class DefaultExtension extends MProvider {
.select("div.review-author-info a") .select("div.review-author-info a")
.map((e) => e.text.trim()); .map((e) => e.text.trim());
const chapters = await this.chapterListParse(doc); const allElements = [];
for (;;) {
const pageChapters = doc.select("div.eplister ul a");
if (!pageChapters || pageChapters.length === 0) break;
allElements.push(...pageChapters);
const nextPage = doc.select("a[rel=next]");
if (!nextPage || nextPage.length === 0) break;
const nextUrl = nextPage[0].attr("href");
if (!nextUrl) break;
doc = await this.request(nextUrl, false);
}
const chapters = allElements.map((element) =>
this.chapterFromElement(element),
);
return { return {
title, title,