mirror of
https://github.com/kodjodevf/mangayomi-extensions.git
synced 2026-02-16 11:50:30 +00:00
extension(sudatchi): Added streams
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.2",
|
"version": "1.0.0",
|
||||||
"dateFormat": "",
|
"dateFormat": "",
|
||||||
"dateFormatLocale": "",
|
"dateFormatLocale": "",
|
||||||
"pkgPath": "anime/src/en/sudatchi.js"
|
"pkgPath": "anime/src/en/sudatchi.js"
|
||||||
@@ -24,7 +24,7 @@ class DefaultExtension extends MProvider {
|
|||||||
return preferences.get(key);
|
return preferences.get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
getImgUrl(slug) {
|
getUrl(slug) {
|
||||||
return `https://ipfs.sudatchi.com/ipfs/${slug}`
|
return `https://ipfs.sudatchi.com/ipfs/${slug}`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ class DefaultExtension extends MProvider {
|
|||||||
|
|
||||||
}
|
}
|
||||||
var link = details.slug
|
var link = details.slug
|
||||||
var imageUrl = this.getImgUrl(details.imgUrl)
|
var imageUrl = this.getUrl(details.imgUrl)
|
||||||
list.push({
|
list.push({
|
||||||
name,
|
name,
|
||||||
imageUrl,
|
imageUrl,
|
||||||
@@ -123,6 +123,7 @@ class DefaultExtension extends MProvider {
|
|||||||
}[status] ?? 5;
|
}[status] ?? 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async getDetail(url) {
|
async getDetail(url) {
|
||||||
var link = `https://sudatchi.com/anime/${url}`
|
var link = `https://sudatchi.com/anime/${url}`
|
||||||
var jsonData = await this.extractFromUrl(link);
|
var jsonData = await this.extractFromUrl(link);
|
||||||
@@ -141,7 +142,7 @@ class DefaultExtension extends MProvider {
|
|||||||
}
|
}
|
||||||
var description = details.synopsis
|
var description = details.synopsis
|
||||||
var status = this.statusCode(details.Status.name)
|
var status = this.statusCode(details.Status.name)
|
||||||
var imageUrl = this.getImgUrl(details.imgUrl)
|
var imageUrl = this.getUrl(details.imgUrl)
|
||||||
var genre = []
|
var genre = []
|
||||||
var animeGenres = details.AnimeGenres
|
var animeGenres = details.AnimeGenres
|
||||||
for (var gObj of animeGenres) {
|
for (var gObj of animeGenres) {
|
||||||
@@ -150,12 +151,18 @@ class DefaultExtension extends MProvider {
|
|||||||
|
|
||||||
var chapters = []
|
var chapters = []
|
||||||
var episodes = details.Episodes
|
var episodes = details.Episodes
|
||||||
|
var typeId = details.typeId
|
||||||
for (var eObj of episodes) {
|
if (typeId == 6) {
|
||||||
var name = eObj.title
|
var number = episodes[0].number
|
||||||
var number = eObj.number
|
|
||||||
var epUrl = `${url}/${number}`
|
var epUrl = `${url}/${number}`
|
||||||
chapters.push({ name, url: epUrl })
|
chapters.push({ name: "Movie", url: epUrl })
|
||||||
|
} else {
|
||||||
|
for (var eObj of episodes) {
|
||||||
|
var name = eObj.title
|
||||||
|
var number = eObj.number
|
||||||
|
var epUrl = `${url}/${number}`
|
||||||
|
chapters.push({ name, url: epUrl })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -170,9 +177,72 @@ class DefaultExtension extends MProvider {
|
|||||||
async cleanHtmlContent(html) {
|
async cleanHtmlContent(html) {
|
||||||
throw new Error("cleanHtmlContent not implemented");
|
throw new Error("cleanHtmlContent not implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async extractStreams(url) {
|
||||||
|
const response = await new Client().get(url);
|
||||||
|
const body = response.body;
|
||||||
|
const lines = body.split('\n');
|
||||||
|
var audios = []
|
||||||
|
|
||||||
|
var streams = [{
|
||||||
|
url: url,
|
||||||
|
originalUrl: url,
|
||||||
|
quality: "auto",
|
||||||
|
}];
|
||||||
|
|
||||||
|
for (let i = 0; i < lines.length; i++) {
|
||||||
|
var currentLine = lines[i]
|
||||||
|
if (currentLine.startsWith('#EXT-X-STREAM-INF:')) {
|
||||||
|
var resolution = currentLine.match(/RESOLUTION=(\d+x\d+)/)[1];
|
||||||
|
var m3u8Url = lines[i + 1].trim();
|
||||||
|
m3u8Url = m3u8Url.replace("./", `${url}/`)
|
||||||
|
streams.push({
|
||||||
|
url: m3u8Url,
|
||||||
|
originalUrl: m3u8Url,
|
||||||
|
quality: resolution,
|
||||||
|
});
|
||||||
|
} else if (currentLine.startsWith('#EXT-X-MEDIA:TYPE=AUDIO')) {
|
||||||
|
var attributesString = currentLine.split(",")
|
||||||
|
var attributeRegex = /([A-Z-]+)=("([^"]*)"|[^,]*)/g;
|
||||||
|
let match;
|
||||||
|
var trackInfo = {};
|
||||||
|
while ((match = attributeRegex.exec(attributesString)) !== null) {
|
||||||
|
var key = match[1];
|
||||||
|
var value = match[3] || match[2];
|
||||||
|
if (key === "NAME") {
|
||||||
|
trackInfo.label = value
|
||||||
|
} else if (key === "URI") {
|
||||||
|
trackInfo.file = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
audios.push(trackInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
streams[0].audios = audios
|
||||||
|
return streams
|
||||||
|
}
|
||||||
|
|
||||||
// For anime episode video list
|
// For anime episode video list
|
||||||
async getVideoList(url) {
|
async getVideoList(url) {
|
||||||
throw new Error("getVideoList not implemented");
|
var link = `https://sudatchi.com/watch/${url}`
|
||||||
|
var jsonData = await this.extractFromUrl(link);
|
||||||
|
var episodeData = jsonData.episodeData.episode;
|
||||||
|
var epId = episodeData.id;
|
||||||
|
|
||||||
|
var epLink = `https://sudatchi.com/videos/m3u8/episode-${epId}.m3u8`
|
||||||
|
var streams = await this.extractStreams(epLink);
|
||||||
|
|
||||||
|
var subs = JSON.parse(jsonData.episodeData.subtitlesJson)
|
||||||
|
var subtitles = [];
|
||||||
|
for (var sub of subs) {
|
||||||
|
var file = this.getUrl(sub.url)
|
||||||
|
var label = sub.SubtitlesName.name;
|
||||||
|
subtitles.push({ file: file, label: label });
|
||||||
|
}
|
||||||
|
streams[0].subtitles = subtitles
|
||||||
|
|
||||||
|
return streams;
|
||||||
|
|
||||||
}
|
}
|
||||||
// For manga chapter pages
|
// For manga chapter pages
|
||||||
async getPageList() {
|
async getPageList() {
|
||||||
|
|||||||
Reference in New Issue
Block a user