mirror of
https://github.com/kodjodevf/mangayomi-extensions.git
synced 2026-02-15 03:10:59 +00:00
extension(sudatchi): Added search and filters
This commit is contained in:
@@ -6,7 +6,7 @@ const mangayomiSources = [{
|
|||||||
"iconUrl": "https://www.google.com/s2/favicons?sz=128&domain=https://sudatchi.com",
|
"iconUrl": "https://www.google.com/s2/favicons?sz=128&domain=https://sudatchi.com",
|
||||||
"typeSource": "single",
|
"typeSource": "single",
|
||||||
"isManga": null,
|
"isManga": null,
|
||||||
"version": "0.0.1",
|
"version": "0.0.2",
|
||||||
"dateFormat": "",
|
"dateFormat": "",
|
||||||
"dateFormatLocale": "",
|
"dateFormatLocale": "",
|
||||||
"pkgPath": "anime/src/en/sudatchi.js"
|
"pkgPath": "anime/src/en/sudatchi.js"
|
||||||
@@ -35,11 +35,12 @@ class DefaultExtension extends MProvider {
|
|||||||
return JSON.parse(jsonData);
|
return JSON.parse(jsonData);
|
||||||
}
|
}
|
||||||
|
|
||||||
async formList(latestEpisodes) {
|
|
||||||
|
async formListFromHome(animes) {
|
||||||
var list = []
|
var list = []
|
||||||
for (var item of latestEpisodes) {
|
var lang = this.getPreference("sudatchi_pref_lang")
|
||||||
|
for (var item of animes) {
|
||||||
var details = "Anime" in item ? item.Anime : item
|
var details = "Anime" in item ? item.Anime : item
|
||||||
var lang = this.getPreference("sudatchi_pref_lang")
|
|
||||||
var name = details.titleRomanji
|
var name = details.titleRomanji
|
||||||
switch (lang) {
|
switch (lang) {
|
||||||
case "e": {
|
case "e": {
|
||||||
@@ -66,11 +67,11 @@ class DefaultExtension extends MProvider {
|
|||||||
async getPopular(page) {
|
async getPopular(page) {
|
||||||
var extract = await this.extractFromUrl(this.source.baseUrl)
|
var extract = await this.extractFromUrl(this.source.baseUrl)
|
||||||
var pageProps = extract.props.pageProps
|
var pageProps = extract.props.pageProps
|
||||||
var latestEpisodes = await this.formList(pageProps.latestEpisodes)
|
var latestEpisodes = await this.formListFromHome(pageProps.latestEpisodes)
|
||||||
var latestAnimes = await this.formList(pageProps.latestAnimes)
|
var latestAnimes = await this.formListFromHome(pageProps.latestAnimes)
|
||||||
var newAnimes = await this.formList(pageProps.newAnimes)
|
var newAnimes = await this.formListFromHome(pageProps.newAnimes)
|
||||||
var animeSpotlight = await this.formList(pageProps.AnimeSpotlight)
|
var animeSpotlight = await this.formListFromHome(pageProps.AnimeSpotlight)
|
||||||
var list = [...animeSpotlight, ...newAnimes, ...latestAnimes, ...latestEpisodes]
|
var list = [...animeSpotlight, ...latestAnimes, ...latestEpisodes, ...newAnimes]
|
||||||
return {
|
return {
|
||||||
list,
|
list,
|
||||||
hasNextPage: false
|
hasNextPage: false
|
||||||
@@ -82,7 +83,7 @@ class DefaultExtension extends MProvider {
|
|||||||
async getLatestUpdates(page) {
|
async getLatestUpdates(page) {
|
||||||
var extract = await this.extractFromUrl(this.source.baseUrl)
|
var extract = await this.extractFromUrl(this.source.baseUrl)
|
||||||
var latest = extract.props.pageProps.latestEpisodes
|
var latest = extract.props.pageProps.latestEpisodes
|
||||||
var list = await this.formList(latest)
|
var list = await this.formListFromHome(latest)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
list,
|
list,
|
||||||
@@ -90,7 +91,26 @@ class DefaultExtension extends MProvider {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
async search(query, page, filters) {
|
async search(query, page, filters) {
|
||||||
throw new Error("search not implemented");
|
var type = '';
|
||||||
|
for (var filter of filters[0].state) if (filter.state) type += `,${filter.value}`;
|
||||||
|
var status = '';
|
||||||
|
for (var filter of filters[1].state) if (filter.state) status += `,${filter.value}`;
|
||||||
|
var genre = '';
|
||||||
|
for (var filter of filters[2].state) if (filter.state) genre += `,${filter.value}`;
|
||||||
|
var year = '';
|
||||||
|
for (var filter of filters[3].state) if (filter.state) year += `,${filter.value}`;
|
||||||
|
|
||||||
|
var api = `https://sudatchi.com/api/directory?page=${page}&genres=${genre}&years=${year}&types=${type}&status=${status}&title=${query}&category=`
|
||||||
|
var response = await new Client().get(api);
|
||||||
|
var body = JSON.parse(response.body);
|
||||||
|
|
||||||
|
var list = await this.formListFromHome(body.animes)
|
||||||
|
var hasNextPage = body.pages > page ? true : false;
|
||||||
|
|
||||||
|
return {
|
||||||
|
list,
|
||||||
|
hasNextPage
|
||||||
|
};
|
||||||
}
|
}
|
||||||
async getDetail(url) {
|
async getDetail(url) {
|
||||||
throw new Error("getDetail not implemented");
|
throw new Error("getDetail not implemented");
|
||||||
@@ -112,7 +132,84 @@ class DefaultExtension extends MProvider {
|
|||||||
throw new Error("getPageList not implemented");
|
throw new Error("getPageList not implemented");
|
||||||
}
|
}
|
||||||
getFilterList() {
|
getFilterList() {
|
||||||
throw new Error("getFilterList not implemented");
|
var currentYear = new Date().getFullYear();
|
||||||
|
var formattedYears = Array.from({ length: currentYear - 2003 }, (_, i) => (i + 2004).toString()).map(year => ({ type_name: 'CheckBox', name: year, value: year }));
|
||||||
|
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
type_name: "GroupFilter",
|
||||||
|
name: "Type",
|
||||||
|
state: [
|
||||||
|
["All", ""],
|
||||||
|
["BD", "BD"],
|
||||||
|
["Movie", "Movie"],
|
||||||
|
["ONA", "ONA"],
|
||||||
|
["OVA", "OVA"],
|
||||||
|
["Special", "Special"],
|
||||||
|
["TV", "TV"]
|
||||||
|
].map(x => ({ type_name: 'CheckBox', name: x[0], value: x[1] }))
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type_name: "GroupFilter",
|
||||||
|
name: "Status",
|
||||||
|
state: [
|
||||||
|
["All", ""],
|
||||||
|
["Currently Airing", "Currently Airing"],
|
||||||
|
["Finished Airing", "Finished Airing"],
|
||||||
|
["Hiatus", "Hiatus"],
|
||||||
|
["Not Yet Released", "Not Yet Released"]
|
||||||
|
].map(x => ({ type_name: 'CheckBox', name: x[0], value: x[1] }))
|
||||||
|
}, {
|
||||||
|
type_name: "GroupFilter",
|
||||||
|
name: "Genre",
|
||||||
|
state: [
|
||||||
|
["Action", "Action"],
|
||||||
|
["Adventure", "Adventure"],
|
||||||
|
["Comedy", "Comedy"],
|
||||||
|
["Cyberpunk", "Cyberpunk"],
|
||||||
|
["Demons", "Demons"],
|
||||||
|
["Drama", "Drama"],
|
||||||
|
["Ecchi", "Ecchi"],
|
||||||
|
["Fantasy", "Fantasy"],
|
||||||
|
["Harem", "Harem"],
|
||||||
|
["Hentai", "Hentai"],
|
||||||
|
["Historical", "Historical"],
|
||||||
|
["Horror", "Horror"],
|
||||||
|
["Isekai", "Isekai"],
|
||||||
|
["Josei", "Josei"],
|
||||||
|
["Magic", "Magic"],
|
||||||
|
["Martial Arts", "Martial Arts"],
|
||||||
|
["Mecha", "Mecha"],
|
||||||
|
["Military", "Military"],
|
||||||
|
["Music", "Music"],
|
||||||
|
["Mystery", "Mystery"],
|
||||||
|
["Police", "Police"],
|
||||||
|
["Post-Apocalyptic", "Post-Apocalyptic"],
|
||||||
|
["Psychological", "Psychological"],
|
||||||
|
["Romance", "Romance"],
|
||||||
|
["School", "School"],
|
||||||
|
["Sci-Fi ", "Sci-Fi "],
|
||||||
|
["Seinen", "Seinen"],
|
||||||
|
["Shoujo", "Shoujo"],
|
||||||
|
["Shounen", "Shounen"],
|
||||||
|
["Slice of Life", "Slice of Life"],
|
||||||
|
["Space", "Space"],
|
||||||
|
["Sports", "Sports"],
|
||||||
|
["Super Power", "Super Power"],
|
||||||
|
["Supernatural", "Supernatural"],
|
||||||
|
["Thriller", "Thriller"],
|
||||||
|
["Tragedy", "Tragedy"],
|
||||||
|
["Vampire", "Vampire"],
|
||||||
|
["Yaoi", "Yaoi"],
|
||||||
|
["Yuri", "Yuri"]
|
||||||
|
].map(x => ({ type_name: 'CheckBox', name: x[0], value: x[1] }))
|
||||||
|
}, {
|
||||||
|
type_name: "GroupFilter",
|
||||||
|
name: "Year",
|
||||||
|
state: formattedYears
|
||||||
|
},
|
||||||
|
|
||||||
|
];
|
||||||
}
|
}
|
||||||
getSourcePreferences() {
|
getSourcePreferences() {
|
||||||
return [{
|
return [{
|
||||||
|
|||||||
Reference in New Issue
Block a user