mirror of
https://github.com/kodjodevf/mangayomi-extensions.git
synced 2026-02-14 02:41:39 +00:00
anime(animekai): Added popular & latest
This commit is contained in:
157
javascript/anime/src/en/animekai.js
Normal file
157
javascript/anime/src/en/animekai.js
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
const mangayomiSources = [{
|
||||||
|
"name": "AnimeKai",
|
||||||
|
"lang": "en",
|
||||||
|
"baseUrl": "https://animekai.to",
|
||||||
|
"apiUrl": "",
|
||||||
|
"iconUrl": "https://www.google.com/s2/favicons?sz=256&domain=https://animekai.to/",
|
||||||
|
"typeSource": "single",
|
||||||
|
"itemType": 1,
|
||||||
|
"version": "0.0.1",
|
||||||
|
"pkgPath": "anime/src/en/animekai.js"
|
||||||
|
}];
|
||||||
|
|
||||||
|
class DefaultExtension extends MProvider {
|
||||||
|
getHeaders(url) {
|
||||||
|
throw new Error("getHeaders not implemented");
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.client = new Client();
|
||||||
|
}
|
||||||
|
|
||||||
|
getPreference(key) {
|
||||||
|
return new SharedPreferences().get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
getBaseUrl() {
|
||||||
|
return this.getPreference("animekai_base_url");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async request(slug) {
|
||||||
|
var url = this.getBaseUrl() + slug;
|
||||||
|
var res = await this.client.get(url);
|
||||||
|
return res.body
|
||||||
|
}
|
||||||
|
|
||||||
|
async getPage(slug) {
|
||||||
|
var res = await this.request(slug);
|
||||||
|
return new Document(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
async searchPage({ query = "", type = [], genre = [], status = [], sort = "", season = [], year = [], rating = [], country = [], subType = [], page = 1 } = {}) {
|
||||||
|
|
||||||
|
function bundleSlug(category, items) {
|
||||||
|
var rd = ""
|
||||||
|
for (var item of items) {
|
||||||
|
rd += `&${category}[]=${item}`;
|
||||||
|
}
|
||||||
|
return rd;
|
||||||
|
}
|
||||||
|
|
||||||
|
var slug = "/browser?"
|
||||||
|
|
||||||
|
slug += "keyword=" + query;
|
||||||
|
|
||||||
|
slug += bundleSlug("type", type);
|
||||||
|
slug += bundleSlug("genre", genre);
|
||||||
|
slug += bundleSlug("status", status);
|
||||||
|
slug += "&sort=" + sort;
|
||||||
|
|
||||||
|
slug += bundleSlug("status", status);
|
||||||
|
slug += bundleSlug("season", season);
|
||||||
|
slug += bundleSlug("year", year);
|
||||||
|
slug += bundleSlug("rating", rating);
|
||||||
|
slug += bundleSlug("country", country);
|
||||||
|
slug += bundleSlug("subType", subType);
|
||||||
|
slug += `&page=${page}`;
|
||||||
|
|
||||||
|
var body = await this.getPage(slug);
|
||||||
|
|
||||||
|
var paginations = body.select(".pagination > li")
|
||||||
|
var hasNextPage = !paginations[paginations.length - 1].className.includes("active")
|
||||||
|
var list = []
|
||||||
|
|
||||||
|
var titlePref = this.getPreference("animekai_title_lang")
|
||||||
|
var animes = body.selectFirst(".aitem-wrapper").select(".aitem")
|
||||||
|
animes.forEach(anime => {
|
||||||
|
var link = anime.selectFirst("a").getHref
|
||||||
|
var imageUrl = anime.selectFirst("img").attr("data-src")
|
||||||
|
var name = anime.selectFirst("a.title").attr(titlePref)
|
||||||
|
list.push({ name, link, imageUrl });
|
||||||
|
})
|
||||||
|
|
||||||
|
return { list, hasNextPage }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async getPopular(page) {
|
||||||
|
var types = this.getPreference("animekai_popular_latest_type")
|
||||||
|
return await this.searchPage({ sort: "trending", type: types, page: page });
|
||||||
|
}
|
||||||
|
get supportsLatest() {
|
||||||
|
throw new Error("supportsLatest not implemented");
|
||||||
|
}
|
||||||
|
async getLatestUpdates(page) {
|
||||||
|
var types = this.getPreference("animekai_popular_latest_type")
|
||||||
|
return await this.searchPage({ sort: "updated_date", type: types, page: page });
|
||||||
|
}
|
||||||
|
async search(query, page, filters) {
|
||||||
|
throw new Error("search not implemented");
|
||||||
|
}
|
||||||
|
async getDetail(url) {
|
||||||
|
throw new Error("getDetail not implemented");
|
||||||
|
}
|
||||||
|
// For novel html content
|
||||||
|
async getHtmlContent(url) {
|
||||||
|
throw new Error("getHtmlContent not implemented");
|
||||||
|
}
|
||||||
|
// Clean html up for reader
|
||||||
|
async cleanHtmlContent(html) {
|
||||||
|
throw new Error("cleanHtmlContent not implemented");
|
||||||
|
}
|
||||||
|
// For anime episode video list
|
||||||
|
async getVideoList(url) {
|
||||||
|
throw new Error("getVideoList not implemented");
|
||||||
|
}
|
||||||
|
// For manga chapter pages
|
||||||
|
async getPageList(url) {
|
||||||
|
throw new Error("getPageList not implemented");
|
||||||
|
}
|
||||||
|
getFilterList() {
|
||||||
|
throw new Error("getFilterList not implemented");
|
||||||
|
}
|
||||||
|
getSourcePreferences() {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
key: "animekai_base_url",
|
||||||
|
editTextPreference: {
|
||||||
|
title: "Override base url",
|
||||||
|
summary: "",
|
||||||
|
value: "https://animekai.to",
|
||||||
|
dialogTitle: "Override base url",
|
||||||
|
dialogMessage: "",
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: "animekai_popular_latest_type",
|
||||||
|
multiSelectListPreference: {
|
||||||
|
title: 'Preferred type of anime to be shown in popular & latest section',
|
||||||
|
summary: 'Choose which type of anime you want to see in the popular &latest section',
|
||||||
|
values: ["tv", "special", "ova", "ona"],
|
||||||
|
entries: ["TV", "Special", "OVA", "ONA", "Music", "Movie"],
|
||||||
|
entryValues: ["tv", "special", "ova", "ona", "music", "movie"]
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: "animekai_title_lang",
|
||||||
|
listPreference: {
|
||||||
|
title: 'Preferred title language',
|
||||||
|
summary: 'Choose in which language anime title should be shown',
|
||||||
|
valueIndex: 1,
|
||||||
|
entries: ["English", "Romaji"],
|
||||||
|
entryValues: ["title", "data-jp"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user