Merge branch 'dev' of https://github.com/oxen-io/session-android into ONS-name-1

This commit is contained in:
ryanzhao 2021-05-28 11:22:58 +10:00
commit a81c17057f
3 changed files with 13 additions and 18 deletions

View File

@ -143,8 +143,8 @@ dependencies {
testImplementation 'org.robolectric:shadows-multidex:4.2' testImplementation 'org.robolectric:shadows-multidex:4.2'
} }
def canonicalVersionCode = 177 def canonicalVersionCode = 178
def canonicalVersionName = "1.10.9" def canonicalVersionName = "1.10.10"
def postFixSize = 10 def postFixSize = 10
def abiPostFix = ['armeabi-v7a' : 1, def abiPostFix = ['armeabi-v7a' : 1,

View File

@ -17,14 +17,9 @@ import org.session.libsession.messaging.sending_receiving.pollers.OpenGroupPolle
import org.session.libsession.snode.OnionRequestAPI import org.session.libsession.snode.OnionRequestAPI
import org.session.libsession.utilities.AESGCM import org.session.libsession.utilities.AESGCM
import org.session.libsession.utilities.TextSecurePreferences import org.session.libsession.utilities.TextSecurePreferences
import org.session.libsignal.utilities.HTTP import org.session.libsignal.utilities.*
import org.session.libsignal.utilities.HTTP.Verb.*
import org.session.libsignal.utilities.removing05PrefixIfNeeded
import org.session.libsignal.utilities.toHexString
import org.session.libsignal.utilities.Base64.* import org.session.libsignal.utilities.Base64.*
import org.session.libsignal.utilities.Hex import org.session.libsignal.utilities.HTTP.Verb.*
import org.session.libsignal.utilities.JsonUtil
import org.session.libsignal.utilities.Log
import org.whispersystems.curve25519.Curve25519 import org.whispersystems.curve25519.Curve25519
import java.util.* import java.util.*
@ -63,11 +58,11 @@ object OpenGroupAPIV2 {
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy::class) @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy::class)
data class CompactPollRequest(val roomID: String, val authToken: String, val fromDeletionServerID: Long?, val fromMessageServerID: Long?) data class CompactPollRequest(val roomID: String, val authToken: String, val fromDeletionServerID: Long?, val fromMessageServerID: Long?)
data class CompactPollResult(val messages: List<OpenGroupMessageV2>, val deletions: List<Long>, val moderators: List<String>) data class CompactPollResult(val messages: List<OpenGroupMessageV2>, val deletions: List<MessageDeletion>, val moderators: List<String>)
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy::class) @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy::class)
data class MessageDeletion data class MessageDeletion
@JvmOverloads constructor(val id: Long = 0, val deletedMessageId: Long = 0 @JvmOverloads constructor(val id: Long = 0, val deletedMessageServerID: Long = 0
) { ) {
companion object { companion object {
@ -396,13 +391,13 @@ object OpenGroupAPIV2 {
// Deletions // Deletions
val type = TypeFactory.defaultInstance().constructCollectionType(List::class.java, MessageDeletion::class.java) val type = TypeFactory.defaultInstance().constructCollectionType(List::class.java, MessageDeletion::class.java)
val idsAsString = JsonUtil.toJson(json["deletions"]) val idsAsString = JsonUtil.toJson(json["deletions"])
val deletedServerIDs = JsonUtil.fromJson<List<MessageDeletion>>(idsAsString, type) ?: throw Error.ParsingFailed val deletions = JsonUtil.fromJson<List<MessageDeletion>>(idsAsString, type) ?: throw Error.ParsingFailed
// Messages // Messages
val rawMessages = json["messages"] as? List<Map<String, Any>> ?: return@mapNotNull null val rawMessages = json["messages"] as? List<Map<String, Any>> ?: return@mapNotNull null
val messages = parseMessages(roomID, server, rawMessages) val messages = parseMessages(roomID, server, rawMessages)
roomID to CompactPollResult( roomID to CompactPollResult(
messages = messages, messages = messages,
deletions = deletedServerIDs.map { it.deletedMessageId }, deletions = deletions,
moderators = moderators moderators = moderators
) )
}.toMap() }.toMap()

View File

@ -97,15 +97,15 @@ class OpenGroupPollerV2(private val server: String, private val executorService:
JobQueue.shared.add(TrimThreadJob(threadId)) JobQueue.shared.add(TrimThreadJob(threadId))
} }
private fun handleDeletedMessages(room: String, openGroupID: String, deletedMessageServerIDs: List<Long>) { private fun handleDeletedMessages(room: String, openGroupID: String, deletions: List<OpenGroupAPIV2.MessageDeletion>) {
val storage = MessagingModuleConfiguration.shared.storage val storage = MessagingModuleConfiguration.shared.storage
val dataProvider = MessagingModuleConfiguration.shared.messageDataProvider val dataProvider = MessagingModuleConfiguration.shared.messageDataProvider
val groupID = GroupUtil.getEncodedOpenGroupID(openGroupID.toByteArray()) val groupID = GroupUtil.getEncodedOpenGroupID(openGroupID.toByteArray())
val threadID = storage.getThreadId(Address.fromSerialized(groupID)) ?: return val threadID = storage.getThreadId(Address.fromSerialized(groupID)) ?: return
val deletedMessageIDs = deletedMessageServerIDs.mapNotNull { serverID -> val deletedMessageIDs = deletions.mapNotNull { deletion ->
val messageID = dataProvider.getMessageID(serverID, threadID) val messageID = dataProvider.getMessageID(deletion.deletedMessageServerID, threadID)
if (messageID == null) { if (messageID == null) {
Log.d("Loki", "Couldn't find message ID for message with serverID: $serverID.") Log.d("Loki", "Couldn't find message ID for message with serverID: ${deletion.deletedMessageServerID}.")
} }
messageID messageID
} }
@ -113,7 +113,7 @@ class OpenGroupPollerV2(private val server: String, private val executorService:
MessagingModuleConfiguration.shared.messageDataProvider.deleteMessage(messageId, isSms) MessagingModuleConfiguration.shared.messageDataProvider.deleteMessage(messageId, isSms)
} }
val currentMax = storage.getLastDeletionServerID(room, server) ?: 0L val currentMax = storage.getLastDeletionServerID(room, server) ?: 0L
val latestMax = deletedMessageServerIDs.maxOrNull() ?: 0L val latestMax = deletions.map { it.id }.maxOrNull() ?: 0L
if (latestMax > currentMax && latestMax != 0L) { if (latestMax > currentMax && latestMax != 0L) {
storage.setLastDeletionServerID(room, server, latestMax) storage.setLastDeletionServerID(room, server, latestMax)
} }