mirror of
https://github.com/kodjodevf/mangayomi-extensions.git
synced 2026-02-15 03:10:59 +00:00
anime(dramacool): Added stream split & quality preference
This commit is contained in:
@@ -6,7 +6,7 @@ const mangayomiSources = [{
|
|||||||
"iconUrl": "https://www.google.com/s2/favicons?sz=128&domain=https://dramacool.com.tr",
|
"iconUrl": "https://www.google.com/s2/favicons?sz=128&domain=https://dramacool.com.tr",
|
||||||
"typeSource": "multi",
|
"typeSource": "multi",
|
||||||
"itemType": 1,
|
"itemType": 1,
|
||||||
"version": "0.0.4",
|
"version": "1.0.0",
|
||||||
"pkgPath": "anime/src/all/dramacool.js"
|
"pkgPath": "anime/src/all/dramacool.js"
|
||||||
}];
|
}];
|
||||||
|
|
||||||
@@ -142,13 +142,42 @@ class DefaultExtension extends MProvider {
|
|||||||
|
|
||||||
return { name, imageUrl, description, link, status, genre, chapters }
|
return { name, imageUrl, description, link, status, genre, chapters }
|
||||||
}
|
}
|
||||||
// For novel html content
|
|
||||||
async getHtmlContent(url) {
|
async splitStreams(streams, server) {
|
||||||
throw new Error("getHtmlContent not implemented");
|
var pref = this.getPreference("dramacool_split_stream_quality");
|
||||||
}
|
if (!pref) return streams
|
||||||
// Clean html up for reader
|
var autoStream = streams[0]
|
||||||
async cleanHtmlContent(html) {
|
var autoStreamUrl = autoStream.url
|
||||||
throw new Error("cleanHtmlContent not implemented");
|
var hdr = autoStream.headers
|
||||||
|
var hostUrl = ""
|
||||||
|
if (server == "Asianload") {
|
||||||
|
hostUrl = autoStreamUrl.substring(0, autoStreamUrl.indexOf("/media"))
|
||||||
|
} else {
|
||||||
|
hostUrl = autoStreamUrl.substring(0, autoStreamUrl.indexOf("master.m3u8"))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var response = await new Client().get(autoStreamUrl, hdr)
|
||||||
|
var body = response.body;
|
||||||
|
var lines = body.split('\n');
|
||||||
|
|
||||||
|
for (let i = 0; i < lines.length; i++) {
|
||||||
|
if (lines[i].startsWith('#EXT-X-STREAM-INF:')) {
|
||||||
|
var resolution = lines[i].match(/RESOLUTION=(\d+x\d+)/)[1];
|
||||||
|
resolution = `${server} - ${resolution}`
|
||||||
|
var m3u8Url = lines[i + 1].trim();
|
||||||
|
m3u8Url = hostUrl + m3u8Url
|
||||||
|
streams.push({
|
||||||
|
url: m3u8Url,
|
||||||
|
originalUrl: m3u8Url,
|
||||||
|
quality: resolution,
|
||||||
|
headers: hdr
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return streams
|
||||||
}
|
}
|
||||||
|
|
||||||
decodeBase64(f) {
|
decodeBase64(f) {
|
||||||
@@ -167,7 +196,7 @@ class DefaultExtension extends MProvider {
|
|||||||
return e
|
return e
|
||||||
};
|
};
|
||||||
|
|
||||||
extractDramacoolEmbed(doc) {
|
async extractDramacoolEmbed(doc) {
|
||||||
var streams = []
|
var streams = []
|
||||||
var script = doc.select('script').at(-2)
|
var script = doc.select('script').at(-2)
|
||||||
var unpack = unpackJs(script.text)
|
var unpack = unpackJs(script.text)
|
||||||
@@ -185,10 +214,12 @@ class DefaultExtension extends MProvider {
|
|||||||
headers: this.getHeaders("https://dramacool.men/")
|
headers: this.getHeaders("https://dramacool.men/")
|
||||||
});
|
});
|
||||||
|
|
||||||
|
streams = await this.splitStreams(streams, "Dramacool")
|
||||||
|
|
||||||
return streams
|
return streams
|
||||||
}
|
}
|
||||||
|
|
||||||
extractAsianLoadEmbed(doc) {
|
async extractAsianLoadEmbed(doc) {
|
||||||
var streams = []
|
var streams = []
|
||||||
var script = doc.select('script').at(-2)
|
var script = doc.select('script').at(-2)
|
||||||
var unpack = script.text
|
var unpack = script.text
|
||||||
@@ -235,13 +266,36 @@ class DefaultExtension extends MProvider {
|
|||||||
streams.push({
|
streams.push({
|
||||||
url: downUrl,
|
url: downUrl,
|
||||||
originalUrl: downUrl,
|
originalUrl: downUrl,
|
||||||
quality: "Asianload - Direct Download",
|
quality: "Asianload - Direct download",
|
||||||
headers: this.getHeaders("https://asianload.cfd/")
|
headers: this.getHeaders("https://asianload.cfd/")
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
streams = await this.splitStreams(streams, "Asianload")
|
||||||
|
|
||||||
return streams
|
return streams
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sorts streams based on user preference.
|
||||||
|
async sortStreams(streams) {
|
||||||
|
var sortedStreams = [];
|
||||||
|
|
||||||
|
var copyStreams = streams.slice()
|
||||||
|
var pref = this.getPreference("dramacool_video_resolution");
|
||||||
|
for (var i in streams) {
|
||||||
|
var stream = streams[i];
|
||||||
|
if (stream.quality.indexOf(pref) > -1) {
|
||||||
|
sortedStreams.push(stream);
|
||||||
|
var index = copyStreams.indexOf(stream);
|
||||||
|
if (index > -1) {
|
||||||
|
copyStreams.splice(index, 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [...sortedStreams, ...copyStreams]
|
||||||
|
}
|
||||||
|
|
||||||
// For anime episode video list
|
// For anime episode video list
|
||||||
async getVideoList(url) {
|
async getVideoList(url) {
|
||||||
var res = await this.request(url)
|
var res = await this.request(url)
|
||||||
@@ -256,24 +310,15 @@ class DefaultExtension extends MProvider {
|
|||||||
var doc = new Document(res.body);
|
var doc = new Document(res.body);
|
||||||
|
|
||||||
if (iframe.includes("//dramacool")) {
|
if (iframe.includes("//dramacool")) {
|
||||||
|
streams = await this.extractDramacoolEmbed(doc)
|
||||||
streams = this.extractDramacoolEmbed(doc)
|
|
||||||
} else if (iframe.includes("//asianload")) {
|
} else if (iframe.includes("//asianload")) {
|
||||||
|
streams = await this.extractAsianLoadEmbed(doc)
|
||||||
streams = this.extractAsianLoadEmbed(doc)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return streams
|
return this.sortStreams(streams)
|
||||||
|
|
||||||
}
|
}
|
||||||
// For manga chapter pages
|
|
||||||
async getPageList(url) {
|
|
||||||
throw new Error("getPageList not implemented");
|
|
||||||
}
|
|
||||||
getFilterList() {
|
|
||||||
throw new Error("getFilterList not implemented");
|
|
||||||
}
|
|
||||||
getSourcePreferences() {
|
getSourcePreferences() {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
@@ -285,7 +330,24 @@ class DefaultExtension extends MProvider {
|
|||||||
entries: ["Drama", "Movie", "KShow"],
|
entries: ["Drama", "Movie", "KShow"],
|
||||||
entryValues: ["recently-added-drama", "recently-added-movie", "recently-added-kshow"]
|
entryValues: ["recently-added-drama", "recently-added-movie", "recently-added-kshow"]
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
key: 'dramacool_split_stream_quality',
|
||||||
|
switchPreferenceCompat: {
|
||||||
|
title: 'Split stream into different quality streams',
|
||||||
|
summary: "Split stream Auto into 360p/720p/1080p",
|
||||||
|
value: true
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: 'dramacool_video_resolution',
|
||||||
|
listPreference: {
|
||||||
|
title: 'Preferred video resolution',
|
||||||
|
summary: '',
|
||||||
|
valueIndex: 0,
|
||||||
|
entries: ["Auto", "Direct download", "720p", "480", "360p"],
|
||||||
|
entryValues: ["Auto", "download", "720", "480", "360"]
|
||||||
|
}
|
||||||
|
},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user