Handle deletion of location messages
This commit is contained in:
parent
d3b1900185
commit
3660357148
4 changed files with 35 additions and 3 deletions
|
@ -253,6 +253,14 @@ class TelegramService : Service(), LocationListener, TelegramIncomingMessagesLis
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onDeleteChatLocationMessages(chatId: Long, messages: List<TdApi.Message>) {
|
||||||
|
// TODO: handle notification?
|
||||||
|
val app = app()
|
||||||
|
if (app.settings.isShowingChatOnMap(chatId)) {
|
||||||
|
DeleteMessagesTask(app).executeOnExecutor(executor, messages)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun updateLocationMessages() {
|
override fun updateLocationMessages() {
|
||||||
UpdateMessagesTask(app()).executeOnExecutor(executor)
|
UpdateMessagesTask(app()).executeOnExecutor(executor)
|
||||||
}
|
}
|
||||||
|
@ -267,6 +275,16 @@ class TelegramService : Service(), LocationListener, TelegramIncomingMessagesLis
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class DeleteMessagesTask(private val app: TelegramApplication) : AsyncTask<List<TdApi.Message>, Void, Void?>() {
|
||||||
|
|
||||||
|
override fun doInBackground(vararg messages: List<TdApi.Message>): Void? {
|
||||||
|
for (list in messages) {
|
||||||
|
app.showLocationHelper.hideMessages(list)
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private class UpdateMessagesTask(private val app: TelegramApplication) : AsyncTask<Void, Void, Void?>() {
|
private class UpdateMessagesTask(private val app: TelegramApplication) : AsyncTask<Void, Void, Void?>() {
|
||||||
|
|
||||||
override fun doInBackground(vararg params: Void?): Void? {
|
override fun doInBackground(vararg params: Void?): Void? {
|
||||||
|
|
|
@ -107,12 +107,15 @@ class ShowLocationHelper(private val app: TelegramApplication) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun hideChatMessages(chatId: Long) {
|
fun hideChatMessages(chatId: Long) {
|
||||||
|
hideMessages(telegramHelper.getChatMessages(chatId))
|
||||||
|
}
|
||||||
|
|
||||||
|
fun hideMessages(messages: List<TdApi.Message>) {
|
||||||
execOsmandApi {
|
execOsmandApi {
|
||||||
val messages = telegramHelper.getChatMessages(chatId)
|
|
||||||
for (message in messages) {
|
for (message in messages) {
|
||||||
val user = telegramHelper.getUser(message.senderUserId)
|
val user = telegramHelper.getUser(message.senderUserId)
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
removeMapPoint(chatId, message)
|
removeMapPoint(message.chatId, message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -174,6 +174,7 @@ class TelegramHelper private constructor() {
|
||||||
|
|
||||||
interface TelegramIncomingMessagesListener {
|
interface TelegramIncomingMessagesListener {
|
||||||
fun onReceiveChatLocationMessages(chatId: Long, vararg messages: TdApi.Message)
|
fun onReceiveChatLocationMessages(chatId: Long, vararg messages: TdApi.Message)
|
||||||
|
fun onDeleteChatLocationMessages(chatId: Long, messages: List<TdApi.Message>)
|
||||||
fun updateLocationMessages()
|
fun updateLocationMessages()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -913,10 +914,16 @@ class TelegramHelper private constructor() {
|
||||||
val updateDeleteMessages = obj as TdApi.UpdateDeleteMessages
|
val updateDeleteMessages = obj as TdApi.UpdateDeleteMessages
|
||||||
if (updateDeleteMessages.isPermanent) {
|
if (updateDeleteMessages.isPermanent) {
|
||||||
val chatId = updateDeleteMessages.chatId
|
val chatId = updateDeleteMessages.chatId
|
||||||
|
val deletedMessages = mutableListOf<TdApi.Message>()
|
||||||
for (messageId in updateDeleteMessages.messageIds) {
|
for (messageId in updateDeleteMessages.messageIds) {
|
||||||
if (chatLiveMessages[chatId] == messageId) {
|
if (chatLiveMessages[chatId] == messageId) {
|
||||||
chatLiveMessages.remove(chatId)
|
chatLiveMessages.remove(chatId)
|
||||||
break
|
}
|
||||||
|
usersLocationMessages.remove(messageId)?.also { deletedMessages.add(it) }
|
||||||
|
}
|
||||||
|
if (deletedMessages.isNotEmpty()) {
|
||||||
|
incomingMessagesListeners.forEach {
|
||||||
|
it.onDeleteChatLocationMessages(chatId, deletedMessages)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,6 +124,10 @@ class LiveNowTabFragment : Fragment(), TelegramListener, TelegramIncomingMessage
|
||||||
app.runInUIThread { updateList() }
|
app.runInUIThread { updateList() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onDeleteChatLocationMessages(chatId: Long, messages: List<TdApi.Message>) {
|
||||||
|
app.runInUIThread { updateList() }
|
||||||
|
}
|
||||||
|
|
||||||
override fun updateLocationMessages() {}
|
override fun updateLocationMessages() {}
|
||||||
|
|
||||||
override fun updateLocation(location: Location?) {
|
override fun updateLocation(location: Location?) {
|
||||||
|
|
Loading…
Reference in a new issue