cloudstream-extensions-hexated/StremioX/src/main/kotlin/com/hexated/Utils.kt

91 lines
2.4 KiB
Kotlin
Raw Normal View History

2023-04-01 18:27:43 +00:00
package com.hexated
2023-08-11 13:22:36 +00:00
import com.lagradost.cloudstream3.APIHolder
2023-09-21 07:50:29 +00:00
import com.lagradost.cloudstream3.APIHolder.unixTimeMS
2023-09-21 07:43:38 +00:00
import com.lagradost.cloudstream3.mvvm.logError
2023-04-15 23:15:07 +00:00
import com.lagradost.nicehttp.Requests.Companion.await
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
2023-08-11 13:22:36 +00:00
import java.text.SimpleDateFormat
import java.util.Locale
2023-04-15 23:15:07 +00:00
import java.util.concurrent.TimeUnit
const val defaultTimeOut = 30L
suspend fun request(
url: String,
allowRedirects: Boolean = true,
timeout: Long = defaultTimeOut
): Response {
val client = OkHttpClient().newBuilder()
.connectTimeout(timeout, TimeUnit.SECONDS)
.readTimeout(timeout, TimeUnit.SECONDS)
.writeTimeout(timeout, TimeUnit.SECONDS)
.followRedirects(allowRedirects)
.followSslRedirects(allowRedirects)
.build()
val request: Request = Request.Builder()
.url(url)
.build()
return client.newCall(request).await()
}
fun Int.isSuccessful() : Boolean {
return this in 200..299
}
fun String.fixSourceUrl(): String {
2023-04-01 18:27:43 +00:00
return this.replace("/manifest.json", "").replace("stremio://", "https://")
}
2023-04-15 23:15:07 +00:00
fun fixRDSourceName(name: String?, title: String?): String {
2023-04-03 21:27:03 +00:00
return when {
name?.contains("[RD+]", true) == true -> "[RD+] $title"
name?.contains("[RD download]", true) == true -> "[RD] $title"
!name.isNullOrEmpty() && !title.isNullOrEmpty() -> "$name $title"
else -> title ?: name ?: ""
}
2023-04-02 04:33:33 +00:00
}
2023-04-01 18:27:43 +00:00
fun getEpisodeSlug(
season: Int? = null,
episode: Int? = null,
): Pair<String, String> {
return if (season == null && episode == null) {
"" to ""
} else {
(if (season!! < 10) "0$season" else "$season") to (if (episode!! < 10) "0$episode" else "$episode")
}
}
2023-08-11 13:22:36 +00:00
fun isUpcoming(dateString: String?): Boolean {
2023-09-21 07:43:38 +00:00
return try {
val format = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
val dateTime = dateString?.let { format.parse(it)?.time } ?: return false
2023-09-21 07:50:29 +00:00
unixTimeMS < dateTime
2023-09-21 07:43:38 +00:00
} catch (t: Throwable) {
logError(t)
false
}
2023-08-11 13:22:36 +00:00
}
2023-04-01 18:27:43 +00:00
fun fixUrl(url: String, domain: String): String {
if (url.startsWith("http")) {
return url
}
if (url.isEmpty()) {
return ""
}
val startsWithNoHttp = url.startsWith("//")
if (startsWithNoHttp) {
return "https:$url"
} else {
if (url.startsWith('/')) {
return domain + url
}
return "$domain/$url"
}
}