fix(all/googledrive): Fix single items, add support for search, small… (#2216)

… code refactor, fix video extractor (#2216)
This commit is contained in:
Secozzi
2023-09-20 06:50:01 +00:00
committed by GitHub
parent b5fdaf0b9f
commit b50e3a0b75
5 changed files with 198 additions and 194 deletions

View File

@ -39,8 +39,18 @@ class GoogleDriveExtractor(private val client: OkHttpClient, private val headers
add("Cookie", getCookie(itemUrl))
}
val document = client.newCall(GET(itemUrl, itemHeaders)).execute()
.use { it.asJsoup() }
val documentResp = noRedirectClient.newCall(
GET(itemUrl, itemHeaders)
).execute()
if (documentResp.isRedirect) {
val newUrl = documentResp.use { it.headers["location"] }
?: return listOf(Video(itemUrl, videoName, itemUrl, itemHeaders))
return videoFromRedirect(newUrl, itemUrl, videoName)
}
val document = documentResp.use { it.asJsoup() }
val itemSize = document.selectFirst("span.uc-name-size")
?.let { " ${it.ownText().trim()} " }
@ -59,6 +69,15 @@ class GoogleDriveExtractor(private val client: OkHttpClient, private val headers
val redirected = response.use { it.headers["location"] }
?: return listOf(Video(url, videoName + itemSize, url))
return videoFromRedirect(redirected, url, videoName, itemSize)
}
private fun videoFromRedirect(
redirected: String,
fallbackUrl: String,
videoName: String,
itemSize: String = ""
): List<Video> {
val redirectedHeaders = headersBuilder {
set("Host", redirected.toHttpUrl().host)
}
@ -69,7 +88,7 @@ class GoogleDriveExtractor(private val client: OkHttpClient, private val headers
val authCookie = redirectedResponseHeaders.firstOrNull {
it.first == "set-cookie" && it.second.startsWith("AUTH_")
}?.second?.substringBefore(";") ?: return listOf(Video(url, videoName + itemSize, url))
}?.second?.substringBefore(";") ?: return listOf(Video(fallbackUrl, videoName + itemSize, fallbackUrl))
val newRedirected = redirectedResponseHeaders["location"]
?: return listOf(Video(redirected, videoName + itemSize, redirected))