Fix pending messages counter
This commit is contained in:
parent
1f7797da7e
commit
e6c0d55c95
3 changed files with 57 additions and 116 deletions
|
@ -13,10 +13,12 @@ import android.os.*
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import net.osmand.PlatformUtil
|
import net.osmand.PlatformUtil
|
||||||
import net.osmand.telegram.helpers.TelegramHelper.TelegramIncomingMessagesListener
|
import net.osmand.telegram.TelegramSettings.ShareChatInfo
|
||||||
import net.osmand.telegram.helpers.TelegramHelper.TelegramOutgoingMessagesListener
|
import net.osmand.telegram.helpers.TelegramHelper
|
||||||
|
import net.osmand.telegram.helpers.TelegramHelper.*
|
||||||
import net.osmand.telegram.notifications.TelegramNotification.NotificationType
|
import net.osmand.telegram.notifications.TelegramNotification.NotificationType
|
||||||
import net.osmand.telegram.utils.AndroidUtils
|
import net.osmand.telegram.utils.AndroidUtils
|
||||||
|
import net.osmand.telegram.utils.OsmandLocationUtils
|
||||||
import org.drinkless.td.libcore.telegram.TdApi
|
import org.drinkless.td.libcore.telegram.TdApi
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
@ -369,8 +371,12 @@ class TelegramService : Service(), LocationListener, TelegramIncomingMessagesLis
|
||||||
app().settings.onDeleteLiveMessages(chatId, messages)
|
app().settings.onDeleteLiveMessages(chatId, messages)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSendLiveLocationError(code: Int, message: String) {
|
override fun onSendLiveLocationError(code: Int, message: String, shareInfo: ShareChatInfo, messageType: Int) {
|
||||||
Log.d(PlatformUtil.TAG, "Send live location error: $code - $message")
|
Log.d(PlatformUtil.TAG, "Send live location error: $code - $message")
|
||||||
|
when (messageType) {
|
||||||
|
TelegramHelper.MESSAGE_TYPE_TEXT -> shareInfo.pendingTdLibText--
|
||||||
|
TelegramHelper.MESSAGE_TYPE_MAP -> shareInfo.pendingTdLibMap--
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
|
@ -396,6 +396,9 @@ class TelegramSettings(private val app: TelegramApplication) {
|
||||||
} else if (state.constructor == TdApi.MessageSendingStateFailed.CONSTRUCTOR) {
|
} else if (state.constructor == TdApi.MessageSendingStateFailed.CONSTRUCTOR) {
|
||||||
shareInfo.hasSharingError = true
|
shareInfo.hasSharingError = true
|
||||||
shareInfo.pendingMapMessage = false
|
shareInfo.pendingMapMessage = false
|
||||||
|
if (!isOsmAndBot) {
|
||||||
|
shareInfo.pendingTdLibMap--
|
||||||
|
}
|
||||||
log.debug("updateShareInfo MAP ${message.id} MessageSendingStateFailed")
|
log.debug("updateShareInfo MAP ${message.id} MessageSendingStateFailed")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -427,6 +430,9 @@ class TelegramSettings(private val app: TelegramApplication) {
|
||||||
log.debug("updateShareInfo TEXT ${message.id} MessageSendingStateFailed")
|
log.debug("updateShareInfo TEXT ${message.id} MessageSendingStateFailed")
|
||||||
shareInfo.hasSharingError = true
|
shareInfo.hasSharingError = true
|
||||||
shareInfo.pendingTextMessage = false
|
shareInfo.pendingTextMessage = false
|
||||||
|
if (!isOsmAndBot) {
|
||||||
|
shareInfo.pendingTdLibText--
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
shareInfo.currentTextMessageId = message.id
|
shareInfo.currentTextMessageId = message.id
|
||||||
|
@ -531,8 +537,8 @@ class TelegramSettings(private val app: TelegramApplication) {
|
||||||
if (initTime && initSending) {
|
if (initTime && initSending) {
|
||||||
initializing = true
|
initializing = true
|
||||||
} else {
|
} else {
|
||||||
val textSharingError = !shareInfo.lastTextMessageProcessed && currentTime - shareInfo.lastSendTextMessageTime > WAITING_TDLIB_TIME
|
val textSharingError = !shareInfo.lastTextMessageHandled && currentTime - shareInfo.lastSendTextMessageTime > WAITING_TDLIB_TIME
|
||||||
val mapSharingError = !shareInfo.lastMapMessageProcessed && currentTime - shareInfo.lastSendMapMessageTime > WAITING_TDLIB_TIME
|
val mapSharingError = !shareInfo.lastMapMessageHandled && currentTime - shareInfo.lastSendMapMessageTime > WAITING_TDLIB_TIME
|
||||||
if (shareInfo.hasSharingError
|
if (shareInfo.hasSharingError
|
||||||
|| (shareTypeValue == SHARE_TYPE_MAP_AND_TEXT && (textSharingError || mapSharingError))
|
|| (shareTypeValue == SHARE_TYPE_MAP_AND_TEXT && (textSharingError || mapSharingError))
|
||||||
|| textSharingError && (shareTypeValue == SHARE_TYPE_TEXT)
|
|| textSharingError && (shareTypeValue == SHARE_TYPE_TEXT)
|
||||||
|
@ -1431,12 +1437,12 @@ class TelegramSettings(private val app: TelegramApplication) {
|
||||||
var lastSendTextMessageTime = -1
|
var lastSendTextMessageTime = -1
|
||||||
set(value) {
|
set(value) {
|
||||||
field = value
|
field = value
|
||||||
lastTextMessageProcessed = false
|
lastTextMessageHandled = false
|
||||||
}
|
}
|
||||||
var lastSendMapMessageTime = -1
|
var lastSendMapMessageTime = -1
|
||||||
set(value) {
|
set(value) {
|
||||||
field = value
|
field = value
|
||||||
lastMapMessageProcessed = false
|
lastMapMessageHandled = false
|
||||||
}
|
}
|
||||||
var sentMessages = 0
|
var sentMessages = 0
|
||||||
var pendingTdLibText = 0
|
var pendingTdLibText = 0
|
||||||
|
@ -1447,8 +1453,8 @@ class TelegramSettings(private val app: TelegramApplication) {
|
||||||
var shouldSendViaBotMapMessage = false
|
var shouldSendViaBotMapMessage = false
|
||||||
var hasSharingError = false
|
var hasSharingError = false
|
||||||
var additionalActiveTime = ADDITIONAL_ACTIVE_TIME_VALUES_SEC[0]
|
var additionalActiveTime = ADDITIONAL_ACTIVE_TIME_VALUES_SEC[0]
|
||||||
var lastMapMessageProcessed = false
|
var lastMapMessageHandled = false
|
||||||
var lastTextMessageProcessed = false
|
var lastTextMessageHandled = false
|
||||||
|
|
||||||
fun getNextAdditionalActiveTime(): Long {
|
fun getNextAdditionalActiveTime(): Long {
|
||||||
var index = ADDITIONAL_ACTIVE_TIME_VALUES_SEC.indexOf(additionalActiveTime)
|
var index = ADDITIONAL_ACTIVE_TIME_VALUES_SEC.indexOf(additionalActiveTime)
|
||||||
|
|
|
@ -6,6 +6,7 @@ import net.osmand.telegram.SHARE_TYPE_MAP
|
||||||
import net.osmand.telegram.SHARE_TYPE_MAP_AND_TEXT
|
import net.osmand.telegram.SHARE_TYPE_MAP_AND_TEXT
|
||||||
import net.osmand.telegram.SHARE_TYPE_TEXT
|
import net.osmand.telegram.SHARE_TYPE_TEXT
|
||||||
import net.osmand.telegram.TelegramSettings
|
import net.osmand.telegram.TelegramSettings
|
||||||
|
import net.osmand.telegram.TelegramSettings.ShareChatInfo
|
||||||
import net.osmand.telegram.helpers.TelegramHelper.TelegramAuthenticationParameterType.*
|
import net.osmand.telegram.helpers.TelegramHelper.TelegramAuthenticationParameterType.*
|
||||||
import net.osmand.telegram.utils.GRAYSCALE_PHOTOS_DIR
|
import net.osmand.telegram.utils.GRAYSCALE_PHOTOS_DIR
|
||||||
import net.osmand.telegram.utils.GRAYSCALE_PHOTOS_EXT
|
import net.osmand.telegram.utils.GRAYSCALE_PHOTOS_EXT
|
||||||
|
@ -43,6 +44,10 @@ class TelegramHelper private constructor() {
|
||||||
|
|
||||||
const val MAX_LOCATION_MESSAGE_HISTORY_SCAN_SEC = 60 * 60 * 24 // one day
|
const val MAX_LOCATION_MESSAGE_HISTORY_SCAN_SEC = 60 * 60 * 24 // one day
|
||||||
|
|
||||||
|
const val MESSAGE_TYPE_MAP = 1
|
||||||
|
const val MESSAGE_TYPE_TEXT = 2
|
||||||
|
const val MESSAGE_TYPE_BOT = 3
|
||||||
|
|
||||||
private var helper: TelegramHelper? = null
|
private var helper: TelegramHelper? = null
|
||||||
|
|
||||||
val instance: TelegramHelper
|
val instance: TelegramHelper
|
||||||
|
@ -247,7 +252,7 @@ class TelegramHelper private constructor() {
|
||||||
interface TelegramOutgoingMessagesListener {
|
interface TelegramOutgoingMessagesListener {
|
||||||
fun onUpdateMessages(messages: List<TdApi.Message>)
|
fun onUpdateMessages(messages: List<TdApi.Message>)
|
||||||
fun onDeleteMessages(chatId: Long, messages: List<Long>)
|
fun onDeleteMessages(chatId: Long, messages: List<Long>)
|
||||||
fun onSendLiveLocationError(code: Int, message: String)
|
fun onSendLiveLocationError(code: Int, message: String, shareInfo: ShareChatInfo, messageType: Int)
|
||||||
}
|
}
|
||||||
|
|
||||||
interface FullInfoUpdatesListener {
|
interface FullInfoUpdatesListener {
|
||||||
|
@ -487,7 +492,7 @@ class TelegramHelper private constructor() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun sendViaBotLocationMessage(userId: Int, shareInfo: TelegramSettings.ShareChatInfo, location: TdApi.Location, device: TelegramSettings.DeviceBot, shareType:String) {
|
fun sendViaBotLocationMessage(userId: Int, shareInfo: ShareChatInfo, location: TdApi.Location, device: TelegramSettings.DeviceBot, shareType:String) {
|
||||||
log.debug("sendViaBotLocationMessage - ${shareInfo.chatId}")
|
log.debug("sendViaBotLocationMessage - ${shareInfo.chatId}")
|
||||||
client?.send(TdApi.GetInlineQueryResults(userId, shareInfo.chatId, location, device.deviceName, "")) { obj ->
|
client?.send(TdApi.GetInlineQueryResults(userId, shareInfo.chatId, location, device.deviceName, "")) { obj ->
|
||||||
when (obj.constructor) {
|
when (obj.constructor) {
|
||||||
|
@ -495,7 +500,6 @@ class TelegramHelper private constructor() {
|
||||||
val error = obj as TdApi.Error
|
val error = obj as TdApi.Error
|
||||||
if (error.code != IGNORED_ERROR_CODE) {
|
if (error.code != IGNORED_ERROR_CODE) {
|
||||||
listener?.onTelegramError(error.code, error.message)
|
listener?.onTelegramError(error.code, error.message)
|
||||||
} else {
|
|
||||||
shareInfo.shouldSendViaBotTextMessage = true
|
shareInfo.shouldSendViaBotTextMessage = true
|
||||||
shareInfo.shouldSendViaBotMapMessage = true
|
shareInfo.shouldSendViaBotMapMessage = true
|
||||||
}
|
}
|
||||||
|
@ -508,7 +512,7 @@ class TelegramHelper private constructor() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun sendViaBotMessageFromQueryResults(
|
private fun sendViaBotMessageFromQueryResults(
|
||||||
shareInfo: TelegramSettings.ShareChatInfo,
|
shareInfo: ShareChatInfo,
|
||||||
inlineQueryResults: TdApi.InlineQueryResults,
|
inlineQueryResults: TdApi.InlineQueryResults,
|
||||||
deviceId: String,
|
deviceId: String,
|
||||||
shareType: String
|
shareType: String
|
||||||
|
@ -528,10 +532,10 @@ class TelegramHelper private constructor() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
resultArticles.forEach {
|
resultArticles.forEach {
|
||||||
shareInfo.lastTextMessageProcessed = false
|
shareInfo.lastTextMessageHandled = false
|
||||||
client?.send(TdApi.SendInlineQueryResultMessage(shareInfo.chatId, 0, true,
|
client?.send(TdApi.SendInlineQueryResultMessage(shareInfo.chatId, 0, true,
|
||||||
true, inlineQueryResults.inlineQueryId, it.id, false)) { obj ->
|
true, inlineQueryResults.inlineQueryId, it.id, false)) { obj ->
|
||||||
handleTextLocationMessageUpdate(obj, shareInfo)
|
handleTextLocationMessageUpdate(obj, shareInfo, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -765,8 +769,8 @@ class TelegramHelper private constructor() {
|
||||||
|
|
||||||
fun createPrivateChatWithUser(
|
fun createPrivateChatWithUser(
|
||||||
userId: Int,
|
userId: Int,
|
||||||
shareInfo: TelegramSettings.ShareChatInfo,
|
shareInfo: ShareChatInfo,
|
||||||
shareChatsInfo: ConcurrentHashMap<Long, TelegramSettings.ShareChatInfo>
|
shareChatsInfo: ConcurrentHashMap<Long, ShareChatInfo>
|
||||||
) {
|
) {
|
||||||
client?.send(TdApi.CreatePrivateChat(userId, false)) { obj ->
|
client?.send(TdApi.CreatePrivateChat(userId, false)) { obj ->
|
||||||
when (obj.constructor) {
|
when (obj.constructor) {
|
||||||
|
@ -833,101 +837,24 @@ class TelegramHelper private constructor() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun stopSendingLiveLocationToChat(shareInfo: TelegramSettings.ShareChatInfo) {
|
fun stopSendingLiveLocationToChat(shareInfo: ShareChatInfo) {
|
||||||
if (shareInfo.currentMapMessageId != -1L && shareInfo.chatId != -1L) {
|
if (shareInfo.currentMapMessageId != -1L && shareInfo.chatId != -1L) {
|
||||||
shareInfo.lastSendMapMessageTime = (System.currentTimeMillis() / 1000).toInt()
|
shareInfo.lastSendMapMessageTime = (System.currentTimeMillis() / 1000).toInt()
|
||||||
client?.send(
|
client?.send(
|
||||||
TdApi.EditMessageLiveLocation(shareInfo.chatId, shareInfo.currentMapMessageId, null, null)) { obj ->
|
TdApi.EditMessageLiveLocation(shareInfo.chatId, shareInfo.currentMapMessageId, null, null)) { obj ->
|
||||||
handleMapLocationMessageUpdate(obj, shareInfo)
|
handleMapLocationMessageUpdate(obj, shareInfo, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
needRefreshActiveLiveLocationMessages = true
|
needRefreshActiveLiveLocationMessages = true
|
||||||
}
|
}
|
||||||
|
|
||||||
fun stopSendingLiveLocationMessages(chatsShareInfo: Map<Long, TelegramSettings.ShareChatInfo>) {
|
fun stopSendingLiveLocationMessages(chatsShareInfo: Map<Long, ShareChatInfo>) {
|
||||||
chatsShareInfo.forEach { (_, chatInfo) ->
|
chatsShareInfo.forEach { (_, chatInfo) ->
|
||||||
stopSendingLiveLocationToChat(chatInfo)
|
stopSendingLiveLocationToChat(chatInfo)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getActiveLiveLocationMessages(onComplete: (() -> Unit)?) {
|
fun sendNewTextLocation(shareInfo: ShareChatInfo, content: TdApi.InputMessageText) {
|
||||||
requestingActiveLiveLocationMessages = true
|
|
||||||
client?.send(TdApi.GetActiveLiveLocationMessages()) { obj ->
|
|
||||||
when (obj.constructor) {
|
|
||||||
TdApi.Error.CONSTRUCTOR -> {
|
|
||||||
val error = obj as TdApi.Error
|
|
||||||
if (error.code != IGNORED_ERROR_CODE) {
|
|
||||||
needRefreshActiveLiveLocationMessages = true
|
|
||||||
outgoingMessagesListeners.forEach {
|
|
||||||
it.onSendLiveLocationError(error.code, error.message)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
TdApi.Messages.CONSTRUCTOR -> {
|
|
||||||
val messages = (obj as TdApi.Messages).messages
|
|
||||||
if (messages.isNotEmpty()) {
|
|
||||||
log.debug("getActiveLiveLocationMessages: $messages")
|
|
||||||
outgoingMessagesListeners.forEach {
|
|
||||||
it.onUpdateMessages(messages.asList())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onComplete?.invoke()
|
|
||||||
}
|
|
||||||
else -> outgoingMessagesListeners.forEach {
|
|
||||||
it.onSendLiveLocationError(-1, "Receive wrong response from TDLib: $obj")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
requestingActiveLiveLocationMessages = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun recreateLiveLocationMessage(shareInfo: TelegramSettings.ShareChatInfo, content: TdApi.InputMessageContent) {
|
|
||||||
if (shareInfo.chatId != -1L) {
|
|
||||||
val array = LongArray(1)
|
|
||||||
if (content is TdApi.InputMessageLocation) {
|
|
||||||
array[0] = shareInfo.currentMapMessageId
|
|
||||||
} else if (content is TdApi.InputMessageText) {
|
|
||||||
array[0] = shareInfo.currentTextMessageId
|
|
||||||
}
|
|
||||||
if (array[0] != 0L) {
|
|
||||||
log.debug("recreateLiveLocationMessage - ${array[0]}")
|
|
||||||
client?.send(TdApi.DeleteMessages(shareInfo.chatId, array, true)) { obj ->
|
|
||||||
when (obj.constructor) {
|
|
||||||
TdApi.Ok.CONSTRUCTOR -> sendNewLiveLocationMessage(shareInfo, content)
|
|
||||||
TdApi.Error.CONSTRUCTOR -> {
|
|
||||||
val error = obj as TdApi.Error
|
|
||||||
if (error.code != IGNORED_ERROR_CODE) {
|
|
||||||
needRefreshActiveLiveLocationMessages = true
|
|
||||||
outgoingMessagesListeners.forEach {
|
|
||||||
it.onSendLiveLocationError(error.code, error.message)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
needRefreshActiveLiveLocationMessages = true
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun sendNewLiveLocationMessage(shareInfo: TelegramSettings.ShareChatInfo, content: TdApi.InputMessageContent) {
|
|
||||||
needRefreshActiveLiveLocationMessages = true
|
|
||||||
log.debug("sendNewLiveLocationMessage")
|
|
||||||
if (content is TdApi.InputMessageText) {
|
|
||||||
shareInfo.lastSendTextMessageTime = (System.currentTimeMillis() / 1000).toInt()
|
|
||||||
} else if (content is TdApi.InputMessageLocation) {
|
|
||||||
shareInfo.lastSendMapMessageTime = (System.currentTimeMillis() / 1000).toInt()
|
|
||||||
}
|
|
||||||
client?.send(TdApi.SendMessage(shareInfo.chatId, 0, false, true, null, content)) { obj ->
|
|
||||||
if (content is TdApi.InputMessageText) {
|
|
||||||
handleTextLocationMessageUpdate(obj, shareInfo)
|
|
||||||
} else if (content is TdApi.InputMessageLocation) {
|
|
||||||
handleMapLocationMessageUpdate(obj, shareInfo)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun sendNewTextLocation(shareInfo: TelegramSettings.ShareChatInfo, content: TdApi.InputMessageText) {
|
|
||||||
shareInfo.updateTextMessageId = 1
|
shareInfo.updateTextMessageId = 1
|
||||||
if (!shareInfo.pendingTextMessage) {
|
if (!shareInfo.pendingTextMessage) {
|
||||||
shareInfo.pendingTextMessage = true
|
shareInfo.pendingTextMessage = true
|
||||||
|
@ -935,23 +862,23 @@ class TelegramHelper private constructor() {
|
||||||
shareInfo.lastSendTextMessageTime = (System.currentTimeMillis() / 1000).toInt()
|
shareInfo.lastSendTextMessageTime = (System.currentTimeMillis() / 1000).toInt()
|
||||||
log.error("sendNewTextLocation ${shareInfo.pendingTdLibText}")
|
log.error("sendNewTextLocation ${shareInfo.pendingTdLibText}")
|
||||||
client?.send(TdApi.SendMessage(shareInfo.chatId, 0, false, true, null, content)) { obj ->
|
client?.send(TdApi.SendMessage(shareInfo.chatId, 0, false, true, null, content)) { obj ->
|
||||||
handleTextLocationMessageUpdate(obj, shareInfo)
|
handleTextLocationMessageUpdate(obj, shareInfo, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun editTextLocation(shareInfo: TelegramSettings.ShareChatInfo, content: TdApi.InputMessageText) {
|
fun editTextLocation(shareInfo: ShareChatInfo, content: TdApi.InputMessageText) {
|
||||||
if (shareInfo.currentTextMessageId != -1L) {
|
if (shareInfo.currentTextMessageId != -1L) {
|
||||||
shareInfo.pendingTdLibText++
|
shareInfo.pendingTdLibText++
|
||||||
shareInfo.lastSendTextMessageTime = (System.currentTimeMillis() / 1000).toInt()
|
shareInfo.lastSendTextMessageTime = (System.currentTimeMillis() / 1000).toInt()
|
||||||
log.info("editTextLocation ${shareInfo.currentTextMessageId} pendingTdLibText: ${shareInfo.pendingTdLibText}")
|
log.info("editTextLocation ${shareInfo.currentTextMessageId} pendingTdLibText: ${shareInfo.pendingTdLibText}")
|
||||||
client?.send(TdApi.EditMessageText(shareInfo.chatId, shareInfo.currentTextMessageId, null, content)) { obj ->
|
client?.send(TdApi.EditMessageText(shareInfo.chatId, shareInfo.currentTextMessageId, null, content)) { obj ->
|
||||||
handleTextLocationMessageUpdate(obj, shareInfo)
|
handleTextLocationMessageUpdate(obj, shareInfo, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun sendNewMapLocation(shareInfo: TelegramSettings.ShareChatInfo, locationMessage: LocationMessages.BufferMessage) {
|
fun sendNewMapLocation(shareInfo: ShareChatInfo, locationMessage: LocationMessages.BufferMessage) {
|
||||||
needRefreshActiveLiveLocationMessages = true
|
needRefreshActiveLiveLocationMessages = true
|
||||||
val location = TdApi.Location(locationMessage.lat, locationMessage.lon)
|
val location = TdApi.Location(locationMessage.lat, locationMessage.lon)
|
||||||
val livePeriod =
|
val livePeriod =
|
||||||
|
@ -967,12 +894,12 @@ class TelegramHelper private constructor() {
|
||||||
shareInfo.lastSendMapMessageTime = (System.currentTimeMillis() / 1000).toInt()
|
shareInfo.lastSendMapMessageTime = (System.currentTimeMillis() / 1000).toInt()
|
||||||
log.error("sendNewMapLocation ${shareInfo.pendingTdLibMap}")
|
log.error("sendNewMapLocation ${shareInfo.pendingTdLibMap}")
|
||||||
client?.send(TdApi.SendMessage(shareInfo.chatId, 0, false, true, null, content)) { obj ->
|
client?.send(TdApi.SendMessage(shareInfo.chatId, 0, false, true, null, content)) { obj ->
|
||||||
handleMapLocationMessageUpdate(obj, shareInfo)
|
handleMapLocationMessageUpdate(obj, shareInfo, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun editMapLocation(shareInfo: TelegramSettings.ShareChatInfo, locationMessage: LocationMessages.BufferMessage) {
|
fun editMapLocation(shareInfo: ShareChatInfo, locationMessage: LocationMessages.BufferMessage) {
|
||||||
needRefreshActiveLiveLocationMessages = true
|
needRefreshActiveLiveLocationMessages = true
|
||||||
val location = TdApi.Location(locationMessage.lat, locationMessage.lon)
|
val location = TdApi.Location(locationMessage.lat, locationMessage.lon)
|
||||||
if (shareInfo.currentMapMessageId!=-1L) {
|
if (shareInfo.currentMapMessageId!=-1L) {
|
||||||
|
@ -980,23 +907,24 @@ class TelegramHelper private constructor() {
|
||||||
shareInfo.lastSendMapMessageTime = (System.currentTimeMillis() / 1000).toInt()
|
shareInfo.lastSendMapMessageTime = (System.currentTimeMillis() / 1000).toInt()
|
||||||
log.info("editMapLocation ${shareInfo.currentMapMessageId} pendingTdLibMap: ${shareInfo.pendingTdLibMap}")
|
log.info("editMapLocation ${shareInfo.currentMapMessageId} pendingTdLibMap: ${shareInfo.pendingTdLibMap}")
|
||||||
client?.send(TdApi.EditMessageLiveLocation(shareInfo.chatId, shareInfo.currentMapMessageId, null, location)) { obj ->
|
client?.send(TdApi.EditMessageLiveLocation(shareInfo.chatId, shareInfo.currentMapMessageId, null, location)) { obj ->
|
||||||
handleMapLocationMessageUpdate(obj, shareInfo)
|
handleMapLocationMessageUpdate(obj, shareInfo, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleMapLocationMessageUpdate(obj: TdApi.Object, shareInfo: TelegramSettings.ShareChatInfo) {
|
private fun handleMapLocationMessageUpdate(obj: TdApi.Object, shareInfo: ShareChatInfo, isBot: Boolean) {
|
||||||
shareInfo.lastMapMessageProcessed = true
|
shareInfo.lastMapMessageHandled = true
|
||||||
|
val messageType = if (isBot) MESSAGE_TYPE_BOT else MESSAGE_TYPE_MAP
|
||||||
when (obj.constructor) {
|
when (obj.constructor) {
|
||||||
TdApi.Error.CONSTRUCTOR -> {
|
TdApi.Error.CONSTRUCTOR -> {
|
||||||
log.debug("handleMapLocationMessageUpdate - ERROR $obj")
|
log.debug("handleMapLocationMessageUpdate - ERROR $obj")
|
||||||
val error = obj as TdApi.Error
|
val error = obj as TdApi.Error
|
||||||
needRefreshActiveLiveLocationMessages = true
|
|
||||||
shareInfo.pendingMapMessage = false
|
|
||||||
if (error.code != IGNORED_ERROR_CODE) {
|
if (error.code != IGNORED_ERROR_CODE) {
|
||||||
shareInfo.hasSharingError = true
|
shareInfo.hasSharingError = true
|
||||||
|
needRefreshActiveLiveLocationMessages = true
|
||||||
|
shareInfo.pendingMapMessage = false
|
||||||
outgoingMessagesListeners.forEach {
|
outgoingMessagesListeners.forEach {
|
||||||
it.onSendLiveLocationError(error.code, error.message)
|
it.onSendLiveLocationError(error.code, error.message, shareInfo, messageType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1009,7 +937,7 @@ class TelegramHelper private constructor() {
|
||||||
shareInfo.pendingMapMessage = false
|
shareInfo.pendingMapMessage = false
|
||||||
log.debug("handleTextLocationMessageUpdate - MessageSendingStateFailed")
|
log.debug("handleTextLocationMessageUpdate - MessageSendingStateFailed")
|
||||||
outgoingMessagesListeners.forEach {
|
outgoingMessagesListeners.forEach {
|
||||||
it.onSendLiveLocationError(-1, "Map location message ${obj.id} failed to send")
|
it.onSendLiveLocationError(-1, "Map location message ${obj.id} failed to send", shareInfo, messageType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
obj.sendingState?.constructor == TdApi.MessageSendingStatePending.CONSTRUCTOR -> {
|
obj.sendingState?.constructor == TdApi.MessageSendingStatePending.CONSTRUCTOR -> {
|
||||||
|
@ -1033,17 +961,18 @@ class TelegramHelper private constructor() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleTextLocationMessageUpdate(obj: TdApi.Object, shareInfo: TelegramSettings.ShareChatInfo) {
|
private fun handleTextLocationMessageUpdate(obj: TdApi.Object, shareInfo: ShareChatInfo, isBot: Boolean) {
|
||||||
shareInfo.lastTextMessageProcessed = true
|
shareInfo.lastTextMessageHandled = true
|
||||||
|
val messageType = if (isBot) MESSAGE_TYPE_BOT else MESSAGE_TYPE_TEXT
|
||||||
when (obj.constructor) {
|
when (obj.constructor) {
|
||||||
TdApi.Error.CONSTRUCTOR -> {
|
TdApi.Error.CONSTRUCTOR -> {
|
||||||
log.debug("handleTextLocationMessageUpdate - ERROR")
|
log.debug("handleTextLocationMessageUpdate - ERROR")
|
||||||
val error = obj as TdApi.Error
|
val error = obj as TdApi.Error
|
||||||
shareInfo.pendingTextMessage = false
|
|
||||||
if (error.code != IGNORED_ERROR_CODE) {
|
if (error.code != IGNORED_ERROR_CODE) {
|
||||||
shareInfo.hasSharingError = true
|
shareInfo.hasSharingError = true
|
||||||
|
shareInfo.pendingTextMessage = false
|
||||||
outgoingMessagesListeners.forEach {
|
outgoingMessagesListeners.forEach {
|
||||||
it.onSendLiveLocationError(error.code, error.message)
|
it.onSendLiveLocationError(error.code, error.message, shareInfo, messageType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1056,7 +985,7 @@ class TelegramHelper private constructor() {
|
||||||
needRefreshActiveLiveLocationMessages = true
|
needRefreshActiveLiveLocationMessages = true
|
||||||
log.debug("handleTextLocationMessageUpdate - MessageSendingStateFailed")
|
log.debug("handleTextLocationMessageUpdate - MessageSendingStateFailed")
|
||||||
outgoingMessagesListeners.forEach {
|
outgoingMessagesListeners.forEach {
|
||||||
it.onSendLiveLocationError(-1, "Text location message ${obj.id} failed to send")
|
it.onSendLiveLocationError(-1, "Text location message ${obj.id} failed to send", shareInfo, messageType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
obj.sendingState?.constructor == TdApi.MessageSendingStatePending.CONSTRUCTOR -> {
|
obj.sendingState?.constructor == TdApi.MessageSendingStatePending.CONSTRUCTOR -> {
|
||||||
|
|
Loading…
Reference in a new issue