added filters

This commit is contained in:
Schnitzel5
2024-12-21 20:11:21 +01:00
parent bf628beca8
commit 734a922c4e

View File

@@ -34,6 +34,7 @@ class DefaultExtension extends MProvider {
getHeaders(url) { getHeaders(url) {
throw new Error("getHeaders not implemented"); throw new Error("getHeaders not implemented");
} }
mangaListFromPage(res) { mangaListFromPage(res) {
const doc = new Document(res.body); const doc = new Document(res.body);
const mangaElements = doc.select("div.search_main_box_nu"); const mangaElements = doc.select("div.search_main_box_nu");
@@ -48,6 +49,7 @@ class DefaultExtension extends MProvider {
doc.selectFirst("div.digg_pagination > a.next_page").text == " →"; doc.selectFirst("div.digg_pagination > a.next_page").text == " →";
return { list: list, hasNextPage }; return { list: list, hasNextPage };
} }
toStatus(status) { toStatus(status) {
if (status.includes("Ongoing")) return 0; if (status.includes("Ongoing")) return 0;
else if (status.includes("Completed")) return 1; else if (status.includes("Completed")) return 1;
@@ -55,32 +57,6 @@ class DefaultExtension extends MProvider {
else if (status.includes("Dropped")) return 3; else if (status.includes("Dropped")) return 3;
else return 5; else return 5;
} }
parseDate(date) {
const months = {
january: "01",
february: "02",
march: "03",
april: "04",
may: "05",
june: "06",
july: "07",
august: "08",
september: "09",
october: "10",
november: "11",
december: "12",
};
date = date
.toLowerCase()
.replace(/(st|nd|rd|th)/g, "")
.split(" ");
if (!(date[0] in months)) {
return String(new Date().valueOf());
}
date[0] = months[date[0]];
const formattedDate = `${date[2]}-${date[0]}-${date[1].padStart(2, "0")}`; // Format YYYY-MM-DD
return String(new Date(formattedDate).valueOf());
}
async getPopular(page) { async getPopular(page) {
const res = await new Client().get( const res = await new Client().get(
@@ -97,11 +73,41 @@ class DefaultExtension extends MProvider {
); );
return this.mangaListFromPage(res); return this.mangaListFromPage(res);
} }
async search(query, page, filters) { async search(query, page, filters) {
const res = await new Client().get( let url = `${this.source.baseUrl}/series-finder/?sf=1&sh=${query}&pg=${page}`;
`${this.source.baseUrl}/series-finder/?sf=1&sh=${query}&sort=sdate&order=desc&pg=${page}`,
this.headers if (!filters || filters.length == 0) {
); const res = await new Client().get(url, this.headers);
return this.mangaListFromPage(res);
}
if (filters[0].state.filter(f => f.state == true).length > 0) {
const values = filters[0].state.filter(f => f.state == true).map(f => f.value).join(",");
url += `&nt=${values}`;
}
if (filters[1].state.filter(f => f.state == true).length > 0) {
const values = filters[1].state.filter(f => f.state == true).map(f => f.value).join(",");
url += `&org=${values}`;
}
if (filters[2].state.filter(f => f.state == 1 || f.state == 2).length > 0) {
const including = filters[2].state.filter(f => f.state == 1).map(f => f.value).join(",");
const excluding = filters[2].state.filter(f => f.state == 2).map(f => f.value).join(",");
if (including.length > 0) url += `&gi=${including}`;
if (excluding.length > 0) url += `&ge=${excluding}`;
}
if (filters[3].state.filter(f => f.state == true).length > 0) {
const values = filters[3].state.filter(f => f.state == true).map(f => f.value).join(",");
url += `&ss=${values}`;
}
url += `&sort=${filters[4].values[filters[4].state].value}`;
url += `&order=${filters[5].values[filters[5].state].value}`;
const res = await new Client().get(url, this.headers);
return this.mangaListFromPage(res); return this.mangaListFromPage(res);
} }
@@ -185,7 +191,205 @@ class DefaultExtension extends MProvider {
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36",
}); });
const doc = new Document(res.body); const doc = new Document(res.body);
if (res.body.includes("blogspot")) { const domain = res.body;
if (domain.includes("anotivereads")) {
const title =
doc.selectFirst("#comic-nav-name")?.text.trim() ||
"";
const content = doc.selectFirst("#spliced-comic")?.innerHtml;
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("asuratls")) {
const title =
doc.selectFirst(".post-body > div > b")?.text.trim() ||
"";
const content = doc.selectFirst(".post-body")?.innerHtml?.replace(title, "");
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("daoist")) {
const title =
doc.selectFirst(".chapter__title")?.text.trim() ||
"";
const content = doc.selectFirst(".chapter__content")?.innerHtml;
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("darkstartranslations")) {
const title =
doc.selectFirst("ol.breadcrumb > li")?.text.trim() ||
"";
const content = doc.selectFirst(".text-left")?.innerHtml?.replace("<br>", "<br><br>");
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("fictionread")) {
const title =
doc.selectFirst(".title-image > span")?.text.trim() ||
"";
const content = doc.selectFirst(".content")?.innerHtml;
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("helscans")) {
const title =
doc.selectFirst(".entry-title-main")?.text.trim() ||
"";
const content = doc.selectFirst("#readerarea.rdminimal")?.innerHtml;
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("hiraethtranslation")) {
const title =
doc.selectFirst("li.active")?.text.trim() ||
"";
const content = doc.selectFirst(".text-left")?.innerHtml;
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("hostednovel")) {
const title =
doc.selectFirst("#chapter-title")?.text.trim() ||
"";
const content = doc.selectFirst("#chapter-content")?.innerHtml;
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("inoveltranslation")) {
const content = doc.selectFirst(".styles_content__JHK8G")?.innerHtml;
return `${content}`;
}
if (domain.includes("isotls")) {
const title =
doc.selectFirst("head > title")?.text.trim() ||
"";
const content = doc.selectFirst("main > article")?.innerHtml;
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("mirilu")) {
const title =
doc.selectFirst(".entry-content > p > strong")?.text.trim() ||
"";
const content = doc.selectFirst(".entry-content")?.innerHtml;
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("novelplex")) {
const title =
doc.selectFirst(".halChap--jud")?.text.trim() ||
"";
const content = doc.selectFirst(".halChap--kontenInner")?.innerHtml;
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("novelworldtranslations")) {
const title =
doc.selectFirst(".entry-title")?.text.trim() ||
"";
const content = doc.selectFirst(".entry-content")?.innerHtml?.replace(/&nbsp;/g, '')?.replace(/\n/g, '<br>');
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("readingpia")) {
const content = doc.selectFirst(".chapter-body")?.innerHtml;
return `${content}`;
}
if (domain.includes("sacredtexttranslations")) {
const title =
doc.selectFirst(".entry-title")?.text.trim() ||
"";
const content = doc.selectFirst(".entry-content")?.innerHtml;
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("scribblehub")) {
const title =
doc.selectFirst(".chapter-title")?.text.trim() ||
"";
const content = doc.selectFirst(".chp_raw")?.innerHtml;
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("tinytranslation")) {
const title =
doc.selectFirst(".title-content")?.text.trim() ||
"";
const content = doc.selectFirst(".content")?.innerHtml;
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("tumblr")) {
const content = doc.selectFirst(".post")?.innerHtml;
return `${content}`;
}
if (domain.includes("wattpad")) {
const title =
doc.selectFirst(".h2")?.text.trim() ||
"";
const content = doc.selectFirst(".part-content > pre")?.innerHtml;
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("webnovel")) {
const title =
doc.selectFirst(".cha-tit > .pr > .dib")?.text.trim() ||
"";
const content = doc.selectFirst(".cha-words")?.innerHtml || doc.selectFirst("._content")?.innerHtml;
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("wetriedtls")) {
const content = doc.selectFirst("script:contains(\"p dir=\")")?.innerHtml || doc.selectFirst("script:contains(\"u003c\")")?.innerHtml;
if (content) {
const jsonString_wetried = content.slice(
content.indexOf('.push(') + '.push('.length,
content.lastIndexOf(')'),
);
return `${JSON.parse(jsonString_wetried)[1]}`;
}
return "<p>Failed to parse JSON content!</p>";
}
if (domain.includes("wuxiaworld")) {
const title =
doc.selectFirst("h4 > span")?.text.trim() ||
"";
const content = doc.selectFirst(".chapter-content")?.innerHtml;
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("zetrotranslation")) {
const title =
doc.selectFirst(".text-left h2")?.text.trim() ||
doc.selectFirst(".active")?.text.trim() ||
"";
const content = doc.selectFirst(".text-left")?.innerHtml;
return `<h2>${title}</h2><hr><br>${content}`;
}
if (domain.includes("webnovel")) {
const title =
doc.selectFirst("#page > .chapter_content > .cha-tit > div > div")?.text.trim() ||
"";
const content = doc.selectFirst("#page > .chapter_content > .cha-content > .cha-words")?.innerHtml.replaceAll(/<i\s*.*?>.*?<\/i>/gm, "");
return `<h2>${title}</h2><hr><br>${content}`;
}
const blogspotElements = [
doc.selectFirst("meta[name=\"google-adsense-platform-domain\"]").attr("content"),
doc.selectFirst("meta[name=\"generator\"]").attr("content"),
];
const isBlogspot = blogspotElements.some(e => {
return e?.toLowerCase().includes("blogspot") || e?.toLowerCase().includes("blogger")
});
if (isBlogspot) {
const title = const title =
doc.selectFirst("h3.post-title")?.text.trim() || doc.selectFirst("h3.post-title")?.text.trim() ||
doc.selectFirst("h3.entry-title")?.text.trim() || doc.selectFirst("h3.entry-title")?.text.trim() ||
@@ -196,9 +400,400 @@ class DefaultExtension extends MProvider {
doc.selectFirst("div.content-post")?.innerHtml; doc.selectFirst("div.content-post")?.innerHtml;
return `<h2>${title}</h2><hr><br>${content}`; return `<h2>${title}</h2><hr><br>${content}`;
} }
const wordpressElements = [
doc.selectFirst("#dcl_comments-js-extra")?.innerHtml,
doc.selectFirst("meta[name=\"generator\"]")?.attr("content"),
doc.selectFirst(".powered-by")?.text,
doc.selectFirst("footer")?.text,
];
let isWordpress = wordpressElements.some(e => {
return e?.toLowerCase().includes("wordpress") || e?.toLowerCase().includes("site kit by google")
});
if (isWordpress || domain.includes("etherreads") || domain.includes("soafp")) {
let title =
doc.selectFirst(".entry-title")?.text.trim() ||
doc.selectFirst(".entry-title-main")?.text.trim() ||
doc.selectFirst(".chapter__title")?.text.trim() ||
doc.selectFirst(".sp-title")?.text.trim() ||
doc.selectFirst(".title-content")?.text.trim() ||
doc.selectFirst(".wp-block-post-title")?.text.trim() ||
doc.selectFirst(".title_story")?.text.trim() ||
doc.selectFirst(".active")?.text.trim() ||
doc.selectFirst("head title")?.text.trim() ||
doc.selectFirst("h1.leading-none ~ h2")?.text.trim() ||
"";
const subtitle =
doc.selectFirst(".cat-series")?.text.trim() ||
doc.selectFirst("h1.leading-none ~ span")?.text.trim() ||
"";
if (subtitle && subtitle != "") {
title = subtitle;
}
const content =
doc.selectFirst(".rdminimal")?.innerHtml ||
doc.selectFirst(".entry-content")?.innerHtml ||
doc.selectFirst(".chapter__content")?.innerHtml ||
doc.selectFirst(".prevent-select")?.innerHtml ||
doc.selectFirst(".text_story")?.innerHtml ||
doc.selectFirst(".contenta")?.innerHtml ||
doc.selectFirst(".single_post")?.innerHtml ||
doc.selectFirst(".post-entry")?.innerHtml ||
doc.selectFirst(".main-content")?.innerHtml ||
doc.selectFirst(".post-content")?.innerHtml ||
doc.selectFirst(".content")?.innerHtml ||
doc.selectFirst(".page-body")?.innerHtml ||
doc.selectFirst(".td-page-content")?.innerHtml ||
doc.selectFirst(".reader-content")?.innerHtml ||
doc.selectFirst("#content")?.innerHtml ||
doc.selectFirst("#the-content")?.innerHtml ||
doc.selectFirst("article.post")?.innerHtml;
return `<h2>${title}</h2><hr><br>${content}`;
}
return "<p>Domain not supported yet</p>"; return "<p>Domain not supported yet</p>";
} }
getFilterList() {
return [
{
type_name: "GroupFilter",
name: "Novel Type",
state: [
{
type_name: "CheckBox",
name: "Web Novel",
value: "2444",
},
{
type_name: "CheckBox",
name: "Light Novel",
value: "2443",
},
{
type_name: "CheckBox",
name: "Published Novel",
value: "26874",
},
],
},
{
type_name: "GroupFilter",
name: "Original Language",
state: [
{
type_name: "CheckBox",
name: "Chinese",
value: "495",
},
{
type_name: "CheckBox",
name: "Filipino",
value: "9181",
},
{
type_name: "CheckBox",
name: "Indonesian",
value: "9179",
},
{
type_name: "CheckBox",
name: "Japanese",
value: "496",
},
{
type_name: "CheckBox",
name: "Khmer",
value: "18657",
},
{
type_name: "CheckBox",
name: "Korean",
value: "497",
},
{
type_name: "CheckBox",
name: "Malaysian",
value: "9183",
},
{
type_name: "CheckBox",
name: "Thai",
value: "9954",
},
{
type_name: "CheckBox",
name: "Vietnamese",
value: "9177",
},
],
},
{
type_name: "GroupFilter",
name: "Genre",
state: [
{
type_name: "TriState",
name: "Action",
value: "8",
},
{
type_name: "TriState",
name: "Adventure",
value: "13",
},
{
type_name: "TriState",
name: "Comedy",
value: "17",
},
{
type_name: "TriState",
name: "Drama",
value: "9",
},
{
type_name: "TriState",
name: "Ecchi",
value: "292",
},
{
type_name: "TriState",
name: "Fantasy",
value: "5",
},
{
type_name: "TriState",
name: "Gender Bender",
value: "168",
},
{
type_name: "TriState",
name: "Harem",
value: "3",
},
{
type_name: "TriState",
name: "Horror",
value: "343",
},
{
type_name: "TriState",
name: "Josei",
value: "324",
},
{
type_name: "TriState",
name: "Martial Arts",
value: "14",
},
{
type_name: "TriState",
name: "Mature",
value: "4",
},
{
type_name: "TriState",
name: "Mecha",
value: "10",
},
{
type_name: "TriState",
name: "Mystery",
value: "245",
},
{
type_name: "TriState",
name: "Psychological",
value: "486",
},
{
type_name: "TriState",
name: "Romance",
value: "15",
},
{
type_name: "TriState",
name: "School",
value: "6",
},
{
type_name: "TriState",
name: "Sci-Fi",
value: "11",
},
{
type_name: "TriState",
name: "Seinen",
value: "18",
},
{
type_name: "TriState",
name: "Shoujo",
value: "157",
},
{
type_name: "TriState",
name: "Shoujo Ai",
value: "851",
},
{
type_name: "TriState",
name: "Shounen",
value: "12",
},
{
type_name: "TriState",
name: "Shounen Ai",
value: "1692",
},
{
type_name: "TriState",
name: "Slice of Life",
value: "7",
},
{
type_name: "TriState",
name: "Smut",
value: "281",
},
{
type_name: "TriState",
name: "Sports",
value: "1357",
},
{
type_name: "TriState",
name: "Supernatural",
value: "16",
},
{
type_name: "TriState",
name: "Tragedy",
value: "132",
},
{
type_name: "TriState",
name: "Wuxia",
value: "479",
},
{
type_name: "TriState",
name: "Xianxia",
value: "480",
},
{
type_name: "TriState",
name: "Xuanhuan",
value: "3954",
},
{
type_name: "TriState",
name: "Yaoi",
value: "560",
},
{
type_name: "TriState",
name: "Yuri",
value: "922",
},
],
},
{
type_name: "GroupFilter",
name: "Status",
state: [
{
type_name: "CheckBox",
name: "All",
value: "",
},
{
type_name: "CheckBox",
name: "Completed",
value: "2",
},
{
type_name: "CheckBox",
name: "Ongoing",
value: "3",
},
{
type_name: "CheckBox",
name: "Hiatus",
value: "4",
},
],
},
{
type_name: "SelectFilter",
type: "sort",
name: "Sort",
state: 0,
values: [
{
type_name: "SelectOption",
name: "Last Updated",
value: "sdate",
},
{
type_name: "SelectOption",
name: "Rating",
value: "srate",
},
{
type_name: "SelectOption",
name: "Rank",
value: "srank",
},
{
type_name: "SelectOption",
name: "Reviews",
value: "sreview",
},
{
type_name: "SelectOption",
name: "Chapters",
value: "srel",
},
{
type_name: "SelectOption",
name: "Title",
value: "abc",
},
{
type_name: "SelectOption",
name: "Readers",
value: "sread",
},
{
type_name: "SelectOption",
name: "Frequency",
value: "sfrel",
},
],
},
{
type_name: "SelectFilter",
name: "Order",
state: 0,
values: [
{
type_name: "SelectOption",
name: "Descending",
value: "desc",
},
{
type_name: "SelectOption",
name: "Ascending",
value: "asc",
},
],
}
];
}
getSourcePreferences() { getSourcePreferences() {
throw new Error("getSourcePreferences not implemented"); throw new Error("getSourcePreferences not implemented");
} }