forked from Kohi-den/extensions-source
Initial commit
This commit is contained in:
commit
98ed7e8839
2263 changed files with 108711 additions and 0 deletions
14
src/pt/rinecloud/build.gradle
Normal file
14
src/pt/rinecloud/build.gradle
Normal file
|
@ -0,0 +1,14 @@
|
|||
ext {
|
||||
extName = 'RineCloud'
|
||||
extClass = '.RineCloud'
|
||||
themePkg = 'animestream'
|
||||
baseUrl = 'https://rine.cloud'
|
||||
overrideVersionCode = 9
|
||||
}
|
||||
|
||||
apply from: "$rootDir/common.gradle"
|
||||
|
||||
dependencies {
|
||||
implementation(project(":lib:unpacker"))
|
||||
implementation(project(":lib:playlist-utils"))
|
||||
}
|
BIN
src/pt/rinecloud/res/mipmap-hdpi/ic_launcher.png
Normal file
BIN
src/pt/rinecloud/res/mipmap-hdpi/ic_launcher.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.5 KiB |
BIN
src/pt/rinecloud/res/mipmap-mdpi/ic_launcher.png
Normal file
BIN
src/pt/rinecloud/res/mipmap-mdpi/ic_launcher.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.4 KiB |
BIN
src/pt/rinecloud/res/mipmap-xhdpi/ic_launcher.png
Normal file
BIN
src/pt/rinecloud/res/mipmap-xhdpi/ic_launcher.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.3 KiB |
BIN
src/pt/rinecloud/res/mipmap-xxhdpi/ic_launcher.png
Normal file
BIN
src/pt/rinecloud/res/mipmap-xxhdpi/ic_launcher.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
BIN
src/pt/rinecloud/res/mipmap-xxxhdpi/ic_launcher.png
Normal file
BIN
src/pt/rinecloud/res/mipmap-xxxhdpi/ic_launcher.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
|
@ -0,0 +1,25 @@
|
|||
package eu.kanade.tachiyomi.animeextension.pt.rinecloud
|
||||
|
||||
import eu.kanade.tachiyomi.animeextension.pt.rinecloud.extractors.RineCloudExtractor
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream
|
||||
|
||||
class RineCloud : AnimeStream(
|
||||
"pt-BR",
|
||||
"RineCloud",
|
||||
"https://rine.cloud",
|
||||
) {
|
||||
override fun headersBuilder() = super.headersBuilder().add("Referer", baseUrl)
|
||||
|
||||
// ============================ Video Links =============================
|
||||
override val prefQualityValues = arrayOf("1080p", "720p", "480p", "360p", "240p")
|
||||
override val prefQualityEntries = prefQualityValues
|
||||
|
||||
private val rinecloudExtractor by lazy { RineCloudExtractor(client, headers) }
|
||||
override fun getVideoList(url: String, name: String): List<Video> {
|
||||
return when {
|
||||
"rine.cloud" in url -> rinecloudExtractor.videosFromUrl(url)
|
||||
else -> emptyList()
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
package eu.kanade.tachiyomi.animeextension.pt.rinecloud.extractors
|
||||
|
||||
import android.util.Base64
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.lib.playlistutils.PlaylistUtils
|
||||
import eu.kanade.tachiyomi.lib.unpacker.Unpacker
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.Headers
|
||||
import okhttp3.OkHttpClient
|
||||
|
||||
class RineCloudExtractor(private val client: OkHttpClient, private val headers: Headers) {
|
||||
private val playlistUtils by lazy { PlaylistUtils(client, headers) }
|
||||
|
||||
fun videosFromUrl(url: String): List<Video> {
|
||||
val playerDoc = client.newCall(GET(url, headers)).execute().asJsoup()
|
||||
val encodedScript = playerDoc.selectFirst("script:containsData(JuicyCodes.Run)")
|
||||
?.data()
|
||||
|
||||
val script = if (encodedScript != null) {
|
||||
val decodedData = encodedScript.substringAfter("(").substringBefore(")")
|
||||
.split("+\"")
|
||||
.joinToString("") { it.replace("\"", "") }
|
||||
.let { Base64.decode(it, Base64.DEFAULT) }
|
||||
.let(::String)
|
||||
Unpacker.unpack(decodedData).ifEmpty { return emptyList() }
|
||||
} else {
|
||||
playerDoc.selectFirst("script:containsData(const player)")?.data()
|
||||
?: return emptyList()
|
||||
}
|
||||
|
||||
return if ("googlevideo" in script) {
|
||||
script.substringAfter("sources:").substringBefore("]")
|
||||
.split("{")
|
||||
.drop(1)
|
||||
.map {
|
||||
val videoUrl = it.substringAfter("file\":\"").substringBefore('"')
|
||||
val quality = it.substringAfter("label\":\"").substringBefore('"')
|
||||
Video(videoUrl, "Rinecloud - $quality", videoUrl, headers)
|
||||
}
|
||||
} else {
|
||||
val masterPlaylistUrl = script.substringAfter("sources:")
|
||||
.substringAfter("file\":\"")
|
||||
.substringBefore('"')
|
||||
|
||||
playlistUtils.extractFromHls(masterPlaylistUrl, videoNameGen = { "Rinecloud - $it" })
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue