mirror of
https://github.com/element-hq/element-android
synced 2024-11-24 02:15:35 +03:00
Avoid duplicated events in DB (one with localId and one with eventId from homeserver, once synced)
This commit is contained in:
parent
cf3dbb378e
commit
6f804cab4d
4 changed files with 15 additions and 3 deletions
|
@ -18,6 +18,7 @@ package im.vector.matrix.android.internal.database.helper
|
|||
|
||||
import im.vector.matrix.android.internal.database.model.TimelineEventEntity
|
||||
import im.vector.matrix.android.internal.database.model.TimelineEventEntityFields
|
||||
import im.vector.matrix.android.internal.extensions.assertIsManaged
|
||||
import io.realm.Realm
|
||||
|
||||
internal fun TimelineEventEntity.Companion.nextId(realm: Realm): Long {
|
||||
|
@ -28,3 +29,11 @@ internal fun TimelineEventEntity.Companion.nextId(realm: Realm): Long {
|
|||
currentIdNum.toLong() + 1
|
||||
}
|
||||
}
|
||||
|
||||
internal fun TimelineEventEntity.deleteOnCascade() {
|
||||
assertIsManaged()
|
||||
root?.deleteFromRealm()
|
||||
annotations?.deleteFromRealm()
|
||||
readReceipts?.deleteFromRealm()
|
||||
deleteFromRealm()
|
||||
}
|
||||
|
|
|
@ -21,5 +21,8 @@ import com.squareup.moshi.JsonClass
|
|||
|
||||
@JsonClass(generateAdapter = true)
|
||||
internal data class SendResponse(
|
||||
/**
|
||||
* A unique identifier for the event.
|
||||
*/
|
||||
@Json(name = "event_id") val eventId: String
|
||||
)
|
||||
|
|
|
@ -22,7 +22,6 @@ import im.vector.matrix.android.api.session.events.model.EventType
|
|||
import im.vector.matrix.android.api.session.events.model.toModel
|
||||
import im.vector.matrix.android.api.session.room.model.message.MessageContent
|
||||
import im.vector.matrix.android.api.session.room.model.message.MessageWithAttachmentContent
|
||||
import im.vector.matrix.android.api.session.room.send.SendState
|
||||
import im.vector.matrix.android.api.session.room.sender.SenderInfo
|
||||
import im.vector.matrix.android.api.session.room.uploads.GetUploadsResult
|
||||
import im.vector.matrix.android.api.session.room.uploads.UploadEvent
|
||||
|
@ -76,8 +75,6 @@ internal class DefaultGetUploadsTask @Inject constructor(
|
|||
monarchy.doWithRealm { realm ->
|
||||
eventsFromRealm = EventEntity.whereType(realm, EventType.ENCRYPTED, params.roomId)
|
||||
.like(EventEntityFields.DECRYPTION_RESULT_JSON, TimelineEventFilter.DecryptedContent.URL)
|
||||
// FIXME Send event are stored twice in the DB. This is not normal. Keep only synced events
|
||||
.like(EventEntityFields.SEND_STATE_STR, SendState.SYNCED.name)
|
||||
.findAll()
|
||||
.map { it.asDomain() }
|
||||
// Exclude stickers
|
||||
|
|
|
@ -29,6 +29,7 @@ import im.vector.matrix.android.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM
|
|||
import im.vector.matrix.android.internal.crypto.algorithms.olm.OlmDecryptionResult
|
||||
import im.vector.matrix.android.internal.database.helper.addOrUpdate
|
||||
import im.vector.matrix.android.internal.database.helper.addTimelineEvent
|
||||
import im.vector.matrix.android.internal.database.helper.deleteOnCascade
|
||||
import im.vector.matrix.android.internal.database.mapper.ContentMapper
|
||||
import im.vector.matrix.android.internal.database.mapper.toEntity
|
||||
import im.vector.matrix.android.internal.database.model.ChunkEntity
|
||||
|
@ -272,6 +273,8 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle
|
|||
event.mxDecryptionResult = adapter.fromJson(json)
|
||||
}
|
||||
}
|
||||
// Finally delete the local echo
|
||||
sendingEventEntity.deleteOnCascade()
|
||||
} else {
|
||||
Timber.v("Can't find corresponding local echo for tx:$it")
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue