TypingIndicator implementation

This commit is contained in:
Brice 2020-11-30 10:08:56 +11:00
parent 746df2240a
commit 3a0ba29a72
3 changed files with 71 additions and 14 deletions

View File

@ -7,6 +7,16 @@ import org.session.libsignal.service.loki.protocol.closedgroups.ClosedGroupSende
class ClosedGroupUpdate() : ControlMessage() {
// Kind enum
sealed class Kind {
class New(val groupPublicKey: ByteArray, val name: String, val groupPrivateKey: ByteArray, val senderKeys: Collection<org.session.libsignal.service.loki.protocol.closedgroups.ClosedGroupSenderKey>, val members: Collection<ByteArray>, val admins: Collection<ByteArray>) : Kind()
class Info(val groupPublicKey: ByteArray, val name: String, val senderKeys: Collection<org.session.libsignal.service.loki.protocol.closedgroups.ClosedGroupSenderKey>, val members: Collection<ByteArray>, val admins: Collection<ByteArray>) : Kind()
class SenderKeyRequest(val groupPublicKey: ByteArray) : Kind()
class SenderKey(val groupPublicKey: ByteArray, val senderKey: org.session.libsignal.service.loki.protocol.closedgroups.ClosedGroupSenderKey) : Kind()
}
var kind: Kind? = null
companion object {
const val TAG = "ClosedGroupUpdate"
@ -54,16 +64,6 @@ class ClosedGroupUpdate() : ControlMessage() {
}
}
// Kind enum
sealed class Kind {
class New(val groupPublicKey: ByteArray, val name: String, val groupPrivateKey: ByteArray, val senderKeys: Collection<org.session.libsignal.service.loki.protocol.closedgroups.ClosedGroupSenderKey>, val members: Collection<ByteArray>, val admins: Collection<ByteArray>) : Kind()
class Info(val groupPublicKey: ByteArray, val name: String, val senderKeys: Collection<org.session.libsignal.service.loki.protocol.closedgroups.ClosedGroupSenderKey>, val members: Collection<ByteArray>, val admins: Collection<ByteArray>) : Kind()
class SenderKeyRequest(val groupPublicKey: ByteArray) : Kind()
class SenderKey(val groupPublicKey: ByteArray, val senderKey: org.session.libsignal.service.loki.protocol.closedgroups.ClosedGroupSenderKey) : Kind()
}
var kind: Kind? = null
// constructor
internal constructor(kind: Kind?) : this() {
this.kind = kind

View File

@ -33,7 +33,7 @@ class ReadReceipt() : ControlMessage() {
}
override fun toProto(): SignalServiceProtos.Content? {
val timestamps = timestamps ?: return null
val timestamps = timestamps
if (timestamps == null) {
Log.w(ExpirationTimerUpdate.TAG, "Couldn't construct read receipt proto from: $this")
return null

View File

@ -1,16 +1,73 @@
package org.session.libsession.messaging.messages.control
import org.session.libsignal.libsignal.logging.Log
import org.session.libsignal.service.internal.push.SignalServiceProtos
class TypingIndicator : ControlMessage() {
class TypingIndicator() : ControlMessage() {
companion object {
const val TAG = "TypingIndicator"
fun fromProto(proto: SignalServiceProtos.Content): TypingIndicator? {
TODO("Not yet implemented")
val typingIndicatorProto = proto.typingMessage ?: return null
val kind = Kind.fromProto(typingIndicatorProto.action)
return TypingIndicator(kind = kind)
}
}
// Kind enum
enum class Kind {
STARTED,
STOPPED,
;
companion object {
@JvmStatic
fun fromProto(proto: SignalServiceProtos.TypingMessage.Action): Kind =
when (proto) {
SignalServiceProtos.TypingMessage.Action.STARTED -> STARTED
SignalServiceProtos.TypingMessage.Action.STOPPED -> STOPPED
}
}
fun toProto(): SignalServiceProtos.TypingMessage.Action {
when (this) {
STARTED -> return SignalServiceProtos.TypingMessage.Action.STARTED
STOPPED -> return SignalServiceProtos.TypingMessage.Action.STOPPED
}
}
}
var kind: Kind? = null
//constructor
internal constructor(kind: Kind) : this() {
this.kind = kind
}
// validation
override fun isValid(): Boolean {
if (!super.isValid()) return false
return kind != null
}
override fun toProto(): SignalServiceProtos.Content? {
TODO("Not yet implemented")
val timestamp = sentTimestamp
val kind = kind
if (timestamp == null || kind == null) {
Log.w(TAG, "Couldn't construct typing indicator proto from: $this")
return null
}
val typingIndicatorProto = SignalServiceProtos.TypingMessage.newBuilder()
typingIndicatorProto.timestamp = timestamp
typingIndicatorProto.action = kind.toProto()
val contentProto = SignalServiceProtos.Content.newBuilder()
try {
contentProto.typingMessage = typingIndicatorProto.build()
return contentProto.build()
} catch (e: Exception) {
Log.w(TAG, "Couldn't construct typing indicator proto from: $this")
return null
}
}
}