TelegramBotApiLibraries/cache/content/common/src/commonMain/kotlin/dev/inmo/tgbotapi/libraries/cache/media/common/MediaFileActualityChecker.kt

57 lines
2.2 KiB
Kotlin
Raw Normal View History

2022-04-19 18:11:03 +00:00
package dev.inmo.tgbotapi.libraries.cache.media.common
import com.soywiz.klock.DateTime
import com.soywiz.klock.milliseconds
import dev.inmo.tgbotapi.bot.TelegramBot
import dev.inmo.tgbotapi.requests.DeleteMessage
import dev.inmo.tgbotapi.requests.abstracts.FileId
import dev.inmo.tgbotapi.types.ChatId
2022-11-10 15:25:31 +00:00
import dev.inmo.tgbotapi.types.IdChatIdentifier
2022-04-19 18:11:03 +00:00
import dev.inmo.tgbotapi.types.MilliSeconds
2022-05-17 14:05:53 +00:00
import dev.inmo.tgbotapi.types.message.content.MediaContent
2022-04-19 18:11:03 +00:00
fun interface MediaFileActualityChecker {
suspend fun TelegramBot.isActual(mediaContent: MediaContent): Boolean
2022-04-19 18:19:25 +00:00
suspend fun TelegramBot.saved(mediaContent: MediaContent) {}
2022-04-19 18:11:03 +00:00
class Default(
2022-11-10 15:25:31 +00:00
private val checkingChatId: IdChatIdentifier
2022-04-19 18:11:03 +00:00
) : MediaFileActualityChecker {
override suspend fun TelegramBot.isActual(mediaContent: MediaContent): Boolean {
return runCatching {
execute(mediaContent.createResend(checkingChatId)).also { sentMessage ->
execute(DeleteMessage(sentMessage.chat.id, sentMessage.messageId))
}
}.isSuccess
}
}
class WithDelay(
private val underhoodChecker: MediaFileActualityChecker,
private val checkingDelay: MilliSeconds = 24 * 60 * 60 * 1000L // one day
) : MediaFileActualityChecker {
private val fileIdChecksMap = mutableMapOf<FileId, DateTime>()
private val checkingDelayTimeSpan = checkingDelay.milliseconds
override suspend fun TelegramBot.isActual(mediaContent: MediaContent): Boolean {
val now = DateTime.now()
val lastCheck = fileIdChecksMap[mediaContent.media.fileId]
return if (lastCheck == null || now - lastCheck > checkingDelayTimeSpan) {
with(underhoodChecker) {
isActual(mediaContent)
}.also {
if (it) {
fileIdChecksMap[mediaContent.media.fileId] = now
}
}
} else {
true
}
}
2022-04-19 18:19:25 +00:00
override suspend fun TelegramBot.saved(mediaContent: MediaContent) {
fileIdChecksMap[mediaContent.media.fileId] = DateTime.now()
}
2022-04-19 18:11:03 +00:00
}
}