Skip to content

Commit

Permalink
updates in LiveFlowLocation behaviours
Browse files Browse the repository at this point in the history
  • Loading branch information
InsanusMokrassar committed May 10, 2024
1 parent dc5d8af commit ca1b196
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 10 deletions.
Expand Up @@ -50,22 +50,30 @@ suspend fun TelegramBot.handleLiveLocation(
sentMessageFlow: FlowCollector<ContentMessage<LocationContent>>? = null
) {
var currentLiveLocationMessage: ContentMessage<LocationContent>? = null
val updateMessageJob = CoroutineScope(currentCoroutineContext().LinkedSupervisorJob()).launchSafelyWithoutExceptions(start = CoroutineStart.LAZY) {
while (isActive) {
delay(liveTimeMillis)
// Remove previous location message info to resend live location message
currentLiveLocationMessage = null
val updateMessageJob = if (liveTimeMillis == indefiniteLivePeriodDelayMillis) { // do not launch refreshing of message for indefinite live locations
null
} else {
CoroutineScope(currentCoroutineContext().LinkedSupervisorJob()).launchSafelyWithoutExceptions(start = CoroutineStart.LAZY) {
while (isActive) {
delay(liveTimeMillis)
// Remove previous location message info to resend live location message
currentLiveLocationMessage = null
}
}
}
locationsFlow.collect {
val capturedLiveLocationMessage = currentLiveLocationMessage
if (capturedLiveLocationMessage == null) {
updateMessageJob.start()
updateMessageJob ?.start()
currentLiveLocationMessage = send(
chatId,
it.latitude,
it.longitude,
ceil(liveTimeMillis.toDouble() / 1000).toInt(),
if (liveTimeMillis == indefiniteLivePeriodDelayMillis) {
LiveLocation.INDEFINITE_LIVE_PERIOD
} else {
ceil(liveTimeMillis.toDouble() / 1000).toInt()
},
it.horizontalAccuracy,
it.heading,
it.proximityAlertRadius,
Expand All @@ -83,7 +91,6 @@ suspend fun TelegramBot.handleLiveLocation(
message = capturedLiveLocationMessage,
latitude = it.latitude,
longitude = it.longitude,
livePeriod = null,
horizontalAccuracy = it.horizontalAccuracy,
heading = it.heading,
proximityAlertRadius = it.proximityAlertRadius,
Expand Down
Expand Up @@ -23,7 +23,8 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import kotlin.math.ceil

val defaultLivePeriodDelayMillis = (livePeriodLimit.last - 60L) * 1000L
const val indefiniteLivePeriodDelayMillis = LiveLocation.INDEFINITE_LIVE_PERIOD * 1000L
const val defaultLivePeriodDelayMillis = indefiniteLivePeriodDelayMillis

/**
* @see startLiveLocation
Expand Down
@@ -1,5 +1,6 @@
package dev.inmo.tgbotapi.types

import dev.inmo.tgbotapi.types.location.LiveLocation
import dev.inmo.tgbotapi.utils.BuiltinMimeTypes

typealias ForwardSignature = String
Expand Down Expand Up @@ -47,7 +48,7 @@ val pollOptionTextLength = 1 .. 100
val pollQuestionTextLength = 1 .. 300
val pollOptionsLimit = 2 .. 10

val livePeriodLimit = 60 .. 86400
val livePeriodLimit = 60 .. LiveLocation.INDEFINITE_LIVE_PERIOD

val inlineQueryAnswerResultsLimit = 0 .. 50

Expand Down

0 comments on commit ca1b196

Please sign in to comment.