From 746df2240a7bc5705e653b93ef48eff6865395cc Mon Sep 17 00:00:00 2001 From: Brice Date: Fri, 27 Nov 2020 17:27:09 +1100 Subject: [PATCH] ReadReceipt implementation + small corrections --- .../messaging/messages/control/ReadReceipt.kt | 42 +++++++++++++++++-- .../messages/control/TypingIndicator.kt | 2 +- .../messages/control/unused/NullMessage.kt | 2 +- .../messages/control/unused/SessionRequest.kt | 2 +- .../messaging/messages/visible/Contact.kt | 2 +- .../messaging/messages/visible/LinkPreview.kt | 2 +- .../messaging/messages/visible/Profile.kt | 2 +- .../messaging/messages/visible/Quote.kt | 2 +- .../visible/attachments/Attachment.kt | 2 +- 9 files changed, 47 insertions(+), 11 deletions(-) diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/control/ReadReceipt.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/control/ReadReceipt.kt index 152eac8729..c735820b13 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/control/ReadReceipt.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/control/ReadReceipt.kt @@ -1,17 +1,53 @@ package org.session.libsession.messaging.messages.control +import org.session.libsignal.libsignal.logging.Log import org.session.libsignal.service.internal.push.SignalServiceProtos class ReadReceipt() : ControlMessage() { + var timestamps: LongArray? = null companion object { - fun fromProto(proto: SignalServiceProtos.Content): ExpirationTimerUpdate? { - TODO("Not yet implemented") + const val TAG = "ReadReceipt" + + fun fromProto(proto: SignalServiceProtos.Content): ReadReceipt? { + val receiptProto = proto.receiptMessage ?: return null + if (receiptProto.type != SignalServiceProtos.ReceiptMessage.Type.READ) return null + val timestamps = receiptProto.timestampList + if (timestamps.isEmpty()) return null + return ReadReceipt(timestamps = timestamps.toLongArray()) } } + //constructor + internal constructor(timestamps: LongArray?) : this() { + this.timestamps = timestamps + } + + // validation + override fun isValid(): Boolean { + if (!super.isValid()) return false + val timestamps = timestamps ?: return false + if (timestamps.isNotEmpty()) { return true } + return false + } + override fun toProto(): SignalServiceProtos.Content? { - TODO("Not yet implemented") + val timestamps = timestamps ?: return null + if (timestamps == null) { + Log.w(ExpirationTimerUpdate.TAG, "Couldn't construct read receipt proto from: $this") + return null + } + val receiptProto = SignalServiceProtos.ReceiptMessage.newBuilder() + receiptProto.type = SignalServiceProtos.ReceiptMessage.Type.READ + receiptProto.addAllTimestamp(timestamps.asIterable()) + val contentProto = SignalServiceProtos.Content.newBuilder() + try { + contentProto.receiptMessage = receiptProto.build() + return contentProto.build() + } catch (e: Exception) { + Log.w(ExpirationTimerUpdate.TAG, "Couldn't construct read receipt proto from: $this") + return null + } } } \ No newline at end of file diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/control/TypingIndicator.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/control/TypingIndicator.kt index da022a84c1..41e9498a60 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/control/TypingIndicator.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/control/TypingIndicator.kt @@ -5,7 +5,7 @@ import org.session.libsignal.service.internal.push.SignalServiceProtos class TypingIndicator : ControlMessage() { companion object { - fun fromProto(proto: SignalServiceProtos.Content): ExpirationTimerUpdate? { + fun fromProto(proto: SignalServiceProtos.Content): TypingIndicator? { TODO("Not yet implemented") } } diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/control/unused/NullMessage.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/control/unused/NullMessage.kt index df0887ee8d..a2bb642008 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/control/unused/NullMessage.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/control/unused/NullMessage.kt @@ -8,7 +8,7 @@ class NullMessage() : ControlMessage() { companion object { - fun fromProto(proto: SignalServiceProtos.Content): ExpirationTimerUpdate? { + fun fromProto(proto: SignalServiceProtos.Content): NullMessage? { TODO("Not yet implemented") } } diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/control/unused/SessionRequest.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/control/unused/SessionRequest.kt index 7285d5c4cb..173fb141fc 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/control/unused/SessionRequest.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/control/unused/SessionRequest.kt @@ -7,7 +7,7 @@ import org.session.libsignal.service.internal.push.SignalServiceProtos class SessionRequest() : ControlMessage() { companion object { - fun fromProto(proto: SignalServiceProtos.Content): ExpirationTimerUpdate? { + fun fromProto(proto: SignalServiceProtos.Content): SessionRequest? { TODO("Not yet implemented") } } diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/visible/Contact.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/visible/Contact.kt index f5f818e86e..e0c9d2ab34 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/visible/Contact.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/visible/Contact.kt @@ -6,7 +6,7 @@ import org.session.libsignal.service.internal.push.SignalServiceProtos internal class Contact : VisibleMessage() { companion object { - fun fromProto(proto: SignalServiceProtos.Content): ExpirationTimerUpdate? { + fun fromProto(proto: SignalServiceProtos.Content): Contact? { TODO("Not yet implemented") } } diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/visible/LinkPreview.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/visible/LinkPreview.kt index d758a46cca..3bcafd71a7 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/visible/LinkPreview.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/visible/LinkPreview.kt @@ -6,7 +6,7 @@ import org.session.libsignal.service.internal.push.SignalServiceProtos internal class LinkPreview : VisibleMessage(){ companion object { - fun fromProto(proto: SignalServiceProtos.Content): ExpirationTimerUpdate? { + fun fromProto(proto: SignalServiceProtos.Content): LinkPreview? { TODO("Not yet implemented") } } diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/visible/Profile.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/visible/Profile.kt index 5b172bf5e1..a5b09b4f79 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/visible/Profile.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/visible/Profile.kt @@ -6,7 +6,7 @@ import org.session.libsignal.service.internal.push.SignalServiceProtos internal class Profile : VisibleMessage() { companion object { - fun fromProto(proto: SignalServiceProtos.Content): ExpirationTimerUpdate? { + fun fromProto(proto: SignalServiceProtos.Content): Profile? { TODO("Not yet implemented") } } diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/visible/Quote.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/visible/Quote.kt index aecf3dc3da..55b6481c94 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/visible/Quote.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/visible/Quote.kt @@ -6,7 +6,7 @@ import org.session.libsignal.service.internal.push.SignalServiceProtos internal class Quote : VisibleMessage() { companion object { - fun fromProto(proto: SignalServiceProtos.Content): ExpirationTimerUpdate? { + fun fromProto(proto: SignalServiceProtos.Content): Quote? { TODO("Not yet implemented") } } diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/visible/attachments/Attachment.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/visible/attachments/Attachment.kt index 94b7ace5d4..b7ab2ec8e2 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/visible/attachments/Attachment.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/visible/attachments/Attachment.kt @@ -7,7 +7,7 @@ import org.session.libsignal.service.internal.push.SignalServiceProtos internal class Attachment : VisibleMessage() { companion object { - fun fromProto(proto: SignalServiceProtos.Content): ExpirationTimerUpdate? { + fun fromProto(proto: SignalServiceProtos.Content): Attachment? { TODO("Not yet implemented") } }