Fix live messages
This commit is contained in:
parent
7d3ea473e8
commit
04d6e82157
3 changed files with 40 additions and 27 deletions
|
@ -491,7 +491,7 @@ class TelegramHelper private constructor() {
|
|||
} else if (oldContent is TdApi.MessageLocation && (fromBot || viaBot)) {
|
||||
message.content = parseOsmAndBotLocation(message)
|
||||
}
|
||||
removeOldMessages(message.senderUserId, message.chatId)
|
||||
removeOldMessages(message, fromBot, viaBot)
|
||||
usersLocationMessages[message.id] = message
|
||||
incomingMessagesListeners.forEach {
|
||||
it.onReceiveChatLocationMessages(message.chatId, message)
|
||||
|
@ -499,13 +499,25 @@ class TelegramHelper private constructor() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun removeOldMessages(userId: Int, chatId: Long) {
|
||||
val user = users[userId]
|
||||
if (user != null && user.username != OSMAND_BOT_USERNAME) {
|
||||
usersLocationMessages.values.filter { it.senderUserId == userId && it.chatId == chatId }
|
||||
.forEach {
|
||||
usersLocationMessages.remove(it.id)
|
||||
private fun removeOldMessages(newMessage: TdApi.Message, fromBot: Boolean, viaBot: Boolean) {
|
||||
val iterator = usersLocationMessages.entries.iterator()
|
||||
while (iterator.hasNext()) {
|
||||
val message = iterator.next().value
|
||||
if (newMessage.chatId == message.chatId) {
|
||||
val sameSender = newMessage.senderUserId == message.senderUserId
|
||||
val viaSameBot = newMessage.viaBotUserId == message.viaBotUserId
|
||||
if ((fromBot && sameSender) || (viaBot && viaSameBot)) {
|
||||
val newCont = newMessage.content
|
||||
val cont = message.content
|
||||
if (newCont is MessageOsmAndBotLocation && cont is MessageOsmAndBotLocation) {
|
||||
if (newCont.name == cont.name) {
|
||||
iterator.remove()
|
||||
}
|
||||
}
|
||||
} else if (sameSender) {
|
||||
iterator.remove()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -52,10 +52,6 @@ object TelegramUiHelper {
|
|||
placeholderId = R.drawable.img_user_picture
|
||||
}
|
||||
val type = chat.type
|
||||
val message = messages.firstOrNull()
|
||||
if (message != null) {
|
||||
res.lastUpdated = helper.getLastUpdatedTime(message)
|
||||
}
|
||||
if (type is TdApi.ChatTypePrivate || type is TdApi.ChatTypeSecret) {
|
||||
val userId = getUserIdFromChatType(type)
|
||||
val chatWithBot = helper.isBot(userId)
|
||||
|
@ -63,9 +59,13 @@ object TelegramUiHelper {
|
|||
res.chatWithBot = chatWithBot
|
||||
if (!chatWithBot) {
|
||||
res.userId = userId
|
||||
val content = message?.content
|
||||
if (content is TdApi.MessageLocation) {
|
||||
res.latLon = LatLon(content.location.latitude, content.location.longitude)
|
||||
val message = messages.firstOrNull { it.viaBotUserId == 0 }
|
||||
if (message != null) {
|
||||
res.lastUpdated = helper.getLastUpdatedTime(message)
|
||||
val content = message.content
|
||||
if (content is TdApi.MessageLocation) {
|
||||
res.latLon = LatLon(content.location.latitude, content.location.longitude)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (type is TdApi.ChatTypeBasicGroup) {
|
||||
|
|
|
@ -221,31 +221,32 @@ class LiveNowTabFragment : Fragment(), TelegramListener, TelegramIncomingMessage
|
|||
for ((id, messages) in telegramHelper.getMessagesByChatIds()) {
|
||||
telegramHelper.getChat(id)?.also { chat ->
|
||||
res.add(TelegramUiHelper.chatToChatItem(telegramHelper, chat, messages))
|
||||
if (needLocationItems(chat.type)) {
|
||||
val type = chat.type
|
||||
if (type is TdApi.ChatTypeBasicGroup || type is TdApi.ChatTypeSupergroup) {
|
||||
res.addAll(convertToLocationItems(chat, messages))
|
||||
} else if (type is TdApi.ChatTypePrivate) {
|
||||
if (telegramHelper.isOsmAndBot(type.userId)) {
|
||||
res.addAll(convertToLocationItems(chat, messages))
|
||||
} else if (messages.firstOrNull { it.viaBotUserId != 0 } != null) {
|
||||
res.addAll(convertToLocationItems(chat, messages, true))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
adapter.items = res
|
||||
}
|
||||
|
||||
private fun needLocationItems(type: TdApi.ChatType): Boolean {
|
||||
return when (type) {
|
||||
is TdApi.ChatTypeBasicGroup -> true
|
||||
is TdApi.ChatTypeSupergroup -> true
|
||||
is TdApi.ChatTypePrivate -> telegramHelper.isOsmAndBot(type.userId)
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
private fun convertToLocationItems(
|
||||
chat: TdApi.Chat,
|
||||
messages: List<TdApi.Message>
|
||||
messages: List<TdApi.Message>,
|
||||
addOnlyViaBotMessages: Boolean = false
|
||||
): List<LocationItem> {
|
||||
val res = mutableListOf<LocationItem>()
|
||||
messages.forEach { message ->
|
||||
TelegramUiHelper.messageToLocationItem(telegramHelper, chat, message)?.also {
|
||||
res.add(it)
|
||||
if (!addOnlyViaBotMessages || message.viaBotUserId != 0) {
|
||||
TelegramUiHelper.messageToLocationItem(telegramHelper, chat, message)?.also {
|
||||
res.add(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
return res
|
||||
|
|
Loading…
Reference in a new issue