mirror of
https://github.com/kodjodevf/mangayomi-extensions.git
synced 2026-02-14 10:51:17 +00:00
Refactor webtoons search logic and add filter options
This commit is contained in:
@@ -25,36 +25,11 @@ class DefaultExtension extends MProvider {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
async getItem(url, selector) {
|
|
||||||
const res = await new Client().get(this.source.baseUrl + url, this.headers);
|
|
||||||
const doc = new Document(res.body);
|
|
||||||
const mangas = [];
|
|
||||||
const elements = doc.select(selector);
|
|
||||||
for (const element of elements) {
|
|
||||||
const linkElement = element.selectFirst("a");
|
|
||||||
const imageElement = linkElement.selectFirst("img");
|
|
||||||
const imageUrl = imageElement.attr("src");
|
|
||||||
const name = element.selectFirst("p.subj").text;
|
|
||||||
const link = linkElement.attr("href");
|
|
||||||
const genre = [];
|
|
||||||
if (element.selectFirst("p.genre").text === "") {
|
|
||||||
genre.push(element.selectFirst("span.genre").text);
|
|
||||||
} else {
|
|
||||||
genre.push(element.selectFirst("p.genre").text);
|
|
||||||
}
|
|
||||||
mangas.push({
|
|
||||||
name: name,
|
|
||||||
imageUrl: imageUrl,
|
|
||||||
link: link,
|
|
||||||
genre: genre,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return mangas;
|
|
||||||
}
|
|
||||||
|
|
||||||
mangaFromElement(doc) {
|
mangaFromElement(doc) {
|
||||||
const list = [];
|
const list = [];
|
||||||
for (const el of doc.select(`div.webtoon_list_wrap li a`)) {
|
for (const el of doc.select(
|
||||||
|
`div.webtoon_list_wrap li a, ul.webtoon_list li a`,
|
||||||
|
)) {
|
||||||
const imageUrl = el.selectFirst("img").getSrc;
|
const imageUrl = el.selectFirst("img").getSrc;
|
||||||
const name = el.selectFirst("strong.title").text;
|
const name = el.selectFirst("strong.title").text;
|
||||||
const link = el.getHref;
|
const link = el.getHref;
|
||||||
@@ -91,41 +66,24 @@ class DefaultExtension extends MProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async search(query, page, filters) {
|
async search(query, page, filters) {
|
||||||
let keyword = query.trim().replace(/\s+/g, "+");
|
const keyword = query.trim().replace(/\s+/g, "+");
|
||||||
let hasNextPage = true;
|
const baseurl = this.source.baseUrl;
|
||||||
let type_originals = "WEBTOON";
|
let url = `${baseurl}/${this.langCode()}`;
|
||||||
let type_canvas = "CHALLENGE";
|
|
||||||
let fetch_originals = "ul.card_lst li";
|
|
||||||
let fetch_canvas = "div.challenge_lst.search li";
|
|
||||||
let list_originals = [];
|
|
||||||
let list_canvas = [];
|
|
||||||
let list = [];
|
|
||||||
|
|
||||||
if (query !== "") {
|
if (query !== "") {
|
||||||
list_originals = await this.getItem(
|
url += `/search/${filters[0].values[filters[0].state].value}?keyword=${keyword}&page=${page}`;
|
||||||
`/${this.langCode()}/search?keyword=${keyword}&searchType=` +
|
} else if (filters) {
|
||||||
type_originals +
|
url += `/genres/${filters[2].values[filters[2].state].value}`;
|
||||||
`&page=${page}`,
|
|
||||||
fetch_originals,
|
|
||||||
);
|
|
||||||
list_canvas = await this.getItem(
|
|
||||||
`/${this.langCode()}/search?keyword=${keyword}&searchType=` +
|
|
||||||
type_canvas +
|
|
||||||
`&page=${page}`,
|
|
||||||
fetch_canvas,
|
|
||||||
);
|
|
||||||
if (filters) {
|
|
||||||
}
|
|
||||||
list = list_originals.concat(list_canvas);
|
|
||||||
} else {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (list.length === 0) {
|
const res = await new Client().get(url);
|
||||||
hasNextPage = false;
|
const doc = new Document(res.body);
|
||||||
}
|
const list = this.mangaFromElement(doc);
|
||||||
|
const hasNextPage = list.length !== 0;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
list: list,
|
list,
|
||||||
hasNextPage: hasNextPage,
|
hasNextPage,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -339,6 +297,23 @@ class DefaultExtension extends MProvider {
|
|||||||
|
|
||||||
getFilterList() {
|
getFilterList() {
|
||||||
return [
|
return [
|
||||||
|
{
|
||||||
|
type: "searchType",
|
||||||
|
name: "Search Type",
|
||||||
|
type_name: "SelectFilter",
|
||||||
|
values: [
|
||||||
|
{
|
||||||
|
type_name: "SelectOption",
|
||||||
|
name: "Originals",
|
||||||
|
value: "originals",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type_name: "SelectOption",
|
||||||
|
name: "Canvas",
|
||||||
|
value: "canvas",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
type: "sort",
|
type: "sort",
|
||||||
name: "Official or Challenge",
|
name: "Official or Challenge",
|
||||||
|
|||||||
Reference in New Issue
Block a user