forked from GitHub-Mirror/riotX-android
Code review
This commit is contained in:
parent
99925d7cf9
commit
424fd1347d
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package im.vector.matrix.android.internal.database.query
|
package im.vector.matrix.android.internal.database.query
|
||||||
|
|
||||||
import im.vector.matrix.android.api.session.room.send.SendState
|
|
||||||
import im.vector.matrix.android.internal.database.model.ChunkEntity
|
import im.vector.matrix.android.internal.database.model.ChunkEntity
|
||||||
import im.vector.matrix.android.internal.database.model.EventEntity
|
import im.vector.matrix.android.internal.database.model.EventEntity
|
||||||
import im.vector.matrix.android.internal.database.model.EventEntity.LinkFilterMode.*
|
import im.vector.matrix.android.internal.database.model.EventEntity.LinkFilterMode.*
|
||||||
@ -43,35 +42,12 @@ internal fun EventEntity.Companion.where(realm: Realm,
|
|||||||
query.equalTo(EventEntityFields.TYPE, type)
|
query.equalTo(EventEntityFields.TYPE, type)
|
||||||
}
|
}
|
||||||
return when (linkFilterMode) {
|
return when (linkFilterMode) {
|
||||||
LINKED_ONLY -> query.equalTo(EventEntityFields.IS_UNLINKED, false)
|
LINKED_ONLY -> query.equalTo(EventEntityFields.IS_UNLINKED, false)
|
||||||
UNLINKED_ONLY -> query.equalTo(EventEntityFields.IS_UNLINKED, true)
|
UNLINKED_ONLY -> query.equalTo(EventEntityFields.IS_UNLINKED, true)
|
||||||
BOTH -> query
|
BOTH -> query
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//internal fun EventEntity.Companion.unsent(realm: Realm,
|
|
||||||
// roomId: String? = null): RealmQuery<EventEntity> {
|
|
||||||
// val query = realm.where<EventEntity>()
|
|
||||||
// if (roomId != null) {
|
|
||||||
// query.equalTo(EventEntityFields.ROOM_ID, roomId)
|
|
||||||
// }
|
|
||||||
// query.equalTo(EventEntityFields.SEND_STATE_STR, SendState.UNSENT.name)
|
|
||||||
// return query
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//internal fun EventEntity.Companion.byTypes(realm: Realm,
|
|
||||||
// types: List<String>): RealmQuery<EventEntity> {
|
|
||||||
// val query = realm.where<EventEntity>()
|
|
||||||
// types.forEachIndexed { index, type ->
|
|
||||||
// if (index == 0) {
|
|
||||||
// query.equalTo(EventEntityFields.TYPE, type)
|
|
||||||
// } else {
|
|
||||||
// query.or().equalTo(EventEntityFields.TYPE, type)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return query
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
internal fun EventEntity.Companion.latestEvent(realm: Realm,
|
internal fun EventEntity.Companion.latestEvent(realm: Realm,
|
||||||
roomId: String,
|
roomId: String,
|
||||||
|
@ -50,19 +50,19 @@ internal class DefaultEventRelationsAggregationTask(private val monarchy: Monarc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun update(realm: Realm, events: List<Pair<Event, SendState>>?, userId: String) {
|
private fun update(realm: Realm, events: List<Pair<Event, SendState>>, userId: String) {
|
||||||
events?.forEach { pair ->
|
events.forEach { pair ->
|
||||||
val roomId = pair.first.roomId ?: return@forEach
|
val roomId = pair.first.roomId ?: return@forEach
|
||||||
val event = pair.first
|
val event = pair.first
|
||||||
val sendState = pair.second
|
val sendState = pair.second
|
||||||
val isLocalEcho = sendState == SendState.UNSENT
|
val isLocalEcho = sendState == SendState.UNSENT
|
||||||
when (event.type) {
|
when (event.type) {
|
||||||
EventType.REACTION -> {
|
EventType.REACTION -> {
|
||||||
//we got a reaction!!
|
//we got a reaction!!
|
||||||
Timber.v("###REACTION in room $roomId")
|
Timber.v("###REACTION in room $roomId")
|
||||||
handleReaction(event, roomId, realm, userId, isLocalEcho)
|
handleReaction(event, roomId, realm, userId, isLocalEcho)
|
||||||
}
|
}
|
||||||
EventType.MESSAGE -> {
|
EventType.MESSAGE -> {
|
||||||
if (event.unsignedData?.relations?.annotations != null) {
|
if (event.unsignedData?.relations?.annotations != null) {
|
||||||
Timber.v("###REACTION Agreggation in room $roomId for event ${event.eventId}")
|
Timber.v("###REACTION Agreggation in room $roomId for event ${event.eventId}")
|
||||||
handleInitialAggregatedRelations(event, roomId, event.unsignedData.relations.annotations, realm)
|
handleInitialAggregatedRelations(event, roomId, event.unsignedData.relations.annotations, realm)
|
||||||
@ -80,7 +80,7 @@ internal class DefaultEventRelationsAggregationTask(private val monarchy: Monarc
|
|||||||
val eventToPrune = event.redacts?.let { EventEntity.where(realm, eventId = it).findFirst() }
|
val eventToPrune = event.redacts?.let { EventEntity.where(realm, eventId = it).findFirst() }
|
||||||
?: return
|
?: return
|
||||||
when (eventToPrune.type) {
|
when (eventToPrune.type) {
|
||||||
EventType.MESSAGE -> {
|
EventType.MESSAGE -> {
|
||||||
Timber.d("REDACTION for message ${eventToPrune.eventId}")
|
Timber.d("REDACTION for message ${eventToPrune.eventId}")
|
||||||
val unsignedData = EventMapper.map(eventToPrune).unsignedData
|
val unsignedData = EventMapper.map(eventToPrune).unsignedData
|
||||||
?: UnsignedData(null, null)
|
?: UnsignedData(null, null)
|
||||||
@ -174,7 +174,7 @@ internal class DefaultEventRelationsAggregationTask(private val monarchy: Monarc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handleReaction(event: Event, roomId: String, realm: Realm, userId: String, isLocalEcho: Boolean) {
|
private fun handleReaction(event: Event, roomId: String, realm: Realm, userId: String, isLocalEcho: Boolean) {
|
||||||
event.content.toModel<ReactionContent>()?.let { content ->
|
event.content.toModel<ReactionContent>()?.let { content ->
|
||||||
//rel_type must be m.annotation
|
//rel_type must be m.annotation
|
||||||
if (RelationType.ANNOTATION == content.relatesTo?.type) {
|
if (RelationType.ANNOTATION == content.relatesTo?.type) {
|
||||||
@ -236,7 +236,7 @@ internal class DefaultEventRelationsAggregationTask(private val monarchy: Monarc
|
|||||||
/**
|
/**
|
||||||
* Called when an event is deleted
|
* Called when an event is deleted
|
||||||
*/
|
*/
|
||||||
fun handleRedactionOfReplace(redacted: EventEntity, relatedEventId: String, realm: Realm) {
|
private fun handleRedactionOfReplace(redacted: EventEntity, relatedEventId: String, realm: Realm) {
|
||||||
Timber.d("Handle redaction of m.replace")
|
Timber.d("Handle redaction of m.replace")
|
||||||
val eventSummary = EventAnnotationsSummaryEntity.where(realm, relatedEventId).findFirst()
|
val eventSummary = EventAnnotationsSummaryEntity.where(realm, relatedEventId).findFirst()
|
||||||
if (eventSummary == null) {
|
if (eventSummary == null) {
|
||||||
@ -270,40 +270,40 @@ internal class DefaultEventRelationsAggregationTask(private val monarchy: Monarc
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun handleReactionRedact(eventToPrune: EventEntity, realm: Realm, userId: String) {
|
fun handleReactionRedact(eventToPrune: EventEntity, realm: Realm, userId: String) {
|
||||||
Timber.d("REDACTION of reaction ${eventToPrune.eventId}")
|
Timber.v("REDACTION of reaction ${eventToPrune.eventId}")
|
||||||
//delete a reaction, need to update the annotation summary if any
|
//delete a reaction, need to update the annotation summary if any
|
||||||
val reactionContent: ReactionContent = EventMapper.map(eventToPrune).content.toModel()
|
val reactionContent: ReactionContent = EventMapper.map(eventToPrune).content.toModel()
|
||||||
?: return
|
?: return
|
||||||
val eventThatWasReacted = reactionContent.relatesTo?.eventId ?: return
|
val eventThatWasReacted = reactionContent.relatesTo?.eventId ?: return
|
||||||
|
|
||||||
val reactionkey = reactionContent.relatesTo.key
|
val reactionKey = reactionContent.relatesTo.key
|
||||||
Timber.d("REMOVE reaction for key $reactionkey")
|
Timber.v("REMOVE reaction for key $reactionKey")
|
||||||
val summary = EventAnnotationsSummaryEntity.where(realm, eventThatWasReacted).findFirst()
|
val summary = EventAnnotationsSummaryEntity.where(realm, eventThatWasReacted).findFirst()
|
||||||
if (summary != null) {
|
if (summary != null) {
|
||||||
summary.reactionsSummary.where()
|
summary.reactionsSummary.where()
|
||||||
.equalTo(ReactionAggregatedSummaryEntityFields.KEY, reactionkey)
|
.equalTo(ReactionAggregatedSummaryEntityFields.KEY, reactionKey)
|
||||||
.findFirst()?.let { summary ->
|
.findFirst()?.let { aggregation ->
|
||||||
Timber.d("Find summary for key with ${summary.sourceEvents.size} known reactions (count:${summary.count})")
|
Timber.v("Find summary for key with ${aggregation.sourceEvents.size} known reactions (count:${aggregation.count})")
|
||||||
Timber.d("Known reactions ${summary.sourceEvents.joinToString(",")}")
|
Timber.v("Known reactions ${aggregation.sourceEvents.joinToString(",")}")
|
||||||
if (summary.sourceEvents.contains(eventToPrune.eventId)) {
|
if (aggregation.sourceEvents.contains(eventToPrune.eventId)) {
|
||||||
Timber.d("REMOVE reaction for key $reactionkey")
|
Timber.v("REMOVE reaction for key $reactionKey")
|
||||||
summary.sourceEvents.remove(eventToPrune.eventId)
|
aggregation.sourceEvents.remove(eventToPrune.eventId)
|
||||||
Timber.d("Known reactions after ${summary.sourceEvents.joinToString(",")}")
|
Timber.v("Known reactions after ${aggregation.sourceEvents.joinToString(",")}")
|
||||||
summary.count = summary.count - 1
|
aggregation.count = aggregation.count - 1
|
||||||
if (eventToPrune.sender == userId) {
|
if (eventToPrune.sender == userId) {
|
||||||
//Was it a redact on my reaction?
|
//Was it a redact on my reaction?
|
||||||
summary.addedByMe = false
|
aggregation.addedByMe = false
|
||||||
}
|
}
|
||||||
if (summary.count == 0) {
|
if (aggregation.count == 0) {
|
||||||
//delete!
|
//delete!
|
||||||
summary.deleteFromRealm()
|
aggregation.deleteFromRealm()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Timber.e("## Cannot remove summary from count, corresponding reaction ${eventToPrune.eventId} is not known")
|
Timber.e("## Cannot remove summary from count, corresponding reaction ${eventToPrune.eventId} is not known")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Timber.e("## Cannot find summary for key $reactionkey")
|
Timber.e("## Cannot find summary for key $reactionKey")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -17,7 +17,6 @@
|
|||||||
package im.vector.matrix.android.internal.session.room.send
|
package im.vector.matrix.android.internal.session.room.send
|
||||||
|
|
||||||
import android.media.MediaMetadataRetriever
|
import android.media.MediaMetadataRetriever
|
||||||
import android.text.TextUtils
|
|
||||||
import com.zhuinden.monarchy.Monarchy
|
import com.zhuinden.monarchy.Monarchy
|
||||||
import im.vector.matrix.android.R
|
import im.vector.matrix.android.R
|
||||||
import im.vector.matrix.android.api.auth.data.Credentials
|
import im.vector.matrix.android.api.auth.data.Credentials
|
||||||
@ -39,6 +38,7 @@ import im.vector.matrix.android.internal.util.StringProvider
|
|||||||
import im.vector.matrix.android.internal.util.tryTransactionAsync
|
import im.vector.matrix.android.internal.util.tryTransactionAsync
|
||||||
import org.commonmark.parser.Parser
|
import org.commonmark.parser.Parser
|
||||||
import org.commonmark.renderer.html.HtmlRenderer
|
import org.commonmark.renderer.html.HtmlRenderer
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates local echo of events for room events.
|
* Creates local echo of events for room events.
|
||||||
@ -57,7 +57,7 @@ internal class LocalEchoEventFactory(private val credentials: Credentials, priva
|
|||||||
val document = parser.parse(text)
|
val document = parser.parse(text)
|
||||||
val renderer = HtmlRenderer.builder().build()
|
val renderer = HtmlRenderer.builder().build()
|
||||||
val htmlText = renderer.render(document)
|
val htmlText = renderer.render(document)
|
||||||
if (isFormattedTextPertinent(text, htmlText)) { //FIX that
|
if (isFormattedTextPertinent(text, htmlText)) { //FIXME
|
||||||
return createFormattedTextEvent(roomId, text, htmlText)
|
return createFormattedTextEvent(roomId, text, htmlText)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -114,7 +114,7 @@ internal class LocalEchoEventFactory(private val credentials: Credentials, priva
|
|||||||
ContentAttachmentData.Type.IMAGE -> createImageEvent(roomId, attachment)
|
ContentAttachmentData.Type.IMAGE -> createImageEvent(roomId, attachment)
|
||||||
ContentAttachmentData.Type.VIDEO -> createVideoEvent(roomId, attachment)
|
ContentAttachmentData.Type.VIDEO -> createVideoEvent(roomId, attachment)
|
||||||
ContentAttachmentData.Type.AUDIO -> createAudioEvent(roomId, attachment)
|
ContentAttachmentData.Type.AUDIO -> createAudioEvent(roomId, attachment)
|
||||||
ContentAttachmentData.Type.FILE -> createFileEvent(roomId, attachment)
|
ContentAttachmentData.Type.FILE -> createFileEvent(roomId, attachment)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -234,7 +234,7 @@ internal class LocalEchoEventFactory(private val credentials: Credentials, priva
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun dummyEventId(roomId: String): String {
|
private fun dummyEventId(roomId: String): String {
|
||||||
return "m.${txNCounter++}"
|
return "m.${UUID.randomUUID()}"
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createReplyTextEvent(roomId: String, eventReplied: Event, replyText: String): Event? {
|
fun createReplyTextEvent(roomId: String, eventReplied: Event, replyText: String): Event? {
|
||||||
@ -299,11 +299,11 @@ internal class LocalEchoEventFactory(private val credentials: Credentials, priva
|
|||||||
}
|
}
|
||||||
return content.body to formattedText
|
return content.body to formattedText
|
||||||
}
|
}
|
||||||
MessageType.MSGTYPE_FILE -> return stringProvider.getString(R.string.reply_to_a_file) to null
|
MessageType.MSGTYPE_FILE -> return stringProvider.getString(R.string.reply_to_a_file) to null
|
||||||
MessageType.MSGTYPE_AUDIO -> return stringProvider.getString(R.string.reply_to_an_audio_file) to null
|
MessageType.MSGTYPE_AUDIO -> return stringProvider.getString(R.string.reply_to_an_audio_file) to null
|
||||||
MessageType.MSGTYPE_IMAGE -> return stringProvider.getString(R.string.reply_to_an_image) to null
|
MessageType.MSGTYPE_IMAGE -> return stringProvider.getString(R.string.reply_to_an_image) to null
|
||||||
MessageType.MSGTYPE_VIDEO -> return stringProvider.getString(R.string.reply_to_a_video) to null
|
MessageType.MSGTYPE_VIDEO -> return stringProvider.getString(R.string.reply_to_a_video) to null
|
||||||
else -> return (content?.body ?: "") to null
|
else -> return (content?.body ?: "") to null
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -350,7 +350,4 @@ internal class LocalEchoEventFactory(private val credentials: Credentials, priva
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
|
||||||
var txNCounter = System.currentTimeMillis()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user