mirror of
https://github.com/kodjodevf/mangayomi-extensions.git
synced 2026-02-14 02:41:39 +00:00
fix Asura Scans
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
import 'src/beastscans/beastscans.dart';
|
import 'src/beastscans/beastscans.dart';
|
||||||
import 'src/lelmanga/lelmanga.dart';
|
import 'src/lelmanga/lelmanga.dart';
|
||||||
import 'src/asurascans/asurascans.dart';
|
|
||||||
import 'src/komiklab/komiklab.dart';
|
import 'src/komiklab/komiklab.dart';
|
||||||
import 'src/azurescans/azurescans.dart';
|
import 'src/azurescans/azurescans.dart';
|
||||||
import 'src/cosmicscans/cosmicscans.dart';
|
import 'src/cosmicscans/cosmicscans.dart';
|
||||||
@@ -104,8 +103,6 @@ List<Source> _mangareaderSourcesList = [
|
|||||||
beastscansSource,
|
beastscansSource,
|
||||||
//Lelmanga (FR)
|
//Lelmanga (FR)
|
||||||
lelmangaSource,
|
lelmangaSource,
|
||||||
//Asura Scans (EN)
|
|
||||||
asurascansSource,
|
|
||||||
//KomikLab Scans (EN)
|
//KomikLab Scans (EN)
|
||||||
komiklabSource,
|
komiklabSource,
|
||||||
//Azure Scans (EN)
|
//Azure Scans (EN)
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
import '../../../../../../model/source.dart';
|
|
||||||
|
|
||||||
Source get asurascansSource => _asurascansSource;
|
|
||||||
|
|
||||||
Source _asurascansSource = Source(
|
|
||||||
name: "Asura Scans",
|
|
||||||
baseUrl: "https://asuratoon.com/",
|
|
||||||
lang: "en",
|
|
||||||
typeSource: "mangareader",
|
|
||||||
iconUrl:
|
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/manga/multisrc/mangareader/src/asurascans/icon.png",
|
|
||||||
dateFormat: "MMM d, yyyy",
|
|
||||||
dateFormatLocale: "en_us",
|
|
||||||
);
|
|
||||||
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
131
javascript/manga/src/en/asurascans.js
Normal file
131
javascript/manga/src/en/asurascans.js
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
const mangayomiSources = [{
|
||||||
|
"id": 524070078,
|
||||||
|
"name": "Asura Scans",
|
||||||
|
"lang": "en",
|
||||||
|
"baseUrl": "https://asuracomic.net",
|
||||||
|
"apiUrl": "",
|
||||||
|
"iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/en.asurascans.png",
|
||||||
|
"typeSource": "single",
|
||||||
|
"isManga": true,
|
||||||
|
"version": "0.0.1",
|
||||||
|
"dateFormat": "",
|
||||||
|
"dateFormatLocale": "",
|
||||||
|
"pkgPath": "manga/src/en/asurascans.js"
|
||||||
|
}];
|
||||||
|
|
||||||
|
class DefaultExtension extends MProvider {
|
||||||
|
getHeaders(url) {
|
||||||
|
return {
|
||||||
|
Referer: this.source.baseUrl
|
||||||
|
};
|
||||||
|
}
|
||||||
|
mangaListFromPage(res) {
|
||||||
|
const doc = new Document(res.body);
|
||||||
|
const mangaElements = doc.select("div.grid > a[href]");
|
||||||
|
const list = [];
|
||||||
|
for (const element of mangaElements) {
|
||||||
|
const name = element.selectFirst("span.block").text;
|
||||||
|
const imageUrl = element.selectFirst("img").getSrc;
|
||||||
|
const link = element.getHref;
|
||||||
|
list.push({ name, imageUrl, link });
|
||||||
|
}
|
||||||
|
const hasNextPage = doc.selectFirst("a.flex.bg-themecolor:contains(Next)").text != "";
|
||||||
|
return { "list": list, hasNextPage };
|
||||||
|
}
|
||||||
|
toStatus(status) {
|
||||||
|
if (status == "Ongoing")
|
||||||
|
return 0;
|
||||||
|
else if (status == "Completed")
|
||||||
|
return 1;
|
||||||
|
else if (status == "Hiatus")
|
||||||
|
return 2;
|
||||||
|
else if (status == "Dropped")
|
||||||
|
return 3;
|
||||||
|
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) {
|
||||||
|
const res = await new Client().get(`${this.source.baseUrl}/series?name=&status=-1&types=-1&order=rating&page=${page}`);
|
||||||
|
return this.mangaListFromPage(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
async getLatestUpdates(page) {
|
||||||
|
const res = await new Client().get(`${this.source.baseUrl}/series?genres=&status=-1&types=-1&order=update&page=${page}`);
|
||||||
|
return this.mangaListFromPage(res);
|
||||||
|
}
|
||||||
|
async search(query, page, filters) {
|
||||||
|
const res = await new Client().get(`${this.source.baseUrl}/series?name=${query}&page=${page}`);
|
||||||
|
return this.mangaListFromPage(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
async getDetail(url) {
|
||||||
|
const res = await new Client().get(this.source.baseUrl + "/" + url);
|
||||||
|
const doc = new Document(res.body);
|
||||||
|
const imageUrl = doc.selectFirst("img[alt=poster]")?.getSrc;
|
||||||
|
const description = doc.selectFirst("span.font-medium.text-sm")?.text.trim();
|
||||||
|
const author = doc.selectFirst("h3:contains('Author')").nextElementSibling.text.trim();
|
||||||
|
const artist = doc.selectFirst("h3:contains('Artist')").nextElementSibling.text.trim();
|
||||||
|
const status = this.toStatus(doc.selectFirst("h3:contains('Status')").nextElementSibling.text.trim());
|
||||||
|
const genre = doc.select("div[class^=space] > div.flex > button.text-white")
|
||||||
|
.map((el) => el.text.trim());
|
||||||
|
const chapters = [];
|
||||||
|
const chapterElements = doc.select("div.scrollbar-thumb-themecolor > div.group");
|
||||||
|
for (const element of chapterElements) {
|
||||||
|
const url = element.selectFirst("a").getHref;
|
||||||
|
const chNumber = element.selectFirst("h3 > a").text.trim();
|
||||||
|
const chTitle = element.select("h3 > a > span").map((span) => span.text.trim()).join(" ").trim();
|
||||||
|
const name = chTitle == "" ? chNumber : `${chNumber} - ${chTitle}`;
|
||||||
|
|
||||||
|
let dateUpload;
|
||||||
|
try {
|
||||||
|
const dateText = element.selectFirst("h3 + h3").text.trim();
|
||||||
|
const cleanDateText = dateText.replace(/(\d+)(st|nd|rd|th)/, "$1");
|
||||||
|
dateUpload = this.parseDate(cleanDateText);
|
||||||
|
} catch (_) {
|
||||||
|
dateUpload = null
|
||||||
|
}
|
||||||
|
chapters.push({ name, url, dateUpload });
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
imageUrl,
|
||||||
|
description,
|
||||||
|
genre,
|
||||||
|
author,
|
||||||
|
artist,
|
||||||
|
status,
|
||||||
|
chapters
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async getPageList(url) {
|
||||||
|
const res = await new Client().get(this.source.baseUrl + "/series/" + url);
|
||||||
|
const scriptData = new Document(res.body).select("script:contains(self.__next_f.push)").map((e) => e.text.substringAfter("\"").substringBeforeLast("\"")).join("");
|
||||||
|
console.log(scriptData);
|
||||||
|
const match = scriptData.match(/\\"pages\\":(\[.*?])/);
|
||||||
|
if (!match) {
|
||||||
|
throw new Error("Failed to find chapter pages");
|
||||||
|
}
|
||||||
|
const pagesData = match[1];
|
||||||
|
|
||||||
|
const pageList = JSON.parse(pagesData.replace(/\\(.)/g, "$1"))
|
||||||
|
.sort((a, b) => a.order - b.order);
|
||||||
|
return pageList;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -57,6 +57,7 @@ List<Source> _searchJsSources(Directory dir) {
|
|||||||
for (var sourceJson in jsonDecode(match.group(1)!) as List) {
|
for (var sourceJson in jsonDecode(match.group(1)!) as List) {
|
||||||
final langs = sourceJson["langs"] as List?;
|
final langs = sourceJson["langs"] as List?;
|
||||||
final source = Source.fromJson(sourceJson)
|
final source = Source.fromJson(sourceJson)
|
||||||
|
..id = int.tryParse("${sourceJson["id"]}")
|
||||||
..sourceCodeLanguage = 1
|
..sourceCodeLanguage = 1
|
||||||
..appMinVerReq = defaultSource.appMinVerReq
|
..appMinVerReq = defaultSource.appMinVerReq
|
||||||
..sourceCodeUrl =
|
..sourceCodeUrl =
|
||||||
@@ -65,7 +66,8 @@ List<Source> _searchJsSources(Directory dir) {
|
|||||||
for (var lang in langs!) {
|
for (var lang in langs!) {
|
||||||
sourceList.add(Source.fromJson(source.toJson())
|
sourceList.add(Source.fromJson(source.toJson())
|
||||||
..lang = lang
|
..lang = lang
|
||||||
..id = 'mangayomi-js-"$lang"."${source.name}"'.hashCode);
|
..id = source.id ??
|
||||||
|
'mangayomi-js-"$lang"."${source.name}"'.hashCode);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
sourceList.add(source);
|
sourceList.add(source);
|
||||||
|
|||||||
Reference in New Issue
Block a user