2020-10-04 11:06:30 +00:00
|
|
|
package dev.inmo.tgbotapi.bot.Ktor.base
|
2020-08-23 15:43:58 +00:00
|
|
|
|
2020-11-07 07:42:10 +00:00
|
|
|
import dev.inmo.micro_utils.coroutines.safely
|
2020-10-04 11:06:30 +00:00
|
|
|
import dev.inmo.tgbotapi.bot.Ktor.KtorCallFactory
|
|
|
|
import dev.inmo.tgbotapi.requests.DownloadFile
|
|
|
|
import dev.inmo.tgbotapi.requests.abstracts.Request
|
|
|
|
import dev.inmo.tgbotapi.utils.TelegramAPIUrlsKeeper
|
2020-08-23 15:43:58 +00:00
|
|
|
import io.ktor.client.HttpClient
|
2020-11-05 18:12:14 +00:00
|
|
|
import io.ktor.client.request.get
|
2020-08-23 15:43:58 +00:00
|
|
|
import kotlinx.serialization.json.Json
|
|
|
|
|
|
|
|
object DownloadFileRequestCallFactory : KtorCallFactory {
|
|
|
|
override suspend fun <T : Any> makeCall(
|
|
|
|
client: HttpClient,
|
|
|
|
urlsKeeper: TelegramAPIUrlsKeeper,
|
|
|
|
request: Request<T>,
|
|
|
|
jsonFormatter: Json
|
|
|
|
): T? = (request as? DownloadFile) ?.let {
|
|
|
|
val fullUrl = "${urlsKeeper.fileBaseUrl}/${it.filePath}"
|
|
|
|
|
2020-11-07 07:42:10 +00:00
|
|
|
return safely {
|
2020-08-23 15:43:58 +00:00
|
|
|
@Suppress("UNCHECKED_CAST")
|
|
|
|
client.get<ByteArray>(fullUrl) as T // always ByteArray
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|