Convert OkruExtractor to shared lib (#944)
This commit is contained in:
25
lib/okru-extractor/build.gradle.kts
Normal file
25
lib/okru-extractor/build.gradle.kts
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
plugins {
|
||||||
|
id("com.android.library")
|
||||||
|
kotlin("android")
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
compileSdk = AndroidConfig.compileSdk
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
minSdk = AndroidConfig.minSdk
|
||||||
|
targetSdk = AndroidConfig.targetSdk
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compileOnly(libs.kotlin.stdlib)
|
||||||
|
compileOnly(libs.okhttp)
|
||||||
|
compileOnly(libs.aniyomi.lib)
|
||||||
|
compileOnly(libs.jsoup)
|
||||||
|
}
|
||||||
|
// BUMPS: 0
|
2
lib/okru-extractor/src/main/AndroidManifest.xml
Normal file
2
lib/okru-extractor/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="eu.kanade.tachiyomi.lib.okruextractor" />
|
@ -0,0 +1,46 @@
|
|||||||
|
package eu.kanade.tachiyomi.lib.okruextractor
|
||||||
|
|
||||||
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
|
import eu.kanade.tachiyomi.network.GET
|
||||||
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
|
||||||
|
class OkruExtractor(private val client: OkHttpClient) {
|
||||||
|
|
||||||
|
private fun fixQuality(quality: String): String {
|
||||||
|
val qualities = listOf(
|
||||||
|
Pair("full", "1080p"),
|
||||||
|
Pair("hd", "720p"),
|
||||||
|
Pair("sd", "480p"),
|
||||||
|
Pair("low", "360p"),
|
||||||
|
Pair("lowest", "240p"),
|
||||||
|
Pair("mobile", "144p")
|
||||||
|
)
|
||||||
|
return qualities.find { it.first == quality }?.second ?: quality
|
||||||
|
}
|
||||||
|
|
||||||
|
fun videosFromUrl(url: String, prefix: String = "", fixQualities: Boolean = true): List<Video> {
|
||||||
|
val document = client.newCall(GET(url)).execute().asJsoup()
|
||||||
|
val videosString = document.selectFirst("div[data-options]")
|
||||||
|
?.attr("data-options")
|
||||||
|
?.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
||||||
|
?.substringBefore("]")
|
||||||
|
?: return emptyList<Video>()
|
||||||
|
return videosString.split("{\\\"name\\\":\\\"").reversed().mapNotNull {
|
||||||
|
val videoUrl = it.substringAfter("url\\\":\\\"")
|
||||||
|
.substringBefore("\\\"")
|
||||||
|
.replace("\\\\u0026", "&")
|
||||||
|
val quality = it.substringBefore("\\\"").let {
|
||||||
|
if (fixQualities) fixQuality(it)
|
||||||
|
else it
|
||||||
|
}
|
||||||
|
val videoQuality = ("Okru:" + quality).let {
|
||||||
|
if (prefix.isNotBlank()) "$prefix $it"
|
||||||
|
else it
|
||||||
|
}
|
||||||
|
if (videoUrl.startsWith("https://"))
|
||||||
|
Video(videoUrl, videoQuality, videoUrl)
|
||||||
|
else null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user