mirror of
https://github.com/oxen-io/session-android.git
synced 2024-11-27 12:05:22 +00:00
DataExtractionNotification type created and added to proto
This commit is contained in:
parent
527683e111
commit
6bc832f50a
@ -0,0 +1,4 @@
|
||||
package org.thoughtcrime.securesms.sskenvironment
|
||||
|
||||
class DataExtractionNotificationManager {
|
||||
}
|
@ -16,7 +16,7 @@ class MessageReceiveJob(val data: ByteArray, val isBackgroundPoll: Boolean, val
|
||||
override val maxFailureCount: Int = 10
|
||||
companion object {
|
||||
val TAG = MessageReceiveJob::class.qualifiedName
|
||||
val KEY: String = "AttachmentUploadJob"
|
||||
val KEY: String = "MessageReceiveJob"
|
||||
|
||||
//keys used for database storage purpose
|
||||
private val KEY_DATA = "data"
|
||||
|
@ -0,0 +1,81 @@
|
||||
package org.session.libsession.messaging.messages.control
|
||||
|
||||
import com.google.protobuf.ByteString
|
||||
import org.session.libsignal.libsignal.ecc.ECKeyPair
|
||||
import org.session.libsignal.service.internal.push.SignalServiceProtos
|
||||
import org.session.libsignal.utilities.logging.Log
|
||||
import java.lang.Exception
|
||||
|
||||
class DataExtractionNotification(): ControlMessage() {
|
||||
var kind: Kind? = null
|
||||
|
||||
// Kind enum
|
||||
sealed class Kind {
|
||||
class Screenshot() : Kind()
|
||||
class MediaSaved(val timestanp: Long) : Kind()
|
||||
|
||||
val description: String = run {
|
||||
when(this) {
|
||||
is Screenshot -> "screenshot"
|
||||
is MediaSaved -> "mediaSaved"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val TAG = "DataExtractionNotification"
|
||||
|
||||
fun fromProto(proto: SignalServiceProtos.Content): DataExtractionNotification? {
|
||||
val dataExtractionNotification = proto.dataExtractionNotification ?: return null
|
||||
val kind: Kind
|
||||
when(dataExtractionNotification.type) {
|
||||
SignalServiceProtos.DataExtractionNotification.Type.SCREENSHOT -> kind = Kind.Screenshot()
|
||||
SignalServiceProtos.DataExtractionNotification.Type.MEDIA_SAVED -> {
|
||||
val timestamp = if (dataExtractionNotification.hasTimestamp()) dataExtractionNotification.timestamp else 0
|
||||
kind = Kind.MediaSaved(timestamp)
|
||||
}
|
||||
}
|
||||
return DataExtractionNotification(kind)
|
||||
}
|
||||
}
|
||||
|
||||
//constructor
|
||||
internal constructor(kind: Kind) : this() {
|
||||
this.kind = kind
|
||||
}
|
||||
|
||||
// MARK: Validation
|
||||
override fun isValid(): Boolean {
|
||||
if (!super.isValid()) return false
|
||||
val kind = kind ?: return false
|
||||
return when(kind) {
|
||||
is Kind.Screenshot -> true
|
||||
is Kind.MediaSaved -> kind.timestanp > 0
|
||||
}
|
||||
}
|
||||
|
||||
override fun toProto(): SignalServiceProtos.Content? {
|
||||
val kind = kind
|
||||
if (kind == null) {
|
||||
Log.w(TAG, "Couldn't construct data extraction notification proto from: $this")
|
||||
return null
|
||||
}
|
||||
try {
|
||||
val dataExtractionNotification = SignalServiceProtos.DataExtractionNotification.newBuilder()
|
||||
when(kind) {
|
||||
is Kind.Screenshot -> dataExtractionNotification.type = SignalServiceProtos.DataExtractionNotification.Type.SCREENSHOT
|
||||
is Kind.MediaSaved -> {
|
||||
dataExtractionNotification.type = SignalServiceProtos.DataExtractionNotification.Type.MEDIA_SAVED
|
||||
dataExtractionNotification.timestamp = kind.timestanp
|
||||
}
|
||||
}
|
||||
val contentProto = SignalServiceProtos.Content.newBuilder()
|
||||
contentProto.dataExtractionNotification = dataExtractionNotification.build()
|
||||
return contentProto.build()
|
||||
} catch (e: Exception) {
|
||||
Log.w(TAG, "Couldn't construct data extraction notification proto from: $this")
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -120,6 +120,7 @@ object MessageReceiver {
|
||||
val message: Message = ReadReceipt.fromProto(proto) ?:
|
||||
TypingIndicator.fromProto(proto) ?:
|
||||
ClosedGroupControlMessage.fromProto(proto) ?:
|
||||
DataExtractionNotification.fromProto(proto) ?:
|
||||
ExpirationTimerUpdate.fromProto(proto) ?:
|
||||
ConfigurationMessage.fromProto(proto) ?:
|
||||
VisibleMessage.fromProto(proto) ?: throw Error.UnknownMessage
|
||||
|
@ -40,6 +40,7 @@ message Content {
|
||||
optional ReceiptMessage receiptMessage = 5;
|
||||
optional TypingMessage typingMessage = 6;
|
||||
optional ConfigurationMessage configurationMessage = 7;
|
||||
optional DataExtractionNotification dataExtractionNotification = 82;
|
||||
}
|
||||
|
||||
message ClosedGroupCiphertextMessageWrapper {
|
||||
@ -56,6 +57,18 @@ message KeyPair {
|
||||
required bytes privateKey = 2;
|
||||
}
|
||||
|
||||
message DataExtractionNotification {
|
||||
|
||||
enum Type {
|
||||
SCREENSHOT = 1;
|
||||
MEDIA_SAVED = 2; // timestamp
|
||||
}
|
||||
|
||||
// @required
|
||||
required Type type = 1;
|
||||
optional uint64 timestamp = 2;
|
||||
}
|
||||
|
||||
message DataMessage {
|
||||
|
||||
enum Flags {
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user