mirror of
https://github.com/kodjodevf/mangayomi-extensions.git
synced 2026-02-14 10:51:17 +00:00
remove invalid sources and fix some broken ones
This commit is contained in:
@@ -3,11 +3,11 @@ const mangayomiSources = [{
|
||||
"lang": "zh",
|
||||
"baseUrl": "https://mikanime.tv",
|
||||
"apiUrl": "",
|
||||
"iconUrl": "https://mikanime.tv/images/mikan-pic.png",
|
||||
"iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/zh.mikan.png",
|
||||
"typeSource": "torrent",
|
||||
"isManga": false,
|
||||
"isNsfw": false,
|
||||
"version": "0.0.15",
|
||||
"version": "0.0.2",
|
||||
"dateFormat": "",
|
||||
"dateFormatLocale": "",
|
||||
"pkgPath": "anime/src/zh/mikan.js"
|
||||
@@ -30,9 +30,10 @@ class DefaultExtension extends MProvider {
|
||||
|
||||
async getItems(url, cookies) {
|
||||
var res;
|
||||
if (cookies) {
|
||||
const identity = new SharedPreferences().get("cookies");
|
||||
if ((cookies) && (identity.length > 0)) {
|
||||
res = await new Client().get(this.source.baseUrl + url, {
|
||||
Cookie: `.AspNetCore.Identity.Application=${new SharedPreferences().get("cookies")}`
|
||||
Cookie: `.AspNetCore.Identity.Application=${identity}`
|
||||
});
|
||||
} else {
|
||||
res = await new Client().get(this.source.baseUrl + url);
|
||||
@@ -127,7 +128,7 @@ class DefaultExtension extends MProvider {
|
||||
return [{
|
||||
"key": "cookies",
|
||||
"editTextPreference": {
|
||||
"title": "用户Cookies",
|
||||
"title": "用户Cookies(在webview中登陆则可不设)",
|
||||
"summary": "用于读取用户订阅的Cookies(.AspNetCore.Identity.Application)",
|
||||
"value": "",
|
||||
"dialogTitle": "Cookies",
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
const mangayomiSources = [{
|
||||
"name": "樱花动漫",
|
||||
"lang": "zh",
|
||||
"baseUrl": "http://www.iyinghua.io",
|
||||
"baseUrl": "http://www.iyinghua.com",
|
||||
"apiUrl": "",
|
||||
"iconUrl": "http://www.iyinghua.io/js/20180601/favicon.ico",
|
||||
"iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/zh.yhdm.png",
|
||||
"typeSource": "single",
|
||||
"isManga": false,
|
||||
"isNsfw": false,
|
||||
"version": "0.0.15",
|
||||
"version": "0.0.2",
|
||||
"dateFormat": "",
|
||||
"dateFormatLocale": "",
|
||||
"pkgPath": "anime/src/zh/yhdm.js"
|
||||
@@ -51,12 +51,21 @@ class DefaultExtension extends MProvider {
|
||||
return String.fromCharCode.apply(null, charCodes);
|
||||
}
|
||||
|
||||
getBaseUrl() {
|
||||
const preference = new SharedPreferences();
|
||||
var base_url = preference.get("domain_url");
|
||||
if (base_url.endsWith("/")) {
|
||||
return base_url.slice(0, -1);
|
||||
}
|
||||
return base_url;
|
||||
}
|
||||
|
||||
getHeaders(url) {
|
||||
throw new Error("getHeaders not implemented");
|
||||
}
|
||||
|
||||
async getItems(url, p, d) {
|
||||
const res = await new Client().get(this.source.baseUrl + url);
|
||||
const res = await new Client().get(this.getBaseUrl() + url);
|
||||
const doc = new Document(res.body);
|
||||
const items = [];
|
||||
const elements = doc.select(p);
|
||||
@@ -91,7 +100,7 @@ class DefaultExtension extends MProvider {
|
||||
}
|
||||
|
||||
async getDetail(url) {
|
||||
const res = await new Client().get(this.source.baseUrl + url);
|
||||
const res = await new Client().get(this.getBaseUrl() + url);
|
||||
const doc = new Document(res.body);
|
||||
const cover = doc.selectFirst("div.thumb img").attr("src");
|
||||
const title = this.stringUTF8(doc.selectFirst("div.rate h1").text, true);
|
||||
@@ -119,7 +128,7 @@ class DefaultExtension extends MProvider {
|
||||
}
|
||||
|
||||
async getVideoList(url) {
|
||||
const res = await new Client().get(this.source.baseUrl + url);
|
||||
const res = await new Client().get(this.getBaseUrl() + url);
|
||||
const doc = new Document(res.body);
|
||||
const video_url = this.stringUTF8(doc.selectFirst("div#playbox").attr("data-vid").split("$")[0], true);
|
||||
return [{
|
||||
@@ -354,6 +363,16 @@ class DefaultExtension extends MProvider {
|
||||
}
|
||||
|
||||
getSourcePreferences() {
|
||||
throw new Error("getSourcePreferences not implemented");
|
||||
return [{
|
||||
"key": "domain_url",
|
||||
"editTextPreference": {
|
||||
"title": "Url",
|
||||
"summary": "樱花动漫网址",
|
||||
"value": "http://www.iyinghua.com",
|
||||
"dialogTitle": "URL",
|
||||
"dialogMessage": "",
|
||||
}
|
||||
}
|
||||
];
|
||||
}
|
||||
}
|
||||
BIN
javascript/icon/zh.77mh.png
Normal file
BIN
javascript/icon/zh.77mh.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 959 B |
BIN
javascript/icon/zh.copymanga.png
Normal file
BIN
javascript/icon/zh.copymanga.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 701 B |
BIN
javascript/icon/zh.dmzj.png
Normal file
BIN
javascript/icon/zh.dmzj.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 9.7 KiB |
BIN
javascript/icon/zh.mikan.png
Normal file
BIN
javascript/icon/zh.mikan.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 126 KiB |
BIN
javascript/icon/zh.yhdm.png
Normal file
BIN
javascript/icon/zh.yhdm.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.9 KiB |
@@ -3,7 +3,7 @@ const mangayomiSources = [{
|
||||
"lang": "zh",
|
||||
"baseUrl": "https://www.77mh.nl",
|
||||
"apiUrl": "",
|
||||
"iconUrl": "https://www.77mh.nl/favicon.ico",
|
||||
"iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/zh.77mh.png",
|
||||
"typeSource": "single",
|
||||
"isManga": true,
|
||||
"isNsfw": false,
|
||||
|
||||
@@ -3,11 +3,11 @@ const mangayomiSources = [{
|
||||
"lang": "zh",
|
||||
"baseUrl": "https://www.mangacopy.com",
|
||||
"apiUrl": "https://api.mangacopy.com",
|
||||
"iconUrl": "https://hi77-overseas.mangafuna.xyz/static/free.ico",
|
||||
"iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/zh.copymanga.png",
|
||||
"typeSource": "single",
|
||||
"isManga": true,
|
||||
"isNsfw": false,
|
||||
"version": "0.0.2",
|
||||
"version": "0.0.25",
|
||||
"dateFormat": "",
|
||||
"dateFormatLocale": "",
|
||||
"pkgPath": "manga/src/zh/copymanga.js"
|
||||
@@ -100,6 +100,21 @@ const mangayomiSources = [{
|
||||
Referer: this.source.baseUrl
|
||||
};
|
||||
}
|
||||
|
||||
reqHeaders() {
|
||||
const date = new Date();
|
||||
const year = date.getFullYear();
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0');
|
||||
const day = String(date.getDate()).padStart(2, '0');
|
||||
return {
|
||||
'User-Agent': 'duoTuoCartoon/3.2.4 (iPhone; iOS 18.0.1; Scale/3.00) iDOKit/1.0.0 RSSX/1.0.0',
|
||||
'version': `${year}.${month}.${day}`,
|
||||
'region': '0',
|
||||
'webp': '0',
|
||||
"platform": "1",
|
||||
"Referer": "https://www.copymanga.com/"
|
||||
}
|
||||
}
|
||||
|
||||
async getManga(url) {
|
||||
const res = await new Client().get(this.source.apiUrl + url);
|
||||
@@ -128,14 +143,8 @@ const mangayomiSources = [{
|
||||
|
||||
async search(query, page, filters) {
|
||||
if (query != "") {
|
||||
const res = await new Client().get(this.source.apiUrl + `/api/v3/search/comic?platform=1&q=${query}&limit=16&offset=${(page -1)*16}&q_type=&_update=true`, {
|
||||
"webp": '1',
|
||||
"region": '1',
|
||||
"platform": '1',
|
||||
"version": '2022.10.20',
|
||||
"accept": 'application/json',
|
||||
'content-encoding': 'gzip, compress, br'
|
||||
});
|
||||
const res = await new Client().get(this.source.apiUrl + `/api/v3/search/comic?platform=1&q=${query}&limit=16&offset=${(page -1)*16}&q_type=&_update=true`,
|
||||
this.reqHeaders());
|
||||
const datas = JSON.parse(res.body)["results"]["list"];
|
||||
const manga = [];
|
||||
for (const data of datas) {
|
||||
@@ -167,7 +176,7 @@ const mangayomiSources = [{
|
||||
|
||||
async getDetail(url) {
|
||||
url = url.substringAfter("/comic/");
|
||||
const res = await new Client().get(this.source.apiUrl + `/api/v3/comic2/${url}`);
|
||||
const res = await new Client().get(this.source.apiUrl + `/api/v3/comic2/${url}`, this.reqHeaders());
|
||||
const data = JSON.parse(res.body)["results"]["comic"];
|
||||
const title = this.stringUTF8(data["name"]);
|
||||
const cover = data["cover"];
|
||||
|
||||
@@ -3,11 +3,11 @@ const mangayomiSources = [{
|
||||
"lang": "zh",
|
||||
"baseUrl": "https://www.dmzj.com",
|
||||
"apiUrl": "",
|
||||
"iconUrl": "https://www.dmzj.com/_nuxt/logo_dmzj.1c94014a.png",
|
||||
"iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/zh.dmzj.png",
|
||||
"typeSource": "single",
|
||||
"isManga": true,
|
||||
"isNsfw": false,
|
||||
"version": "0.0.25",
|
||||
"version": "0.0.3",
|
||||
"dateFormat": "",
|
||||
"dateFormatLocale": "",
|
||||
"pkgPath": "manga/src/zh/dmzj.js"
|
||||
|
||||
@@ -1,669 +0,0 @@
|
||||
const mangayomiSources = [{
|
||||
"name": "漫画DB",
|
||||
"lang": "zh",
|
||||
"baseUrl": "https://www.manhuadb.com",
|
||||
"apiUrl": "",
|
||||
"iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/zh.manhuadb.png",
|
||||
"typeSource": "single",
|
||||
"isManga": true,
|
||||
"isNsfw": false,
|
||||
"version": "0.0.25",
|
||||
"dateFormat": "",
|
||||
"dateFormatLocale": "",
|
||||
"pkgPath": "manga/src/zh/manhuadb.js"
|
||||
}];
|
||||
|
||||
class DefaultExtension extends MProvider {
|
||||
base64decode(str) {
|
||||
var base64DecodeChars = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
|
||||
var c1, c2, c3, c4;
|
||||
var i, len, out;
|
||||
len = str.length;
|
||||
i = 0;
|
||||
out = "";
|
||||
while (i < len) {
|
||||
do {
|
||||
c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]
|
||||
} while (i < len && c1 == -1);
|
||||
if (c1 == -1)
|
||||
break;
|
||||
do {
|
||||
c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]
|
||||
} while (i < len && c2 == -1);
|
||||
if (c2 == -1)
|
||||
break;
|
||||
out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
|
||||
do {
|
||||
c3 = str.charCodeAt(i++) & 0xff;
|
||||
if (c3 == 61)
|
||||
return out;
|
||||
c3 = base64DecodeChars[c3]
|
||||
} while (i < len && c3 == -1);
|
||||
if (c3 == -1)
|
||||
break;
|
||||
out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
|
||||
do {
|
||||
c4 = str.charCodeAt(i++) & 0xff;
|
||||
if (c4 == 61)
|
||||
return out;
|
||||
c4 = base64DecodeChars[c4]
|
||||
} while (i < len && c4 == -1);
|
||||
if (c4 == -1)
|
||||
break;
|
||||
out += String.fromCharCode(((c3 & 0x03) << 6) | c4)
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
coverUrlConvert(cover_url) {
|
||||
if (cover_url.search("com") == -1) {
|
||||
return this.source.baseUrl + cover_url;
|
||||
}
|
||||
return cover_url;
|
||||
}
|
||||
|
||||
async getMangas(url, search) {
|
||||
const res = await new Client().get(this.source.baseUrl + url);
|
||||
const doc = new Document(res.body);
|
||||
var str;
|
||||
if (search) {
|
||||
str = "div.comicbook-index";
|
||||
} else {
|
||||
str = "div.media";
|
||||
}
|
||||
const items = doc.select(str);
|
||||
const mangas = [];
|
||||
for (const item of items) {
|
||||
const cover = this.coverUrlConvert(item.selectFirst("a.d-block img").attr("src"));
|
||||
var title;
|
||||
if (search) {
|
||||
title = item.selectFirst("a.d-block").attr("title");
|
||||
} else {
|
||||
title = item.selectFirst("a.d-block img").attr("alt");
|
||||
title = title.replace("的封面图", "");
|
||||
}
|
||||
const url = item.selectFirst("a.d-block").attr("href");
|
||||
mangas.push({
|
||||
name: title,
|
||||
link: url,
|
||||
imageUrl: cover
|
||||
});
|
||||
}
|
||||
return {
|
||||
list: mangas,
|
||||
hasNextPage: true
|
||||
}
|
||||
}
|
||||
|
||||
async getPopular(page) {
|
||||
const res = await new Client().get(this.source.baseUrl);
|
||||
const doc = new Document(res.body);
|
||||
const items = doc.select("div.comicbook-index");
|
||||
var mangas = [];
|
||||
for (let item of items) {
|
||||
const cover = this.coverUrlConvert(item.selectFirst("a img").attr("src"));
|
||||
const title = item.selectFirst("a img").attr("alt");
|
||||
const url = item.selectFirst("a").attr("href")
|
||||
mangas.push({
|
||||
name: title.replace("封面", ""),
|
||||
link: url,
|
||||
imageUrl: cover
|
||||
});
|
||||
}
|
||||
return {
|
||||
list: mangas,
|
||||
hasNextPage: false
|
||||
};
|
||||
}
|
||||
|
||||
async getLatestUpdates(page) {
|
||||
return await this.getMangas(`/manhua/list-page-${page}.html`, false);
|
||||
}
|
||||
|
||||
async search(query, page, filters) {
|
||||
if (query == "") {
|
||||
var locations, readers, status, categories;
|
||||
for (const filter of filters) {
|
||||
if (filter["type"] == "locations") {
|
||||
locations = filter["values"][filter["state"]]["value"];
|
||||
} else if (filter["type"] == "readers") {
|
||||
readers = filter["values"][filter["state"]]["value"];
|
||||
} else if (filter["type"] == "status") {
|
||||
status = filter["values"][filter["state"]]["value"];
|
||||
} else if (filter["type"] == "categories") {
|
||||
categories = filter["values"][filter["state"]]["value"];
|
||||
}
|
||||
}
|
||||
const url = `/manhua/list${locations}${readers}${status}${categories}-page-${page}.html`;
|
||||
return await this.getMangas(url.replaceAll("all", ""), false);
|
||||
} else {
|
||||
return await this.getMangas(`/search?q=${query}&p=${page}`, true);
|
||||
}
|
||||
}
|
||||
|
||||
async getDetail(url) {
|
||||
const res = await new Client().get(this.source.baseUrl + url);
|
||||
const doc = new Document(res.body);
|
||||
const title = doc.selectFirst("h1.comic-title").text;
|
||||
const cover = this.coverUrlConvert(doc.selectFirst("td.comic-cover img").attr("src"));
|
||||
const desc = doc.selectFirst("p.comic_story").text;
|
||||
const author = doc.selectFirst("ul.creators a").text;
|
||||
var tags = doc.select("ul.tags a").map(e => e.text);
|
||||
var status = 5;
|
||||
if (tags[0] == "已完结") {
|
||||
status = 1;
|
||||
tags.shift();
|
||||
}
|
||||
if (tags[0] == "连载中") {
|
||||
status = 0;
|
||||
tags.shift();
|
||||
}
|
||||
const items = doc.select("ol.links-of-books");
|
||||
const episodes = [];
|
||||
const ep_names = doc.select("span.h3");
|
||||
const ep_titles = [];
|
||||
for (const ep_name of ep_names) {
|
||||
ep_titles.push(ep_name.text);
|
||||
}
|
||||
var index = 0;
|
||||
for (const lists of items) {
|
||||
const chapters = lists.select("li");
|
||||
for (const chapter of chapters) {
|
||||
const name = chapter.selectFirst("a").attr("title");
|
||||
const url = chapter.selectFirst("a").attr("href");
|
||||
episodes.push({
|
||||
name: `[[${ep_titles[index]}]]${name}`,
|
||||
url: url
|
||||
});
|
||||
}
|
||||
index = index + 1;
|
||||
}
|
||||
episodes.reverse();
|
||||
return {
|
||||
name: title,
|
||||
imageUrl: cover,
|
||||
description: desc,
|
||||
episodes: episodes,
|
||||
genre: tags,
|
||||
author: author,
|
||||
status: status
|
||||
};
|
||||
}
|
||||
|
||||
async getPageList(url) {
|
||||
const res = await new Client().get(this.source.baseUrl + url);
|
||||
const html = res.body;
|
||||
const doc = new Document(html);
|
||||
const urls = [];
|
||||
var script_str = html.match(/<script>var img_data = '([^']*)';<\/script>/)[1];
|
||||
const img_urls = JSON.parse(this.base64decode(script_str));
|
||||
var img_base = doc.selectFirst("img.show-pic").attr("src");
|
||||
img_base = img_base.substring(0, img_base.search(img_urls[0]['img']));
|
||||
for (const url of img_urls) {
|
||||
urls.push(img_base + url['img']);
|
||||
}
|
||||
return urls;
|
||||
}
|
||||
|
||||
getFilterList() {
|
||||
return [{
|
||||
type: "locations",
|
||||
name: "地区",
|
||||
type_name: "SelectFilter",
|
||||
values: [{
|
||||
value: "all",
|
||||
name: "全部",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-r-4",
|
||||
name: "日本",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-r-5",
|
||||
name: "香港",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-r-6",
|
||||
name: "韩国",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-r-7",
|
||||
name: "台湾",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-r-8",
|
||||
name: "内地",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-r-9",
|
||||
name: "欧美",
|
||||
type_name: "SelectOption"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
type: "readers",
|
||||
name: "读者",
|
||||
type_name: "SelectFilter",
|
||||
values: [{
|
||||
value: "all",
|
||||
name: "全部",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-a-3",
|
||||
name: "少年",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-a-4",
|
||||
name: "青年",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-a-5",
|
||||
name: "少女",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-a-6",
|
||||
name: "男性",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-a-7",
|
||||
name: "女性",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-a-9",
|
||||
name: "通用",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-a-10",
|
||||
name: "儿童",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-a-11",
|
||||
name: "女青",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-a-12",
|
||||
name: "18限",
|
||||
type_name: "SelectOption"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
type: "status",
|
||||
name: "状态",
|
||||
type_name: "SelectFilter",
|
||||
values: [{
|
||||
value: "all",
|
||||
name: "全部",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-s-1",
|
||||
name: "连载中",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-s-2",
|
||||
name: "已完结",
|
||||
type_name: "SelectOption"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
type: "categories",
|
||||
name: "类型",
|
||||
type_name: "SelectFilter",
|
||||
values: [{
|
||||
value: "all",
|
||||
name: "全部",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-26",
|
||||
name: "爱情",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-66",
|
||||
name: "东方",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-12",
|
||||
name: "冒险",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-64",
|
||||
name: "欢乐向",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-39",
|
||||
name: "百合",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-41",
|
||||
name: "搞笑",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-20",
|
||||
name: "科幻",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-40",
|
||||
name: "校园",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-33",
|
||||
name: "生活",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-48",
|
||||
name: "魔幻",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-13",
|
||||
name: "奇幻",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-46",
|
||||
name: "热血",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-44",
|
||||
name: "格斗",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-71",
|
||||
name: "其他",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-52",
|
||||
name: "神鬼",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-43",
|
||||
name: "魔法",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-27",
|
||||
name: "悬疑",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-18",
|
||||
name: "动作",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-55",
|
||||
name: "竞技",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-72",
|
||||
name: "纯爱",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-32",
|
||||
name: "喜剧",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-59",
|
||||
name: "萌系",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-16",
|
||||
name: "恐怖",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-53",
|
||||
name: "耽美",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-56",
|
||||
name: "四格",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-80",
|
||||
name: "ゆり",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-54",
|
||||
name: "治愈",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-60",
|
||||
name: "伪娘",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-73",
|
||||
name: "舰娘",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-47",
|
||||
name: "励志",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-58",
|
||||
name: "职场",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-30",
|
||||
name: "战争",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-51",
|
||||
name: "侦探",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-21",
|
||||
name: "惊悚",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-22",
|
||||
name: "职业",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-9",
|
||||
name: "历史",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-11",
|
||||
name: "体育",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-45",
|
||||
name: "美食",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-68",
|
||||
name: "秀吉",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-67",
|
||||
name: "性转换",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-19",
|
||||
name: "推理",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-70",
|
||||
name: "音乐舞蹈",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-57",
|
||||
name: "后宫",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-29",
|
||||
name: "料理",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-61",
|
||||
name: "机战",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-78",
|
||||
name: "AA",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-37",
|
||||
name: "社会",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-76",
|
||||
name: "节操",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-17",
|
||||
name: "音乐",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-23",
|
||||
name: "武侠",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-65",
|
||||
name: "西方魔幻",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-28",
|
||||
name: "资料集",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-10",
|
||||
name: "传记",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-49",
|
||||
name: "宅男",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-69",
|
||||
name: "轻小说",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-62",
|
||||
name: "黑道",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-50",
|
||||
name: "舞蹈",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-42",
|
||||
name: "杂志",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-34",
|
||||
name: "灾难",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-77",
|
||||
name: "宅系",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-74",
|
||||
name: "颜艺",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-63",
|
||||
name: "腐女",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-81",
|
||||
name: "露营",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-82",
|
||||
name: "旅行",
|
||||
type_name: "SelectOption"
|
||||
},
|
||||
{
|
||||
value: "-c-83",
|
||||
name: "TS",
|
||||
type_name: "SelectOption"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
getSourcePreferences() {
|
||||
throw new Error("getSourcePreferences not implemented");
|
||||
}
|
||||
}
|
||||
@@ -1,595 +0,0 @@
|
||||
const mangayomiSources = [{
|
||||
"name": "漫画柜",
|
||||
"lang": "zh",
|
||||
"baseUrl": "https://www.manhuagui.com",
|
||||
"apiUrl": "",
|
||||
"iconUrl": "https://www.manhuagui.com/favicon.ico",
|
||||
"typeSource": "single",
|
||||
"isManga": true,
|
||||
"isNsfw": false,
|
||||
"version": "0.0.25",
|
||||
"dateFormat": "",
|
||||
"dateFormatLocale": "",
|
||||
"pkgPath": "manga/src/zh/manhuagui.js"
|
||||
}];
|
||||
|
||||
LZString = function() {
|
||||
function o(o, r) {
|
||||
if (!t[o]) {
|
||||
t[o] = {};
|
||||
for (var n = 0; n < o.length; n++) t[o][o.charAt(n)] = n
|
||||
}
|
||||
return t[o][r]
|
||||
}
|
||||
var r = String.fromCharCode,
|
||||
n = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
|
||||
e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",
|
||||
t = {},
|
||||
i = {
|
||||
decompressFromBase64: function(r) {
|
||||
return null == r ? "" : "" == r ? null : i._decompress(r.length, 32, function(e) {
|
||||
return o(n, r.charAt(e))
|
||||
})
|
||||
},
|
||||
_decompress: function(o, n, e) {
|
||||
var t, i, s, p, u, c, a, l, f = [],
|
||||
h = 4,
|
||||
d = 4,
|
||||
m = 3,
|
||||
v = "",
|
||||
w = [],
|
||||
A = {
|
||||
val: e(0),
|
||||
position: n,
|
||||
index: 1
|
||||
};
|
||||
for (i = 0; 3 > i; i += 1) f[i] = i;
|
||||
for (p = 0, c = Math.pow(2, 2), a = 1; a != c;) u = A.val & A.position, A.position >>= 1, 0 == A.position && (A.position = n, A.val = e(A.index++)), p |= (u > 0 ? 1 : 0) * a, a <<= 1;
|
||||
switch (t = p) {
|
||||
case 0:
|
||||
for (p = 0, c = Math.pow(2, 8), a = 1; a != c;) u = A.val & A.position, A.position >>= 1, 0 == A.position && (A.position = n, A.val = e(A.index++)), p |= (u > 0 ? 1 : 0) * a, a <<= 1;
|
||||
l = r(p);
|
||||
break;
|
||||
case 1:
|
||||
for (p = 0, c = Math.pow(2, 16), a = 1; a != c;) u = A.val & A.position, A.position >>= 1, 0 == A.position && (A.position = n, A.val = e(A.index++)), p |= (u > 0 ? 1 : 0) * a, a <<= 1;
|
||||
l = r(p);
|
||||
break;
|
||||
case 2:
|
||||
return ""
|
||||
}
|
||||
for (f[3] = l, s = l, w.push(l);;) {
|
||||
if (A.index > o) return "";
|
||||
for (p = 0, c = Math.pow(2, m), a = 1; a != c;) u = A.val & A.position, A.position >>= 1, 0 == A.position && (A.position = n, A.val = e(A.index++)), p |= (u > 0 ? 1 : 0) * a, a <<= 1;
|
||||
switch (l = p) {
|
||||
case 0:
|
||||
for (p = 0, c = Math.pow(2, 8), a = 1; a != c;) u = A.val & A.position, A.position >>= 1, 0 == A.position && (A.position = n, A.val = e(A.index++)), p |= (u > 0 ? 1 : 0) * a, a <<= 1;
|
||||
f[d++] = r(p), l = d - 1, h--;
|
||||
break;
|
||||
case 1:
|
||||
for (p = 0, c = Math.pow(2, 16), a = 1; a != c;) u = A.val & A.position, A.position >>= 1, 0 == A.position && (A.position = n, A.val = e(A.index++)), p |= (u > 0 ? 1 : 0) * a, a <<= 1;
|
||||
f[d++] = r(p), l = d - 1, h--;
|
||||
break;
|
||||
case 2:
|
||||
return w.join("")
|
||||
}
|
||||
if (0 == h && (h = Math.pow(2, m), m++), f[l]) v = f[l];
|
||||
else {
|
||||
if (l !== d) return null;
|
||||
v = s + s.charAt(0)
|
||||
}
|
||||
w.push(v), f[d++] = s + v.charAt(0), h--, s = v, 0 == h && (h = Math.pow(2, m), m++)
|
||||
}
|
||||
}
|
||||
};
|
||||
return i
|
||||
}();
|
||||
|
||||
function decode(text) {
|
||||
function packed(functionStr, a, c, data) {
|
||||
function e(c) {
|
||||
return String(c < a ? '' : e(Math.floor(c / a))) + String((c % a > 35) ? String.fromCharCode(c % a + 29) : tr(c % a, 36));
|
||||
}
|
||||
|
||||
function tr(value, num) {
|
||||
var tmp = itr(value, num);
|
||||
return tmp == '' ? '0' : tmp;
|
||||
}
|
||||
|
||||
function itr(value, num) {
|
||||
const d = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||
return value <= 0 ? '' : itr(Math.floor(value / num), num) + d[value % num];
|
||||
}
|
||||
|
||||
c = c - 1;
|
||||
const d = {};
|
||||
while (c + 1) {
|
||||
d[e(c)] = data[c] == '' ? e(c) : data[c];
|
||||
c -= 1;
|
||||
}
|
||||
const pieces = functionStr.split(/\b(\w+)\b/);
|
||||
const js = pieces.map(function(x) {
|
||||
return d[x] !== undefined ? d[x] : x;
|
||||
}).join('').replace(/\\'/g, '\'');
|
||||
return JSON.parse(js.match(/^.*\((\{.*\})\).*$/)[1]);
|
||||
}
|
||||
const m = text.match(/^.*\}\(\'(.*)\',(\d*),(\d*),\'([\w|\+|\/|=]*)\'.*$/);
|
||||
return packed(m[1], parseInt(m[2]), parseInt(m[3]), LZString.decompressFromBase64(m[4]).split('|'));
|
||||
}
|
||||
|
||||
class DefaultExtension extends MProvider {
|
||||
headers = {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36"
|
||||
};
|
||||
|
||||
getHeaders(url) {
|
||||
return {
|
||||
Referer: this.source.baseUrl
|
||||
}
|
||||
}
|
||||
|
||||
async getItems(url, p) {
|
||||
const res = await new Client().get(this.source.baseUrl + url, this.headers);
|
||||
const doc = new Document(res.body);
|
||||
const mangas = [];
|
||||
const elements = doc.select(p);
|
||||
for (const element of elements) {
|
||||
const title = element.selectFirst("a").attr("title");
|
||||
const url = element.selectFirst("a").attr("href");
|
||||
var cover = element.selectFirst("img").attr("src");
|
||||
if (cover == "") {
|
||||
cover = element.selectFirst("img").attr("data-src");
|
||||
}
|
||||
cover = "https:" + cover;
|
||||
mangas.push({
|
||||
name: title,
|
||||
imageUrl: cover,
|
||||
link: url
|
||||
});
|
||||
}
|
||||
return {
|
||||
list: mangas,
|
||||
hasNextPage: true
|
||||
};
|
||||
}
|
||||
|
||||
async getPopular(page) {
|
||||
return await this.getItems(`/list/view_p${page}.html`, "ul#contList li");
|
||||
}
|
||||
|
||||
async getLatestUpdates(page) {
|
||||
return await this.getItems(`/list/index_p${page}.html`, "ul#contList li");
|
||||
}
|
||||
|
||||
async search(query, page, filters) {
|
||||
if (query == "") {
|
||||
var sort, locations, categories, status, reader;
|
||||
for (const filter of filters) {
|
||||
if (filter["type"] == "sort") {
|
||||
sort = filter["values"][filter["state"]]["value"];
|
||||
} else if (filter["type"] == "locations") {
|
||||
locations = filter["values"][filter["state"]]["value"];
|
||||
} else if (filter["type"] == "categories") {
|
||||
categories = filter["values"][filter["state"]]["value"];
|
||||
} else if (filter["type"] == "status") {
|
||||
status = filter["values"][filter["state"]]["value"];
|
||||
} else if (filter["type"] == "reader") {
|
||||
reader = filter["values"][filter["state"]]["value"];
|
||||
}
|
||||
}
|
||||
const params = [locations, categories, reader, status];
|
||||
return await this.getItems(`/list${"/"+params.filter(item => item != "").join("_")}/${sort}_p${page}.html`, "ul#contList li");
|
||||
} else {
|
||||
return await this.getItems(`/s/${query}_p${page}.html`, "div.book-result li");
|
||||
}
|
||||
}
|
||||
|
||||
async getDetail(url) {
|
||||
const res = await new Client().get(this.source.baseUrl + url, this.headers);
|
||||
const doc = new Document(res.body);
|
||||
const title = doc.selectFirst("div.book-title h1").text;
|
||||
const cover = "https:" + doc.selectFirst("p.hcover img").attr("src");
|
||||
const desc = doc.selectFirst("div#intro-all").text;
|
||||
const info = doc.select("ul.detail-list li")[1].select("span");
|
||||
const authors = info[1].text.replace("漫画作者:", "");
|
||||
const genres = info[0].select("a").map(e => e.text);
|
||||
const status_str = doc.selectFirst("li.status span").text;
|
||||
var status;
|
||||
if (status_str == "已完结") {
|
||||
status = 1;
|
||||
} else {
|
||||
status = 0;
|
||||
}
|
||||
const eps = [];
|
||||
var chapter_html;
|
||||
if (res.body.search("请点击此处继续阅读!") == -1) {
|
||||
chapter_html = doc;
|
||||
} else {
|
||||
const text = LZString.decompressFromBase64(doc.selectFirst("input#__VIEWSTATE").attr("value"));
|
||||
chapter_html = new Document(text);
|
||||
}
|
||||
const ch_title = chapter_html.select("h4 span");
|
||||
const chapters = chapter_html.select("div.chapter-list")
|
||||
var index = 0;
|
||||
for (const chs of ch_title) {
|
||||
const t = chs.text;
|
||||
for (const ch of chapters[index].select("ul")) {
|
||||
const ep_ = [];
|
||||
for (const c of ch.select("a.status0")) {
|
||||
ep_.push({
|
||||
name: `|${t}|` + c.attr("title"),
|
||||
url: c.attr("href")
|
||||
});
|
||||
}
|
||||
ep_.reverse();
|
||||
for (const e of ep_) {
|
||||
eps.push(e);
|
||||
}
|
||||
}
|
||||
index = index + 1;
|
||||
}
|
||||
eps.reverse();
|
||||
return {
|
||||
name: title,
|
||||
imageUrl: cover,
|
||||
description: desc,
|
||||
genre: genres,
|
||||
author: authors,
|
||||
status: status,
|
||||
episodes: eps
|
||||
};
|
||||
}
|
||||
|
||||
async getPageList(url) {
|
||||
const preference = new SharedPreferences();
|
||||
const image_host = preference.get("imghost");
|
||||
const res = await new Client().get(this.source.baseUrl + url, this.headers);
|
||||
const datas = decode(res.body);
|
||||
const imgs = [];
|
||||
for (const data of datas["files"]) {
|
||||
imgs.push(`https://${image_host}.hamreus.com` + datas["path"] + data + `?e=${datas["sl"]["e"]}&m=${datas["sl"]["m"]}`);
|
||||
}
|
||||
return imgs;
|
||||
}
|
||||
|
||||
getFilterList() {
|
||||
return [{
|
||||
type: "sort",
|
||||
name: "排序",
|
||||
type_name: "SelectFilter",
|
||||
values: [{
|
||||
type_name: "SelectOption",
|
||||
name: "最新发布",
|
||||
value: "index"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "最新更新",
|
||||
value: "update"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "人气最旺",
|
||||
value: "view"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "评分最高",
|
||||
value: "rate"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
type: "locations",
|
||||
name: "地区",
|
||||
type_name: "SelectFilter",
|
||||
values: [{
|
||||
type_name: "SelectOption",
|
||||
name: "全部",
|
||||
value: ""
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "日本",
|
||||
value: "japan"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "港台",
|
||||
value: "hongkong"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "其他",
|
||||
value: "other"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "欧美",
|
||||
value: "europe"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "内地",
|
||||
value: "china"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "韩国",
|
||||
value: "korea"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
type: "categories",
|
||||
name: "剧情",
|
||||
type_name: "SelectFilter",
|
||||
values: [{
|
||||
type_name: "SelectOption",
|
||||
name: "全部",
|
||||
value: ""
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "热血",
|
||||
value: "rexue"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "冒险",
|
||||
value: "maoxian"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "魔幻",
|
||||
value: "mohuan"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "神鬼",
|
||||
value: "shengui"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "搞笑",
|
||||
value: "gaoxiao"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "萌系",
|
||||
value: "mengxi"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "爱情",
|
||||
value: "aiqing"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "科幻",
|
||||
value: "kehuan"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "魔法",
|
||||
value: "mofa"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "格斗",
|
||||
value: "gedou"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "武侠",
|
||||
value: "wuxia"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "机战",
|
||||
value: "jizhan"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "战争",
|
||||
value: "zhanzheng"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "竞技",
|
||||
value: "jingji"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "体育",
|
||||
value: "tiyu"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "校园",
|
||||
value: "xiaoyuan"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "生活",
|
||||
value: "shenghuo"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "励志",
|
||||
value: "lizhi"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "历史",
|
||||
value: "lishi"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "伪娘",
|
||||
value: "weiniang"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "宅男",
|
||||
value: "zhainan"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "腐女",
|
||||
value: "funv"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "耽美",
|
||||
value: "danmei"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "百合",
|
||||
value: "baihe"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "后宫",
|
||||
value: "hougong"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "治愈",
|
||||
value: "zhiyu"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "美食",
|
||||
value: "meishi"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "推理",
|
||||
value: "tuili"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "悬疑",
|
||||
value: "xuanyi"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "恐怖",
|
||||
value: "kongbu"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "四格",
|
||||
value: "sige"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "职场",
|
||||
value: "zhichang"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "侦探",
|
||||
value: "zhentan"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "社会",
|
||||
value: "shehui"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "音乐",
|
||||
value: "yinyue"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "舞蹈",
|
||||
value: "wudao"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "杂志",
|
||||
value: "zazhi"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "黑道",
|
||||
value: "heidao"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
type: "reader",
|
||||
name: "受众",
|
||||
type_name: "SelectFilter",
|
||||
values: [{
|
||||
type_name: "SelectOption",
|
||||
name: "全部",
|
||||
value: ""
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "少女",
|
||||
value: "shaonv"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "少年",
|
||||
value: "shaonian"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "青年",
|
||||
value: "qingnian"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "儿童",
|
||||
value: "ertong"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "通用",
|
||||
value: "tongyong"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
type: "status",
|
||||
name: "状态",
|
||||
type_name: "SelectFilter",
|
||||
values: [{
|
||||
type_name: "SelectOption",
|
||||
name: "全部",
|
||||
value: ""
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "连载中",
|
||||
value: "lianzai"
|
||||
},
|
||||
{
|
||||
type_name: "SelectOption",
|
||||
name: "已完结",
|
||||
value: "wanjie"
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
getSourcePreferences() {
|
||||
return [{
|
||||
"key": "imghost",
|
||||
"listPreference": {
|
||||
"title": "图片服务器",
|
||||
"summary": "",
|
||||
"valueIndex": 0,
|
||||
"entries": ["通用", "欧洲", "美国"],
|
||||
"entryValues": ["i", "eu", "us"],
|
||||
}
|
||||
}];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user