From 9eb6008a73a67a5eafa599dc16924b678a3a379b Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 13 Aug 2021 11:37:01 +0600 Subject: [PATCH] convertToStorageFile --- CHANGELOG.md | 2 + .../tgbotapi/extensions/api/get/GetFile.kt | 5 +++ .../utils/types/files/ContentAsStorageFile.kt | 45 +++++++++++++++++++ .../files/AdditionalContentAsStorageFile.kt | 41 +++++++++++++++++ 4 files changed, 93 insertions(+) create mode 100644 tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/types/files/ContentAsStorageFile.kt create mode 100644 tgbotapi.extensions.utils/src/jvmMain/kotlin/dev/inmo/tgbotapi/types/files/AdditionalContentAsStorageFile.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index 4896601051..1c69f05405 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ `import dev.inmo.tgbotapi.extensions.api.downloadFile` with `import dev.inmo.tgbotapi.extensions.api.files.downloadFile` * `PathedFile#filename` extension has been deprecated, and new property `PathedFile#fileName` has been included directly in `PathedFile` +* `Utils`: + * Add several functions `convertToStorageFile` and extensions `TelegramBot#convertToStorageFile` ## 0.35.4 Hotfix diff --git a/tgbotapi.extensions.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/get/GetFile.kt b/tgbotapi.extensions.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/get/GetFile.kt index d2515dd8ce..d3ce16dccc 100644 --- a/tgbotapi.extensions.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/get/GetFile.kt +++ b/tgbotapi.extensions.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/get/GetFile.kt @@ -4,6 +4,7 @@ import dev.inmo.tgbotapi.bot.TelegramBot import dev.inmo.tgbotapi.requests.abstracts.FileId import dev.inmo.tgbotapi.requests.get.GetFile import dev.inmo.tgbotapi.types.files.abstracts.TelegramMediaFile +import dev.inmo.tgbotapi.types.message.content.abstracts.MediaContent suspend fun TelegramBot.getFileAdditionalInfo( fileId: FileId @@ -14,3 +15,7 @@ suspend fun TelegramBot.getFileAdditionalInfo( suspend fun TelegramBot.getFileAdditionalInfo( file: TelegramMediaFile ) = getFileAdditionalInfo(file.fileId) + +suspend fun TelegramBot.getFileAdditionalInfo( + content: MediaContent +) = getFileAdditionalInfo(content.media) diff --git a/tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/types/files/ContentAsStorageFile.kt b/tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/types/files/ContentAsStorageFile.kt new file mode 100644 index 0000000000..b9716833eb --- /dev/null +++ b/tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/types/files/ContentAsStorageFile.kt @@ -0,0 +1,45 @@ +package dev.inmo.tgbotapi.extensions.utils.types.files + +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.requests.DownloadFileStream +import dev.inmo.tgbotapi.requests.abstracts.FileId +import dev.inmo.tgbotapi.requests.get.GetFile +import dev.inmo.tgbotapi.types.files.PathedFile +import dev.inmo.tgbotapi.types.files.abstracts.TelegramMediaFile +import dev.inmo.tgbotapi.types.message.content.abstracts.MediaContent +import dev.inmo.tgbotapi.utils.* + +suspend fun convertToStorageFile( + downloadStreamAllocator: ByteReadChannelAllocator, + pathedFile: PathedFile, + mimeType: MimeType +): StorageFile { + return downloadStreamAllocator.asStorageFile( + pathedFile.fileName, + mimeType + ) +} + +suspend fun TelegramBot.convertToStorageFile( + pathedFile: PathedFile, + mimeType: MimeType +): StorageFile = convertToStorageFile( + execute(DownloadFileStream(pathedFile.filePath)), + pathedFile, + mimeType +) + +suspend fun TelegramBot.convertToStorageFile( + fileId: FileId, + mimeType: MimeType +): StorageFile = convertToStorageFile(execute(GetFile(fileId)), mimeType) + +suspend fun TelegramBot.convertToStorageFile( + file: TelegramMediaFile, + mimeType: MimeType +): StorageFile = convertToStorageFile(file.fileId, mimeType) + +suspend fun TelegramBot.convertToStorageFile( + content: MediaContent, + mimeType: MimeType +): StorageFile = convertToStorageFile(content.media, mimeType) diff --git a/tgbotapi.extensions.utils/src/jvmMain/kotlin/dev/inmo/tgbotapi/types/files/AdditionalContentAsStorageFile.kt b/tgbotapi.extensions.utils/src/jvmMain/kotlin/dev/inmo/tgbotapi/types/files/AdditionalContentAsStorageFile.kt new file mode 100644 index 0000000000..d09cb48ae0 --- /dev/null +++ b/tgbotapi.extensions.utils/src/jvmMain/kotlin/dev/inmo/tgbotapi/types/files/AdditionalContentAsStorageFile.kt @@ -0,0 +1,41 @@ +package dev.inmo.tgbotapi.types.files + +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.requests.DownloadFileStream +import dev.inmo.tgbotapi.requests.abstracts.FileId +import dev.inmo.tgbotapi.requests.get.GetFile +import dev.inmo.tgbotapi.types.files.abstracts.TelegramMediaFile +import dev.inmo.tgbotapi.types.message.content.abstracts.MediaContent +import dev.inmo.tgbotapi.utils.* +import java.nio.file.Files +import kotlin.io.path.Path + + +suspend fun convertToStorageFile( + downloadStreamAllocator: ByteReadChannelAllocator, + pathedFile: PathedFile +): StorageFile { + return downloadStreamAllocator.asStorageFile( + pathedFile.fileName, + Files.probeContentType(Path(pathedFile.fileName)).asMimeType() + ) +} + +suspend fun TelegramBot.convertToStorageFile( + pathedFile: PathedFile +): StorageFile = convertToStorageFile( + execute(DownloadFileStream(pathedFile.filePath)), + pathedFile +) + +suspend fun TelegramBot.convertToStorageFile( + fileId: FileId +): StorageFile = convertToStorageFile(execute(GetFile(fileId))) + +suspend fun TelegramBot.convertToStorageFile( + file: TelegramMediaFile +): StorageFile = convertToStorageFile(file.fileId) + +suspend fun TelegramBot.convertToStorageFile( + content: MediaContent +): StorageFile = convertToStorageFile(content.media)