Initial commit

This commit is contained in:
almightyhak 2024-06-20 11:54:12 +07:00
commit 98ed7e8839
2263 changed files with 108711 additions and 0 deletions

View 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"))
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View file

@ -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()
}
}
}

View file

@ -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" })
}
}
}