|
|
|
@ -23,6 +23,7 @@ import org.whispersystems.signalservice.api.messages.multidevice.SentTranscriptM
|
|
|
|
|
import org.whispersystems.signalservice.api.push.SignalServiceAddress
|
|
|
|
|
import org.whispersystems.signalservice.loki.api.*
|
|
|
|
|
import org.whispersystems.signalservice.loki.messaging.LokiThreadFriendRequestStatus
|
|
|
|
|
import org.whispersystems.signalservice.loki.utilities.successBackground
|
|
|
|
|
import java.security.MessageDigest
|
|
|
|
|
import java.util.*
|
|
|
|
|
|
|
|
|
@ -236,16 +237,15 @@ class LokiPublicChatPoller(private val context: Context, private val group: Loki
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Promise.of(messages)
|
|
|
|
|
}.success {
|
|
|
|
|
}.successBackground {
|
|
|
|
|
val newDisplayNameUpdatees = uniqueDevices.mapNotNull {
|
|
|
|
|
// This will return null if the current device is a master device
|
|
|
|
|
LokiDeviceLinkUtilities.getMasterHexEncodedPublicKey(it).get()
|
|
|
|
|
}.toSet()
|
|
|
|
|
// Fetch the display names of the master devices
|
|
|
|
|
displayNameUpdatees = displayNameUpdatees.union(newDisplayNameUpdatees)
|
|
|
|
|
}.success { messages ->
|
|
|
|
|
}.successBackground { messages ->
|
|
|
|
|
// Process messages in the background
|
|
|
|
|
Thread {
|
|
|
|
|
messages.forEach { message ->
|
|
|
|
|
if (userDevices.contains(message.hexEncodedPublicKey)) {
|
|
|
|
|
processOutgoingMessage(message)
|
|
|
|
@ -253,7 +253,6 @@ class LokiPublicChatPoller(private val context: Context, private val group: Loki
|
|
|
|
|
processIncomingMessage(message)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}.start()
|
|
|
|
|
}.fail {
|
|
|
|
|
Log.d("Loki", "Failed to get messages for group chat with ID: ${group.channel} on server: ${group.server}.")
|
|
|
|
|
}
|
|
|
|
@ -263,13 +262,11 @@ class LokiPublicChatPoller(private val context: Context, private val group: Loki
|
|
|
|
|
if (displayNameUpdatees.isEmpty()) { return }
|
|
|
|
|
val hexEncodedPublicKeys = displayNameUpdatees
|
|
|
|
|
displayNameUpdatees = setOf()
|
|
|
|
|
api.getDisplayNames(hexEncodedPublicKeys, group.server).success { mapping ->
|
|
|
|
|
Thread {
|
|
|
|
|
api.getDisplayNames(hexEncodedPublicKeys, group.server).successBackground { mapping ->
|
|
|
|
|
for (pair in mapping.entries) {
|
|
|
|
|
val senderDisplayName = "${pair.value} (...${pair.key.takeLast(8)})"
|
|
|
|
|
DatabaseFactory.getLokiUserDatabase(context).setServerDisplayName(group.id, pair.key, senderDisplayName)
|
|
|
|
|
}
|
|
|
|
|
}.start()
|
|
|
|
|
}.fail {
|
|
|
|
|
displayNameUpdatees = displayNameUpdatees.union(hexEncodedPublicKeys)
|
|
|
|
|
}
|
|
|
|
@ -277,7 +274,6 @@ class LokiPublicChatPoller(private val context: Context, private val group: Loki
|
|
|
|
|
|
|
|
|
|
private fun pollForDeletedMessages() {
|
|
|
|
|
api.getDeletedMessageServerIDs(group.channel, group.server).success { deletedMessageServerIDs ->
|
|
|
|
|
Thread {
|
|
|
|
|
val lokiMessageDatabase = DatabaseFactory.getLokiMessageDatabase(context)
|
|
|
|
|
val deletedMessageIDs = deletedMessageServerIDs.mapNotNull { lokiMessageDatabase.getMessageID(it) }
|
|
|
|
|
val smsMessageDatabase = DatabaseFactory.getSmsDatabase(context)
|
|
|
|
@ -286,7 +282,6 @@ class LokiPublicChatPoller(private val context: Context, private val group: Loki
|
|
|
|
|
smsMessageDatabase.deleteMessage(it)
|
|
|
|
|
mmsMessageDatabase.delete(it)
|
|
|
|
|
}
|
|
|
|
|
}.start()
|
|
|
|
|
}.fail {
|
|
|
|
|
Log.d("Loki", "Failed to get deleted messages for group chat with ID: ${group.channel} on server: ${group.server}.")
|
|
|
|
|
}
|
|
|
|
|