diff --git a/lib/googledrive-extractor/build.gradle.kts b/lib/googledrive-extractor/build.gradle.kts new file mode 100644 index 000000000..0a2320551 --- /dev/null +++ b/lib/googledrive-extractor/build.gradle.kts @@ -0,0 +1,17 @@ +plugins { + id("com.android.library") + kotlin("android") +} + +android { + compileSdk = AndroidConfig.compileSdk + namespace = "eu.kanade.tachiyomi.lib.googledriveextractor" + + defaultConfig { + minSdk = AndroidConfig.minSdk + } +} + +dependencies { + compileOnly(libs.bundles.common) +} diff --git a/lib/googledrive-extractor/src/main/java/eu/kanade/tachiyomi/lib/googledriveextractor/GoogleDriveExtractor.kt b/lib/googledrive-extractor/src/main/java/eu/kanade/tachiyomi/lib/googledriveextractor/GoogleDriveExtractor.kt new file mode 100644 index 000000000..cf00a3fed --- /dev/null +++ b/lib/googledrive-extractor/src/main/java/eu/kanade/tachiyomi/lib/googledriveextractor/GoogleDriveExtractor.kt @@ -0,0 +1,103 @@ +package eu.kanade.tachiyomi.lib.googledriveextractor + +import eu.kanade.tachiyomi.animesource.model.Video +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.POST +import eu.kanade.tachiyomi.util.asJsoup +import okhttp3.Headers +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.FormBody +import okhttp3.OkHttpClient + +class GoogleDriveExtractor(private val client: OkHttpClient, private val headers: Headers) { + + companion object { + private const val GOOGLE_DRIVE_HOST = "drive.google.com" + private const val ACCEPT = "text/html,application/xhtml+xml," + + "application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8" + } + + private val noRedirectClient by lazy { + client.newBuilder().followRedirects(false).build() + } + + // Default / headers for most requests + private fun headersBuilder(block: Headers.Builder.() -> Unit) = headers.newBuilder() + .set("Accept", ACCEPT) + .set("Connection", "keep-alive") + .set("Host", GOOGLE_DRIVE_HOST) + .set("Origin", "https://$GOOGLE_DRIVE_HOST") + .set("Referer", "https://$GOOGLE_DRIVE_HOST/") + .apply { block() } + .build() + + // Needs to be the form of `https://drive.google.com/uc?id=GOOGLEDRIVEITEMID` + fun videosFromUrl(itemUrl: String, videoName: String = "Video"): List