66 lines
1.6 KiB
Kotlin
66 lines
1.6 KiB
Kotlin
package dev.inmo.tgbotapi.extensions.api.files
|
|
|
|
import dev.inmo.micro_utils.coroutines.doOutsideOfCoroutine
|
|
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
import dev.inmo.tgbotapi.extensions.api.get.getFileAdditionalInfo
|
|
import dev.inmo.tgbotapi.requests.abstracts.FileId
|
|
import dev.inmo.tgbotapi.types.files.PathedFile
|
|
import dev.inmo.tgbotapi.types.files.TelegramMediaFile
|
|
import dev.inmo.tgbotapi.types.message.content.MediaContent
|
|
import io.ktor.util.cio.use
|
|
import io.ktor.util.cio.writeChannel
|
|
import io.ktor.utils.io.copyAndClose
|
|
import io.ktor.utils.io.copyTo
|
|
import kotlinx.coroutines.job
|
|
import java.io.File
|
|
import kotlin.coroutines.coroutineContext
|
|
|
|
suspend fun TelegramBot.downloadFile(
|
|
filePath: String,
|
|
destFile: File
|
|
): File {
|
|
val readChannel = downloadFileStream(filePath)
|
|
|
|
destFile.deleteRecursively()
|
|
destFile.parentFile.mkdirs()
|
|
doOutsideOfCoroutine { destFile.createNewFile() }
|
|
|
|
destFile.writeChannel(coroutineContext.job).use {
|
|
readChannel.copyAndClose(this)
|
|
}
|
|
|
|
return destFile
|
|
}
|
|
|
|
suspend fun TelegramBot.downloadFile(
|
|
pathedFile: PathedFile,
|
|
destFile: File
|
|
) = downloadFile(
|
|
pathedFile.filePath,
|
|
destFile
|
|
)
|
|
|
|
suspend fun TelegramBot.downloadFile(
|
|
fileId: FileId,
|
|
destFile: File
|
|
) = downloadFile(
|
|
getFileAdditionalInfo(fileId),
|
|
destFile
|
|
)
|
|
|
|
suspend fun TelegramBot.downloadFile(
|
|
file: TelegramMediaFile,
|
|
destFile: File
|
|
): File = downloadFile(
|
|
getFileAdditionalInfo(file),
|
|
destFile
|
|
)
|
|
|
|
suspend fun TelegramBot.downloadFile(
|
|
file: MediaContent,
|
|
destFile: File
|
|
) = downloadFile(
|
|
getFileAdditionalInfo(file.media),
|
|
destFile
|
|
)
|