From 5eabec7ffafa91fd5e5ab02bce366f8db9c59c92 Mon Sep 17 00:00:00 2001 From: Swakshan Date: Sat, 12 Apr 2025 21:33:26 +0530 Subject: [PATCH] anime(gojo): Added stream extraction --- javascript/anime/src/en/gojo.js | 83 +++++++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 4 deletions(-) diff --git a/javascript/anime/src/en/gojo.js b/javascript/anime/src/en/gojo.js index a6718781..d49ca089 100644 --- a/javascript/anime/src/en/gojo.js +++ b/javascript/anime/src/en/gojo.js @@ -6,7 +6,7 @@ const mangayomiSources = [{ "iconUrl": "https://www.google.com/s2/favicons?sz=128&domain=https://gojo.wtf/", "typeSource": "multi", "itemType": 1, - "version": "0.0.3", + "version": "0.0.5", "pkgPath": "anime/src/en/gojo.js" }]; @@ -205,11 +205,79 @@ class DefaultExtension extends MProvider { } - // For anime episode video list - async getVideoList(url) { - throw new Error("getVideoList not implemented"); + strixNzazaExtractor(res, prvd, type) { + if(res == null) return {} + + var src = res.sources[0] + var url = src.url + var quality = `${prvd} - ${src.quality} - ${type.toUpperCase()}` + return { + url: url, + quality, + originalUrl: url + } } + paheExtractor(res, type) { + var streams = [] + if (res != null) { + var srcs = res.sources + var hdr = this.getHeaders() + for (var src of srcs) { + var url = src.url + var quality = `Pahe - ${src.quality} - ${type.toUpperCase()}` + streams.push({ + url: url, + headers: hdr, + quality, + originalUrl: url + }) + } + } + return streams + } + + + async getStream(prvd, anilistId, epNum, subType, id, dub_id) { + var slug = `/tiddies?provider=${prvd}&id=${anilistId}&num=${epNum}&subType=${subType}&watchId=${id}&dub_id=${dub_id}` + return await this.gojoAPI(slug) + } + + // For anime episode video list + async getVideoList(url) { + var split = url.split('||') + var anilistId = split[0] + var info = JSON.parse(split[1]) + var streams = [] + var extractDubs = this.getPreference("gojo_extract_dub_streams") + + for (var prvd in info) { + var prd = info[prvd] + var epNum = prd.number + var subType = "sub" + var id = prd.id + var dub_id = null + + var res = await this.getStream(prvd, anilistId, epNum, subType, id, dub_id) + if (prvd != "pahe") { + streams.push(this.strixNzazaExtractor(res, prvd, subType)) + } else { + streams.push(...this.paheExtractor(res, subType)) + } + + if(!extractDubs) continue + subType = "dub" + if (prd.hasOwnProperty("dub_id")) dub_id = prd.dub_id + + var res = await this.getStream(prvd, anilistId, epNum, subType, id, dub_id) + if (prvd != "pahe") { + streams.push(this.strixNzazaExtractor(res, prvd, subType)) + } else { + streams.push(...this.paheExtractor(res, subType)) + } + } + return streams + } getSourcePreferences() { return [ { @@ -228,6 +296,13 @@ class DefaultExtension extends MProvider { summary: "", value: true } + }, { + key: "gojo_extract_dub_streams", + switchPreferenceCompat: { + title: 'Extract dub streams', + summary: "", + value: false + } }, ] }