From 7cc7cc60c7ab2c9f23a2d57221fa63178e5a5ac4 Mon Sep 17 00:00:00 2001 From: Brice Date: Fri, 22 Jan 2021 13:30:00 +1100 Subject: [PATCH 1/3] serialization functions added to Job classes --- .../loki/database/SessionJobDatabase.kt | 4 + libsession/build.gradle | 1 + .../messaging/jobs/AttachmentDownloadJob.kt | 23 ++ .../messaging/jobs/AttachmentUploadJob.kt | 41 ++ .../session/libsession/messaging/jobs/Job.kt | 24 ++ .../libsession/messaging/jobs/JobData.kt | 351 ++++++++++++++++++ .../messaging/jobs/MessageReceiveJob.kt | 26 ++ .../messaging/jobs/MessageSendJob.kt | 46 ++- .../messaging/jobs/NotifyPNServerJob.kt | 35 ++ 9 files changed, 550 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/org/thoughtcrime/securesms/loki/database/SessionJobDatabase.kt create mode 100644 libsession/src/main/java/org/session/libsession/messaging/jobs/JobData.kt diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/database/SessionJobDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/database/SessionJobDatabase.kt new file mode 100644 index 0000000000..072e694fac --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/database/SessionJobDatabase.kt @@ -0,0 +1,4 @@ +package org.thoughtcrime.securesms.loki.database + +class SessionJobDatabase { +} \ No newline at end of file diff --git a/libsession/build.gradle b/libsession/build.gradle index 67160f80ab..cb7d54107c 100644 --- a/libsession/build.gradle +++ b/libsession/build.gradle @@ -53,6 +53,7 @@ dependencies { implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1' implementation 'com.annimon:stream:1.1.8' implementation 'com.makeramen:roundedimageview:2.1.0' + implementation 'com.esotericsoftware:kryo:4.0.1' // from libsignal: implementation "com.google.protobuf:protobuf-java:$protobufVersion" diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt index 6289fcbf9c..cdce348b3d 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt @@ -16,6 +16,8 @@ class AttachmentDownloadJob(val attachmentID: Long, val tsIncomingMessageID: Lon private val MAX_ATTACHMENT_SIZE = 10 * 1024 * 1024 + + // Error internal sealed class Error(val description: String) : Exception() { object NoAttachment : Error("No such attachment.") @@ -25,6 +27,10 @@ class AttachmentDownloadJob(val attachmentID: Long, val tsIncomingMessageID: Lon override val maxFailureCount: Int = 20 companion object { val collection: String = "AttachmentDownloadJobCollection" + + //keys used for database storage purpose + private val KEY_ATTACHMENT_ID = "attachment_id" + private val KEY_TS_INCOMING_MESSAGE_ID = "tsIncoming_message_id" } override fun execute() { @@ -81,4 +87,21 @@ class AttachmentDownloadJob(val attachmentID: Long, val tsIncomingMessageID: Lon file.deleteOnExit() return file } + + //database functions + + override fun serialize(): JobData { + val builder = this.createJobDataBuilder() + return builder.putLong(KEY_ATTACHMENT_ID, attachmentID) + .putLong(KEY_TS_INCOMING_MESSAGE_ID, tsIncomingMessageID) + .build(); + } + + class Factory: Job.Factory { + override fun create(data: JobData): AttachmentDownloadJob { + val job = AttachmentDownloadJob(data.getLong(KEY_ATTACHMENT_ID), data.getLong(KEY_TS_INCOMING_MESSAGE_ID)) + job.initJob(data) + return job + } + } } \ No newline at end of file diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentUploadJob.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentUploadJob.kt index 1088c91461..1545736867 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentUploadJob.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentUploadJob.kt @@ -1,5 +1,8 @@ package org.session.libsession.messaging.jobs +import com.esotericsoftware.kryo.Kryo +import com.esotericsoftware.kryo.io.Input +import com.esotericsoftware.kryo.io.Output import org.session.libsession.messaging.MessagingConfiguration import org.session.libsession.messaging.fileserver.FileServerAPI import org.session.libsession.messaging.messages.Message @@ -29,6 +32,12 @@ class AttachmentUploadJob(val attachmentID: Long, val threadID: String, val mess val collection: String = "AttachmentUploadJobCollection" val maxFailureCount: Int = 20 + + //keys used for database storage purpose + private val KEY_ATTACHMENT_ID = "attachment_id" + private val KEY_THREAD_ID = "thread_id" + private val KEY_MESSAGE = "message" + private val KEY_MESSAGE_SEND_JOB_ID = "message_send_job_id" } override fun execute() { @@ -91,4 +100,36 @@ class AttachmentUploadJob(val attachmentID: Long, val threadID: String, val mess storage.markJobAsFailed(messageSendJob) } } + + //database functions + + override fun serialize(): JobData { + val builder = this.createJobDataBuilder() + //serialize Message property + val kryo = Kryo() + kryo.isRegistrationRequired = false + val serializedMessage = ByteArray(4096) + val output = Output(serializedMessage) + kryo.writeObject(output, message) + output.close() + return builder.putLong(KEY_ATTACHMENT_ID, attachmentID) + .putString(KEY_THREAD_ID, threadID) + .putByteArray(KEY_MESSAGE, serializedMessage) + .putString(KEY_MESSAGE_SEND_JOB_ID, messageSendJobID) + .build(); + } + + class Factory: Job.Factory { + override fun create(data: JobData): AttachmentUploadJob { + val serializedMessage = data.getByteArray(KEY_MESSAGE) + //deserialize Message property + val kryo = Kryo() + val input = Input(serializedMessage) + val message: Message = kryo.readObject(input, Message::class.java) + input.close() + val job = AttachmentUploadJob(data.getLong(KEY_ATTACHMENT_ID), data.getString(KEY_THREAD_ID)!!, message, data.getString(KEY_MESSAGE_SEND_JOB_ID)!!) + job.initJob(data) + return job + } + } } \ No newline at end of file diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/Job.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/Job.kt index c3108835cf..7e2ae3985c 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/Job.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/Job.kt @@ -7,5 +7,29 @@ interface Job { val maxFailureCount: Int + companion object { + //keys used for database storage purpose + private val KEY_ID = "id" + private val KEY_FAILURE_COUNT = "failure_count" + } + fun execute() + + //database functions + + fun serialize(): JobData + + fun initJob(data: JobData) { + id = data.getString(KEY_ID) + failureCount = data.getInt(KEY_FAILURE_COUNT) + } + + fun createJobDataBuilder(): JobData.Builder { + return JobData.Builder().putString(KEY_ID, id) + .putInt(KEY_FAILURE_COUNT, failureCount) + } + + interface Factory { + fun create(data: JobData): T + } } \ No newline at end of file diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/JobData.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/JobData.kt new file mode 100644 index 0000000000..a6f10372a5 --- /dev/null +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/JobData.kt @@ -0,0 +1,351 @@ +package org.session.libsession.messaging.jobs + +import com.fasterxml.jackson.annotation.JsonProperty +import java.util.* + +class JobData { + + val EMPTY: JobData = Builder().build() + + @JsonProperty + private var strings: Map + + @JsonProperty + private var stringArrays: Map> + + @JsonProperty + private var integers: Map + + @JsonProperty + private var integerArrays: Map + + @JsonProperty + private var longs: Map + + @JsonProperty + private var longArrays: Map + + @JsonProperty + private var floats: Map + + @JsonProperty + private var floatArrays: Map + + @JsonProperty + private var doubles: Map + + @JsonProperty + private var doubleArrays: Map + + @JsonProperty + private var booleans: Map + + @JsonProperty + private var booleanArrays: Map + + @JsonProperty + private var byteArrays: Map + + constructor(@JsonProperty("strings") strings: MutableMap, + @JsonProperty("stringArrays") stringArrays: Map>, + @JsonProperty("integers") integers: Map, + @JsonProperty("integerArrays") integerArrays: Map, + @JsonProperty("longs") longs: Map, + @JsonProperty("longArrays") longArrays: Map, + @JsonProperty("floats") floats: Map, + @JsonProperty("floatArrays") floatArrays: Map, + @JsonProperty("doubles") doubles: Map, + @JsonProperty("doubleArrays") doubleArrays: Map, + @JsonProperty("booleans") booleans: Map, + @JsonProperty("booleanArrays") booleanArrays: Map, + @JsonProperty("byteArrays") byteArrays: Map) { + this.strings = strings + this.stringArrays = stringArrays + this.integers = integers + this.integerArrays = integerArrays + this.longs = longs + this.longArrays = longArrays + this.floats = floats + this.floatArrays = floatArrays + this.doubles = doubles + this.doubleArrays = doubleArrays + this.booleans = booleans + this.booleanArrays = booleanArrays + this.byteArrays = byteArrays + } + + fun hasString(key: String): Boolean { + return strings.containsKey(key) + } + + fun getString(key: String): String { + throwIfAbsent(strings, key) + return strings[key]!! + } + + fun getStringOrDefault(key: String, defaultValue: String?): String? { + return if (hasString(key)) getString(key) else defaultValue + } + + + fun hasStringArray(key: String): Boolean { + return stringArrays.containsKey(key) + } + + fun getStringArray(key: String): Array? { + throwIfAbsent(stringArrays, key) + return stringArrays[key] + } + + + fun hasInt(key: String): Boolean { + return integers.containsKey(key) + } + + fun getInt(key: String): Int { + throwIfAbsent(integers, key) + return integers[key]!! + } + + fun getIntOrDefault(key: String, defaultValue: Int): Int { + return if (hasInt(key)) getInt(key) else defaultValue + } + + + fun hasIntegerArray(key: String): Boolean { + return integerArrays.containsKey(key) + } + + fun getIntegerArray(key: String): IntArray? { + throwIfAbsent(integerArrays, key) + return integerArrays[key] + } + + + fun hasLong(key: String): Boolean { + return longs.containsKey(key) + } + + fun getLong(key: String): Long { + throwIfAbsent(longs, key) + return longs[key]!! + } + + fun getLongOrDefault(key: String, defaultValue: Long): Long { + return if (hasLong(key)) getLong(key) else defaultValue + } + + + fun hasLongArray(key: String): Boolean { + return longArrays.containsKey(key) + } + + fun getLongArray(key: String): LongArray? { + throwIfAbsent(longArrays, key) + return longArrays[key] + } + + + fun hasFloat(key: String): Boolean { + return floats.containsKey(key) + } + + fun getFloat(key: String): Float { + throwIfAbsent(floats, key) + return floats[key]!! + } + + fun getFloatOrDefault(key: String, defaultValue: Float): Float { + return if (hasFloat(key)) getFloat(key) else defaultValue + } + + + fun hasFloatArray(key: String): Boolean { + return floatArrays.containsKey(key) + } + + fun getFloatArray(key: String): FloatArray? { + throwIfAbsent(floatArrays, key) + return floatArrays[key] + } + + + fun hasDouble(key: String): Boolean { + return doubles.containsKey(key) + } + + fun getDouble(key: String): Double { + throwIfAbsent(doubles, key) + return doubles[key]!! + } + + fun getDoubleOrDefault(key: String, defaultValue: Double): Double { + return if (hasDouble(key)) getDouble(key) else defaultValue + } + + + fun hasDoubleArray(key: String): Boolean { + return floatArrays.containsKey(key) + } + + fun getDoubleArray(key: String): DoubleArray? { + throwIfAbsent(doubleArrays, key) + return doubleArrays[key] + } + + + fun hasBoolean(key: String): Boolean { + return booleans.containsKey(key) + } + + fun getBoolean(key: String): Boolean { + throwIfAbsent(booleans, key) + return booleans[key]!! + } + + fun getBooleanOrDefault(key: String, defaultValue: Boolean): Boolean { + return if (hasBoolean(key)) getBoolean(key) else defaultValue + } + + + fun hasBooleanArray(key: String): Boolean { + return booleanArrays.containsKey(key) + } + + fun getBooleanArray(key: String): BooleanArray? { + throwIfAbsent(booleanArrays, key) + return booleanArrays[key] + } + + fun hasByteArray(key: String): Boolean { + return byteArrays.containsKey(key) + } + + fun getByteArray(key: String): ByteArray { + throwIfAbsent(byteArrays, key) + return byteArrays[key]!! + } + + fun hasParcelable(key: String): Boolean { + return byteArrays!!.containsKey(key) + } + + /*fun getParcelable(key: String, creator: Parcelable.Creator): T { + throwIfAbsent(byteArrays!!, key) + val bytes = byteArrays[key] + return ParcelableUtil.unmarshall(bytes, creator) + }*/ + + private fun throwIfAbsent(map: Map<*, *>, key: String) { + check(map.containsKey(key)) { "Tried to retrieve a value with key '$key', but it wasn't present." } + } + + + class Builder { + private val strings: MutableMap = HashMap() + private val stringArrays: MutableMap> = HashMap() + private val integers: MutableMap = HashMap() + private val integerArrays: MutableMap = HashMap() + private val longs: MutableMap = HashMap() + private val longArrays: MutableMap = HashMap() + private val floats: MutableMap = HashMap() + private val floatArrays: MutableMap = HashMap() + private val doubles: MutableMap = HashMap() + private val doubleArrays: MutableMap = HashMap() + private val booleans: MutableMap = HashMap() + private val booleanArrays: MutableMap = HashMap() + private val byteArrays: MutableMap = HashMap() + fun putString(key: String, value: String?): Builder { + value?.let { strings[key] = value } + return this + } + + fun putStringArray(key: String, value: Array): Builder { + stringArrays[key] = value + return this + } + + fun putInt(key: String, value: Int): Builder { + integers[key] = value + return this + } + + fun putIntArray(key: String, value: IntArray): Builder { + integerArrays[key] = value + return this + } + + fun putLong(key: String, value: Long): Builder { + longs[key] = value + return this + } + + fun putLongArray(key: String, value: LongArray): Builder { + longArrays[key] = value + return this + } + + fun putFloat(key: String, value: Float): Builder { + floats[key] = value + return this + } + + fun putFloatArray(key: String, value: FloatArray): Builder { + floatArrays[key] = value + return this + } + + fun putDouble(key: String, value: Double): Builder { + doubles[key] = value + return this + } + + fun putDoubleArray(key: String, value: DoubleArray): Builder { + doubleArrays[key] = value + return this + } + + fun putBoolean(key: String, value: Boolean): Builder { + booleans[key] = value + return this + } + + fun putBooleanArray(key: String, value: BooleanArray): Builder { + booleanArrays[key] = value + return this + } + + fun putByteArray(key: String, value: ByteArray): Builder { + byteArrays[key] = value + return this + } + + /*fun putParcelable(key: String, value: Parcelable): Builder { + val bytes: ByteArray = ParcelableUtil.marshall(value) + byteArrays[key] = bytes + return this + }*/ + + fun build(): JobData { + return JobData(strings, + stringArrays, + integers, + integerArrays, + longs, + longArrays, + floats, + floatArrays, + doubles, + doubleArrays, + booleans, + booleanArrays, + byteArrays) + } + } + + interface Serializer { + fun serialize(data: JobData): String + fun deserialize(serialized: String): JobData + } + +} \ No newline at end of file diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageReceiveJob.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageReceiveJob.kt index e5c3a4d23a..6a693945eb 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageReceiveJob.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageReceiveJob.kt @@ -18,6 +18,12 @@ class MessageReceiveJob(val data: ByteArray, val isBackgroundPoll: Boolean, val val TAG = MessageReceiveJob::class.qualifiedName val collection: String = "MessageReceiveJobCollection" + + //keys used for database storage purpose + private val KEY_DATA = "data" + private val KEY_IS_BACKGROUND_POLL = "is_background_poll" + private val KEY_OPEN_GROUP_MESSAGE_SERVER_ID = "openGroupMessageServerID" + private val KEY_OPEN_GROUP_ID = "open_group_id" } override fun execute() { @@ -54,4 +60,24 @@ class MessageReceiveJob(val data: ByteArray, val isBackgroundPoll: Boolean, val private fun handleFailure(e: Exception) { delegate?.handleJobFailed(this, e) } + + //database functions + + override fun serialize(): JobData { + val builder = this.createJobDataBuilder() + builder.putByteArray(KEY_DATA, data) + .putBoolean(KEY_IS_BACKGROUND_POLL, isBackgroundPoll) + openGroupMessageServerID?.let { builder.putLong(KEY_OPEN_GROUP_MESSAGE_SERVER_ID, openGroupMessageServerID) } + openGroupID?.let { builder.putString(KEY_OPEN_GROUP_ID, openGroupID) } + + return builder.build(); + } + + class Factory: Job.Factory { + override fun create(data: JobData): MessageReceiveJob { + val job = MessageReceiveJob(data.getByteArray(KEY_DATA), data.getBoolean(KEY_IS_BACKGROUND_POLL), data.getLong(KEY_OPEN_GROUP_MESSAGE_SERVER_ID), data.getString(KEY_OPEN_GROUP_ID)) + job.initJob(data) + return job + } + } } \ No newline at end of file diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageSendJob.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageSendJob.kt index a8e88c8702..219b882c8b 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageSendJob.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageSendJob.kt @@ -1,12 +1,14 @@ package org.session.libsession.messaging.jobs +import com.esotericsoftware.kryo.Kryo +import com.esotericsoftware.kryo.io.Input +import com.esotericsoftware.kryo.io.Output import org.session.libsession.messaging.MessagingConfiguration import org.session.libsession.messaging.messages.Destination import org.session.libsession.messaging.messages.Message import org.session.libsession.messaging.messages.visible.VisibleMessage import org.session.libsession.messaging.sending_receiving.MessageSender import org.session.libsignal.libsignal.logging.Log -import org.session.libsignal.service.internal.push.SignalServiceProtos class MessageSendJob(val message: Message, val destination: Destination) : Job { @@ -20,6 +22,10 @@ class MessageSendJob(val message: Message, val destination: Destination) : Job { val TAG = MessageSendJob::class.qualifiedName val collection: String = "MessageSendJobCollection" + + //keys used for database storage purpose + private val KEY_MESSAGE = "message" + private val KEY_DESTINATION = "destination" } override fun execute() { @@ -67,4 +73,42 @@ class MessageSendJob(val message: Message, val destination: Destination) : Job { } delegate?.handleJobFailed(this, error) } + + //database functions + + override fun serialize(): JobData { + val builder = this.createJobDataBuilder() + //serialize Message and Destination properties + val kryo = Kryo() + kryo.isRegistrationRequired = false + val serializedMessage = ByteArray(4096) + val serializedDestination = ByteArray(4096) + var output = Output(serializedMessage) + kryo.writeObject(output, message) + output.close() + output = Output(serializedDestination) + kryo.writeObject(output, destination) + output.close() + return builder.putByteArray(KEY_MESSAGE, serializedMessage) + .putByteArray(KEY_DESTINATION, serializedDestination) + .build(); + } + + class Factory: Job.Factory { + override fun create(data: JobData): MessageSendJob { + val serializedMessage = data.getByteArray(KEY_MESSAGE) + val serializedDestination = data.getByteArray(KEY_DESTINATION) + //deserialize Message and Destination properties + val kryo = Kryo() + var input = Input(serializedMessage) + val message: Message = kryo.readObject(input, Message::class.java) + input.close() + input = Input(serializedDestination) + val destination: Destination = kryo.readObject(input, Destination::class.java) + input.close() + val job = MessageSendJob(message, destination) + job.initJob(data) + return job + } + } } \ No newline at end of file diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/NotifyPNServerJob.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/NotifyPNServerJob.kt index b9221efcf5..df5c409b1e 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/NotifyPNServerJob.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/NotifyPNServerJob.kt @@ -1,5 +1,8 @@ package org.session.libsession.messaging.jobs +import com.esotericsoftware.kryo.Kryo +import com.esotericsoftware.kryo.io.Input +import com.esotericsoftware.kryo.io.Output import nl.komponents.kovenant.functional.map import okhttp3.MediaType import okhttp3.Request @@ -22,6 +25,9 @@ class NotifyPNServerJob(val message: SnodeMessage) : Job { override val maxFailureCount: Int = 20 companion object { val collection: String = "NotifyPNServerJobCollection" + + //keys used for database storage purpose + private val KEY_MESSAGE = "message" } // Running @@ -54,4 +60,33 @@ class NotifyPNServerJob(val message: SnodeMessage) : Job { private fun handleFailure(error: Exception) { delegate?.handleJobFailed(this, error) } + + //database functions + + override fun serialize(): JobData { + val builder = this.createJobDataBuilder() + //serialize SnodeMessage property + val kryo = Kryo() + kryo.isRegistrationRequired = false + val serializedMessage = ByteArray(4096) + val output = Output(serializedMessage) + kryo.writeObject(output, message) + output.close() + return builder.putByteArray(KEY_MESSAGE, serializedMessage) + .build(); + } + + class Factory: Job.Factory { + override fun create(data: JobData): NotifyPNServerJob { + val serializedMessage = data.getByteArray(KEY_MESSAGE) + //deserialize SnodeMessage property + val kryo = Kryo() + val input = Input(serializedMessage) + val message: SnodeMessage = kryo.readObject(input, SnodeMessage::class.java) + input.close() + val job = NotifyPNServerJob(message) + job.initJob(data) + return job + } + } } \ No newline at end of file From 787a635d0a4b269e9ace8dd6f3a9ef5ce4eb6ade Mon Sep 17 00:00:00 2001 From: Brice Date: Fri, 22 Jan 2021 15:16:50 +1100 Subject: [PATCH 2/3] Data & ParcelableUtil classes moved to libsession --- .../securesms/jobmanager/Data.java | 347 ----------------- .../securesms/jobmanager/Job.java | 1 + .../securesms/jobmanager/JobController.java | 1 + .../securesms/jobmanager/JobInstantiator.java | 2 + .../securesms/jobmanager/JobManager.java | 1 + .../jobmanager/impl/JsonDataSerializer.java | 2 +- .../jobmanager/migration/DataMigrator.java | 2 +- .../securesms/jobs/AttachmentDownloadJob.java | 5 +- .../securesms/jobs/AttachmentUploadJob.java | 7 +- .../securesms/jobs/AvatarDownloadJob.java | 2 +- .../securesms/jobs/LocalBackupJob.java | 5 +- .../securesms/jobs/MmsDownloadJob.java | 5 +- .../securesms/jobs/MmsReceiveJob.java | 5 +- .../securesms/jobs/MmsSendJob.java | 5 +- .../securesms/jobs/PushContentReceiveJob.java | 5 +- .../securesms/jobs/PushDecryptJob.java | 5 +- .../securesms/jobs/PushGroupSendJob.java | 7 +- .../securesms/jobs/PushGroupUpdateJob.java | 7 +- .../securesms/jobs/PushMediaSendJob.java | 5 +- .../jobs/PushNotificationReceiveJob.java | 5 +- .../securesms/jobs/PushTextSendJob.java | 6 +- .../securesms/jobs/RequestGroupInfoJob.java | 5 +- .../jobs/RetrieveProfileAvatarJob.java | 5 +- .../jobs/SendDeliveryReceiptJob.java | 5 +- .../securesms/jobs/SendReadReceiptJob.java | 5 +- .../securesms/jobs/SmsReceiveJob.java | 5 +- .../securesms/jobs/SmsSendJob.java | 7 +- .../securesms/jobs/SmsSentJob.java | 5 +- .../securesms/jobs/StickerDownloadJob.java | 5 +- .../jobs/StickerPackDownloadJob.java | 5 +- .../securesms/jobs/TrimThreadJob.java | 5 +- .../securesms/jobs/TypingSendJob.java | 5 +- .../securesms/jobs/UpdateApkJob.java | 5 +- .../api/PrepareAttachmentAudioExtrasJob.kt | 2 +- .../loki/api/ResetThreadSessionJob.kt | 2 +- .../ClosedGroupUpdateMessageSendJob.kt | 2 +- .../ClosedGroupUpdateMessageSendJobV2.kt | 2 +- .../loki/protocol/NullMessageSendJob.kt | 2 +- .../messaging/jobs/AttachmentDownloadJob.kt | 2 - .../libsession/messaging/jobs/Data.java | 348 ++++++++++++++++++ .../libsession/utilities}/ParcelableUtil.kt | 3 +- 41 files changed, 442 insertions(+), 413 deletions(-) delete mode 100644 app/src/main/java/org/thoughtcrime/securesms/jobmanager/Data.java create mode 100644 libsession/src/main/java/org/session/libsession/messaging/jobs/Data.java rename {app/src/main/java/org/thoughtcrime/securesms/util => libsession/src/main/java/org/session/libsession/utilities}/ParcelableUtil.kt (95%) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Data.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Data.java deleted file mode 100644 index eff9fa1478..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Data.java +++ /dev/null @@ -1,347 +0,0 @@ -package org.thoughtcrime.securesms.jobmanager; - -import android.os.Parcelable; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.fasterxml.jackson.annotation.JsonProperty; - -import org.thoughtcrime.securesms.util.ParcelableUtil; - -import java.util.HashMap; -import java.util.Map; - -// TODO AC: For now parcelable objects utilize byteArrays field to store their data into. -// Introduce a dedicated Map field specifically for parcelable needs. -public class Data { - - public static final Data EMPTY = new Data.Builder().build(); - - @JsonProperty private final Map strings; - @JsonProperty private final Map stringArrays; - @JsonProperty private final Map integers; - @JsonProperty private final Map integerArrays; - @JsonProperty private final Map longs; - @JsonProperty private final Map longArrays; - @JsonProperty private final Map floats; - @JsonProperty private final Map floatArrays; - @JsonProperty private final Map doubles; - @JsonProperty private final Map doubleArrays; - @JsonProperty private final Map booleans; - @JsonProperty private final Map booleanArrays; - @JsonProperty private final Map byteArrays; - - public Data(@JsonProperty("strings") @NonNull Map strings, - @JsonProperty("stringArrays") @NonNull Map stringArrays, - @JsonProperty("integers") @NonNull Map integers, - @JsonProperty("integerArrays") @NonNull Map integerArrays, - @JsonProperty("longs") @NonNull Map longs, - @JsonProperty("longArrays") @NonNull Map longArrays, - @JsonProperty("floats") @NonNull Map floats, - @JsonProperty("floatArrays") @NonNull Map floatArrays, - @JsonProperty("doubles") @NonNull Map doubles, - @JsonProperty("doubleArrays") @NonNull Map doubleArrays, - @JsonProperty("booleans") @NonNull Map booleans, - @JsonProperty("booleanArrays") @NonNull Map booleanArrays, - @JsonProperty("byteArrays") @NonNull Map byteArrays) - { - this.strings = strings; - this.stringArrays = stringArrays; - this.integers = integers; - this.integerArrays = integerArrays; - this.longs = longs; - this.longArrays = longArrays; - this.floats = floats; - this.floatArrays = floatArrays; - this.doubles = doubles; - this.doubleArrays = doubleArrays; - this.booleans = booleans; - this.booleanArrays = booleanArrays; - this.byteArrays = byteArrays; - } - - public boolean hasString(@NonNull String key) { - return strings.containsKey(key); - } - - public String getString(@NonNull String key) { - throwIfAbsent(strings, key); - return strings.get(key); - } - - public String getStringOrDefault(@NonNull String key, String defaultValue) { - if (hasString(key)) return getString(key); - else return defaultValue; - } - - - public boolean hasStringArray(@NonNull String key) { - return stringArrays.containsKey(key); - } - - public String[] getStringArray(@NonNull String key) { - throwIfAbsent(stringArrays, key); - return stringArrays.get(key); - } - - - public boolean hasInt(@NonNull String key) { - return integers.containsKey(key); - } - - public int getInt(@NonNull String key) { - throwIfAbsent(integers, key); - return integers.get(key); - } - - public int getIntOrDefault(@NonNull String key, int defaultValue) { - if (hasInt(key)) return getInt(key); - else return defaultValue; - } - - - public boolean hasIntegerArray(@NonNull String key) { - return integerArrays.containsKey(key); - } - - public int[] getIntegerArray(@NonNull String key) { - throwIfAbsent(integerArrays, key); - return integerArrays.get(key); - } - - - public boolean hasLong(@NonNull String key) { - return longs.containsKey(key); - } - - public long getLong(@NonNull String key) { - throwIfAbsent(longs, key); - return longs.get(key); - } - - public long getLongOrDefault(@NonNull String key, long defaultValue) { - if (hasLong(key)) return getLong(key); - else return defaultValue; - } - - - public boolean hasLongArray(@NonNull String key) { - return longArrays.containsKey(key); - } - - public long[] getLongArray(@NonNull String key) { - throwIfAbsent(longArrays, key); - return longArrays.get(key); - } - - - public boolean hasFloat(@NonNull String key) { - return floats.containsKey(key); - } - - public float getFloat(@NonNull String key) { - throwIfAbsent(floats, key); - return floats.get(key); - } - - public float getFloatOrDefault(@NonNull String key, float defaultValue) { - if (hasFloat(key)) return getFloat(key); - else return defaultValue; - } - - - public boolean hasFloatArray(@NonNull String key) { - return floatArrays.containsKey(key); - } - - public float[] getFloatArray(@NonNull String key) { - throwIfAbsent(floatArrays, key); - return floatArrays.get(key); - } - - - public boolean hasDouble(@NonNull String key) { - return doubles.containsKey(key); - } - - public double getDouble(@NonNull String key) { - throwIfAbsent(doubles, key); - return doubles.get(key); - } - - public double getDoubleOrDefault(@NonNull String key, double defaultValue) { - if (hasDouble(key)) return getDouble(key); - else return defaultValue; - } - - - public boolean hasDoubleArray(@NonNull String key) { - return floatArrays.containsKey(key); - } - - public double[] getDoubleArray(@NonNull String key) { - throwIfAbsent(doubleArrays, key); - return doubleArrays.get(key); - } - - - public boolean hasBoolean(@NonNull String key) { - return booleans.containsKey(key); - } - - public boolean getBoolean(@NonNull String key) { - throwIfAbsent(booleans, key); - return booleans.get(key); - } - - public boolean getBooleanOrDefault(@NonNull String key, boolean defaultValue) { - if (hasBoolean(key)) return getBoolean(key); - else return defaultValue; - } - - - public boolean hasBooleanArray(@NonNull String key) { - return booleanArrays.containsKey(key); - } - - public boolean[] getBooleanArray(@NonNull String key) { - throwIfAbsent(booleanArrays, key); - return booleanArrays.get(key); - } - - public boolean hasByteArray(@NonNull String key) { - return byteArrays.containsKey(key); - } - - public byte[] getByteArray(@NonNull String key) { - throwIfAbsent(byteArrays, key); - return byteArrays.get(key); - } - - public boolean hasParcelable(@NonNull String key) { - return byteArrays.containsKey(key); - } - - public T getParcelable(@NonNull String key, @NonNull Parcelable.Creator creator) { - throwIfAbsent(byteArrays, key); - byte[] bytes = byteArrays.get(key); - return ParcelableUtil.unmarshall(bytes, creator); - } - - private void throwIfAbsent(@NonNull Map map, @NonNull String key) { - if (!map.containsKey(key)) { - throw new IllegalStateException("Tried to retrieve a value with key '" + key + "', but it wasn't present."); - } - } - - - public static class Builder { - - private final Map strings = new HashMap<>(); - private final Map stringArrays = new HashMap<>(); - private final Map integers = new HashMap<>(); - private final Map integerArrays = new HashMap<>(); - private final Map longs = new HashMap<>(); - private final Map longArrays = new HashMap<>(); - private final Map floats = new HashMap<>(); - private final Map floatArrays = new HashMap<>(); - private final Map doubles = new HashMap<>(); - private final Map doubleArrays = new HashMap<>(); - private final Map booleans = new HashMap<>(); - private final Map booleanArrays = new HashMap<>(); - private final Map byteArrays = new HashMap<>(); - - public Builder putString(@NonNull String key, @Nullable String value) { - strings.put(key, value); - return this; - } - - public Builder putStringArray(@NonNull String key, @NonNull String[] value) { - stringArrays.put(key, value); - return this; - } - - public Builder putInt(@NonNull String key, int value) { - integers.put(key, value); - return this; - } - - public Builder putIntArray(@NonNull String key, @NonNull int[] value) { - integerArrays.put(key, value); - return this; - } - - public Builder putLong(@NonNull String key, long value) { - longs.put(key, value); - return this; - } - - public Builder putLongArray(@NonNull String key, @NonNull long[] value) { - longArrays.put(key, value); - return this; - } - - public Builder putFloat(@NonNull String key, float value) { - floats.put(key, value); - return this; - } - - public Builder putFloatArray(@NonNull String key, @NonNull float[] value) { - floatArrays.put(key, value); - return this; - } - - public Builder putDouble(@NonNull String key, double value) { - doubles.put(key, value); - return this; - } - - public Builder putDoubleArray(@NonNull String key, @NonNull double[] value) { - doubleArrays.put(key, value); - return this; - } - - public Builder putBoolean(@NonNull String key, boolean value) { - booleans.put(key, value); - return this; - } - - public Builder putBooleanArray(@NonNull String key, @NonNull boolean[] value) { - booleanArrays.put(key, value); - return this; - } - - public Builder putByteArray(@NonNull String key, @NonNull byte[] value) { - byteArrays.put(key, value); - return this; - } - - public Builder putParcelable(@NonNull String key, @NonNull Parcelable value) { - byte[] bytes = ParcelableUtil.marshall(value); - byteArrays.put(key, bytes); - return this; - } - - public Data build() { - return new Data(strings, - stringArrays, - integers, - integerArrays, - longs, - longArrays, - floats, - floatArrays, - doubles, - doubleArrays, - booleans, - booleanArrays, - byteArrays); - } - } - - public interface Serializer { - @NonNull String serialize(@NonNull Data data); - @NonNull Data deserialize(@NonNull String serialized); - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Job.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Job.java index b926972f7f..098a9901ae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Job.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Job.java @@ -5,6 +5,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.logging.Log; import java.util.LinkedList; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobController.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobController.java index 6294e3725e..27c5edf2f4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobController.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobController.java @@ -7,6 +7,7 @@ import androidx.annotation.WorkerThread; import com.annimon.stream.Stream; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.jobmanager.persistence.ConstraintSpec; import org.thoughtcrime.securesms.jobmanager.persistence.DependencySpec; import org.thoughtcrime.securesms.jobmanager.persistence.FullSpec; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobInstantiator.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobInstantiator.java index 37cba5e422..c50e1dc207 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobInstantiator.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobInstantiator.java @@ -2,6 +2,8 @@ package org.thoughtcrime.securesms.jobmanager; import androidx.annotation.NonNull; +import org.session.libsession.messaging.jobs.Data; + import java.util.HashMap; import java.util.Map; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobManager.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobManager.java index dce43d6aff..d61467cdf6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobManager.java @@ -5,6 +5,7 @@ import android.content.Intent; import android.os.Build; import androidx.annotation.NonNull; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.jobmanager.impl.DefaultExecutorFactory; import org.thoughtcrime.securesms.jobmanager.impl.JsonDataSerializer; import org.thoughtcrime.securesms.jobmanager.persistence.JobStorage; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/JsonDataSerializer.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/JsonDataSerializer.java index 9de84c4fd2..969094483a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/JsonDataSerializer.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/JsonDataSerializer.java @@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.jobmanager.impl; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.logging.Log; import org.session.libsession.utilities.JsonUtils; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migration/DataMigrator.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migration/DataMigrator.java index 6d3d270998..bbe31c9395 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migration/DataMigrator.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migration/DataMigrator.java @@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.jobmanager.migration; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.logging.Log; import java.io.ByteArrayInputStream; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java index 7d5096a83b..42f2444d1a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java @@ -6,6 +6,7 @@ import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import org.greenrobot.eventbus.EventBus; +import org.session.libsession.messaging.jobs.Data; import org.session.libsignal.libsignal.InvalidMessageException; import org.session.libsignal.libsignal.util.guava.Optional; import org.session.libsignal.service.api.crypto.AttachmentCipherInputStream; @@ -21,7 +22,6 @@ import org.thoughtcrime.securesms.database.AttachmentDatabase; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.dependencies.InjectableType; import org.thoughtcrime.securesms.events.PartProgressEvent; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.logging.Log; @@ -75,7 +75,8 @@ public class AttachmentDownloadJob extends BaseJob implements InjectableType { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId) .putLong(KEY_PART_ROW_ID, partRowId) .putLong(KEY_PAR_UNIQUE_ID, partUniqueId) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java index 6d5aba806e..c14db2d9b1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; import org.greenrobot.eventbus.EventBus; +import org.session.libsession.messaging.jobs.Data; import org.session.libsession.messaging.sending_receiving.attachments.Attachment; import org.session.libsession.messaging.sending_receiving.attachments.AttachmentId; import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachment; @@ -12,7 +13,6 @@ import org.thoughtcrime.securesms.database.AttachmentDatabase; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.dependencies.InjectableType; import org.thoughtcrime.securesms.events.PartProgressEvent; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.logging.Log; @@ -65,7 +65,8 @@ public class AttachmentUploadJob extends BaseJob implements InjectableType { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder().putLong(KEY_ROW_ID, attachmentId.getRowId()) .putLong(KEY_UNIQUE_ID, attachmentId.getUniqueId()) .putString(KEY_DESTINATION, destination.serialize()) @@ -161,7 +162,7 @@ public class AttachmentUploadJob extends BaseJob implements InjectableType { public static final class Factory implements Job.Factory { @Override - public @NonNull AttachmentUploadJob create(@NonNull Parameters parameters, @NonNull org.thoughtcrime.securesms.jobmanager.Data data) { + public @NonNull AttachmentUploadJob create(@NonNull Parameters parameters, @NonNull Data data) { return new AttachmentUploadJob(parameters, new AttachmentId(data.getLong(KEY_ROW_ID), data.getLong(KEY_UNIQUE_ID)), Address.Companion.fromSerialized(data.getString(KEY_DESTINATION))); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarDownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarDownloadJob.java index b0f9365b37..1262586f64 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarDownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarDownloadJob.java @@ -3,11 +3,11 @@ package org.thoughtcrime.securesms.jobs; import android.graphics.Bitmap; import androidx.annotation.NonNull; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.GroupDatabase; import org.session.libsession.messaging.threads.GroupRecord; import org.thoughtcrime.securesms.dependencies.InjectableType; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.logging.Log; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/LocalBackupJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/LocalBackupJob.java index 604a2f1548..3f73abcbe4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/LocalBackupJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/LocalBackupJob.java @@ -2,8 +2,8 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.database.NoExternalStorageException; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.loki.database.BackupFileRecord; @@ -35,7 +35,8 @@ public class LocalBackupJob extends BaseJob { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return Data.EMPTY; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java index 3c714a1978..b3dafc111d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java @@ -10,12 +10,12 @@ import com.google.android.mms.pdu_alt.PduBody; import com.google.android.mms.pdu_alt.PduPart; import com.google.android.mms.pdu_alt.RetrieveConf; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.ApplicationContext; import org.thoughtcrime.securesms.database.AttachmentDatabase; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.MessagingDatabase.InsertResult; import org.thoughtcrime.securesms.database.MmsDatabase; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.mms.ApnUnavailableException; @@ -82,7 +82,8 @@ public class MmsDownloadJob extends BaseJob { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId) .putLong(KEY_THREAD_ID, threadId) .putBoolean(KEY_AUTOMATIC, automatic) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java index 5fcba6546b..bf7f5c4756 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java @@ -1,6 +1,6 @@ package org.thoughtcrime.securesms.jobs; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.logging.Log; @@ -46,7 +46,8 @@ public class MmsReceiveJob extends BaseJob { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder().putString(KEY_DATA, Base64.encodeBytes(data)) .putInt(KEY_SUBSCRIPTION_ID, subscriptionId) .build(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java index 9251ce68da..cab50e3603 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java @@ -19,6 +19,7 @@ import com.google.android.mms.pdu_alt.SendReq; import com.google.android.mms.smil.SmilHelper; import com.klinker.android.send_message.Utils; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.ApplicationContext; import org.session.libsession.messaging.sending_receiving.attachments.Attachment; import org.session.libsession.messaging.threads.Address; @@ -26,7 +27,6 @@ import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.MmsDatabase; import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.ThreadDatabase; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.logging.Log; @@ -74,7 +74,8 @@ public class MmsSendJob extends SendJob { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId).build(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushContentReceiveJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushContentReceiveJob.java index 3032093e49..bd60efbbe8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushContentReceiveJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushContentReceiveJob.java @@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.jobs; import android.content.Context; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.jobmanager.Job; public class PushContentReceiveJob extends PushReceivedJob { @@ -20,7 +20,8 @@ public class PushContentReceiveJob extends PushReceivedJob { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return Data.EMPTY; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptJob.java index 0ae4c9ce57..f4dc492edf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptJob.java @@ -14,6 +14,7 @@ import androidx.core.app.NotificationManagerCompat; import com.annimon.stream.Collectors; import com.annimon.stream.Stream; +import org.session.libsession.messaging.jobs.Data; import org.session.libsignal.metadata.InvalidMetadataMessageException; import org.session.libsignal.metadata.InvalidMetadataVersionException; import org.session.libsignal.metadata.ProtocolDuplicateMessageException; @@ -66,7 +67,6 @@ import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.database.model.StickerRecord; import org.thoughtcrime.securesms.dependencies.InjectableType; import org.thoughtcrime.securesms.groups.GroupMessageProcessor; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.linkpreview.Link; @@ -175,7 +175,8 @@ public class PushDecryptJob extends BaseJob implements InjectableType { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId) .putLong(KEY_SMS_MESSAGE_ID, smsMessageId) .build(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java index b813dd4233..81324ce07e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java @@ -8,6 +8,7 @@ import androidx.annotation.WorkerThread; import com.annimon.stream.Collectors; import com.annimon.stream.Stream; +import org.session.libsession.messaging.jobs.Data; import org.session.libsession.messaging.sending_receiving.attachments.Attachment; import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachment; import org.session.libsession.messaging.threads.recipients.Recipient; @@ -22,7 +23,6 @@ import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch; import org.thoughtcrime.securesms.database.documents.NetworkFailure; import org.thoughtcrime.securesms.dependencies.InjectableType; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -118,7 +118,8 @@ public class PushGroupSendJob extends PushSendJob implements InjectableType { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId) .putString(KEY_FILTER_ADDRESS, filterAddress) .build(); @@ -292,7 +293,7 @@ public class PushGroupSendJob extends PushSendJob implements InjectableType { public static class Factory implements Job.Factory { @Override - public @NonNull PushGroupSendJob create(@NonNull Parameters parameters, @NonNull org.thoughtcrime.securesms.jobmanager.Data data) { + public @NonNull PushGroupSendJob create(@NonNull Parameters parameters, @NonNull Data data) { String address = data.getString(KEY_FILTER_ADDRESS); Address filter = address != null ? Address.Companion.fromSerialized(data.getString(KEY_FILTER_ADDRESS)) : null; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupUpdateJob.java index 28ca2088dc..fdc8ee2d5f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupUpdateJob.java @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import org.session.libsession.messaging.jobs.Data; import org.session.libsession.messaging.threads.Address; import org.session.libsession.messaging.threads.GroupRecord; import org.session.libsession.messaging.threads.recipients.Recipient; @@ -12,7 +13,6 @@ import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.GroupDatabase; import org.thoughtcrime.securesms.dependencies.InjectableType; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.logging.Log; @@ -67,7 +67,8 @@ public class PushGroupUpdateJob extends BaseJob implements InjectableType { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder().putString(KEY_SOURCE, source) .putString(KEY_GROUP_ID, GroupUtil.getEncodedClosedGroupID(groupId)) .build(); @@ -142,7 +143,7 @@ public class PushGroupUpdateJob extends BaseJob implements InjectableType { public static final class Factory implements Job.Factory { @Override - public @NonNull PushGroupUpdateJob create(@NonNull Parameters parameters, @NonNull org.thoughtcrime.securesms.jobmanager.Data data) { + public @NonNull PushGroupUpdateJob create(@NonNull Parameters parameters, @NonNull Data data) { return new PushGroupUpdateJob(parameters, data.getString(KEY_SOURCE), GroupUtil.getDecodedGroupIDAsData(data.getString(KEY_GROUP_ID))); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java index b388d2c031..5b11b9857c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java @@ -6,6 +6,7 @@ import androidx.annotation.WorkerThread; import com.annimon.stream.Stream; +import org.session.libsession.messaging.jobs.Data; import org.session.libsession.messaging.threads.Address; import org.session.libsession.messaging.sending_receiving.attachments.Attachment; import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachment; @@ -19,7 +20,6 @@ import org.thoughtcrime.securesms.database.MessagingDatabase.SyncMessageId; import org.thoughtcrime.securesms.database.MmsDatabase; import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.dependencies.InjectableType; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.logging.Log; @@ -130,7 +130,8 @@ public class PushMediaSendJob extends PushSendJob implements InjectableType { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder() .putLong(KEY_TEMPLATE_MESSAGE_ID, templateMessageId) .putLong(KEY_MESSAGE_ID, messageId) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushNotificationReceiveJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushNotificationReceiveJob.java index 790c4886e6..d318cfba35 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushNotificationReceiveJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushNotificationReceiveJob.java @@ -3,8 +3,8 @@ package org.thoughtcrime.securesms.jobs; import android.content.Context; import androidx.annotation.NonNull; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.dependencies.InjectableType; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.logging.Log; @@ -40,7 +40,8 @@ public class PushNotificationReceiveJob extends PushReceivedJob implements Injec } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return Data.EMPTY; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java index de268612a7..669ca63a66 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java @@ -1,6 +1,8 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; + +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.logging.Log; import org.session.libsession.messaging.threads.Address; @@ -16,7 +18,6 @@ import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.SmsDatabase; import org.thoughtcrime.securesms.database.model.SmsMessageRecord; import org.thoughtcrime.securesms.dependencies.InjectableType; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.loki.database.LokiMessageDatabase; import org.thoughtcrime.securesms.service.ExpiringMessageManager; @@ -71,7 +72,8 @@ public class PushTextSendJob extends PushSendJob implements InjectableType { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder() .putLong(KEY_TEMPLATE_MESSAGE_ID, templateMessageId) .putLong(KEY_MESSAGE_ID, messageId) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupInfoJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupInfoJob.java index 9474b90095..ed0e50be30 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupInfoJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupInfoJob.java @@ -2,13 +2,13 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import org.session.libsession.messaging.jobs.Data; import org.session.libsession.messaging.threads.recipients.Recipient; import org.session.libsession.messaging.threads.Address; import org.session.libsession.utilities.GroupUtil; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.dependencies.InjectableType; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.session.libsignal.service.api.SignalServiceMessageSender; @@ -58,7 +58,8 @@ public class RequestGroupInfoJob extends BaseJob implements InjectableType { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder().putString(KEY_SOURCE, source) .putString(KEY_GROUP_ID, GroupUtil.getEncodedClosedGroupID(groupId)) .build(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java index 140d59bb8b..fbcfc93da7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java @@ -5,12 +5,12 @@ import android.app.Application; import androidx.annotation.NonNull; import android.text.TextUtils; +import org.session.libsession.messaging.jobs.Data; import org.session.libsession.messaging.threads.Address; import org.session.libsession.messaging.threads.recipients.Recipient; import org.session.libsession.messaging.contacts.avatars.AvatarHelper; import org.session.libsession.utilities.Util; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.logging.Log; @@ -64,7 +64,8 @@ public class RetrieveProfileAvatarJob extends BaseJob implements InjectableType } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder().putString(KEY_PROFILE_AVATAR, profileAvatar) .putString(KEY_ADDRESS, recipient.getAddress().serialize()) .build(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendDeliveryReceiptJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendDeliveryReceiptJob.java index b1bdb4fc10..11ae064702 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendDeliveryReceiptJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendDeliveryReceiptJob.java @@ -3,10 +3,10 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.session.libsession.messaging.threads.Address; import org.thoughtcrime.securesms.dependencies.InjectableType; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.logging.Log; @@ -64,7 +64,8 @@ public class SendDeliveryReceiptJob extends BaseJob implements InjectableType { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder().putString(KEY_ADDRESS, address) .putLong(KEY_MESSAGE_ID, messageId) .putLong(KEY_TIMESTAMP, timestamp) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendReadReceiptJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendReadReceiptJob.java index d66526b630..91ceb70d20 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendReadReceiptJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendReadReceiptJob.java @@ -3,10 +3,10 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.session.libsession.messaging.threads.Address; import org.thoughtcrime.securesms.dependencies.InjectableType; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.logging.Log; @@ -65,7 +65,8 @@ public class SendReadReceiptJob extends BaseJob implements InjectableType { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { long[] ids = new long[messageIds.size()]; for (int i = 0; i < ids.length; i++) { ids[i] = messageIds.get(i); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java index 6045b3fded..b9dfcb1b0a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java @@ -4,8 +4,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import android.telephony.SmsMessage; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.ApplicationContext; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.SqlCipherMigrationConstraint; import org.thoughtcrime.securesms.logging.Log; @@ -55,7 +55,8 @@ public class SmsReceiveJob extends BaseJob { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { String[] encoded = new String[pdus.length]; for (int i = 0; i < pdus.length; i++) { encoded[i] = Base64.encodeBytes((byte[]) pdus[i]); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java index decd6fc54f..54f5bc8c87 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java @@ -9,8 +9,8 @@ import androidx.annotation.NonNull; import android.telephony.PhoneNumberUtils; import android.telephony.SmsManager; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.ApplicationContext; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkOrCellServiceConstraint; import org.thoughtcrime.securesms.jobmanager.impl.CellServiceConstraint; @@ -56,7 +56,8 @@ public class SmsSendJob extends SendJob { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId) .putInt(KEY_RUN_ATTEMPT, runAttempt) .build(); @@ -241,7 +242,7 @@ public class SmsSendJob extends SendJob { public static class Factory implements Job.Factory { @Override - public @NonNull SmsSendJob create(@NonNull Parameters parameters, @NonNull org.thoughtcrime.securesms.jobmanager.Data data) { + public @NonNull SmsSendJob create(@NonNull Parameters parameters, @NonNull Data data) { return new SmsSendJob(parameters, data.getLong(KEY_MESSAGE_ID), data.getInt(KEY_RUN_ATTEMPT)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSentJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSentJob.java index bf2420f0c1..e84ec352d7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSentJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSentJob.java @@ -4,7 +4,7 @@ import android.app.Activity; import androidx.annotation.NonNull; import android.telephony.SmsManager; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.logging.Log; @@ -49,7 +49,8 @@ public class SmsSentJob extends BaseJob { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId) .putString(KEY_ACTION, action) .putInt(KEY_RESULT, result) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerDownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerDownloadJob.java index 70ddcfb267..05cd51872c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerDownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerDownloadJob.java @@ -2,11 +2,11 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.StickerDatabase; import org.thoughtcrime.securesms.database.model.IncomingSticker; import org.thoughtcrime.securesms.dependencies.InjectableType; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.logging.Log; @@ -78,7 +78,8 @@ public class StickerDownloadJob extends BaseJob implements InjectableType { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder().putString(KEY_PACK_ID, sticker.getPackId()) .putString(KEY_PACK_KEY, sticker.getPackKey()) .putString(KEY_PACK_TITLE, sticker.getPackTitle()) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerPackDownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerPackDownloadJob.java index 1f7e29f120..7430b67ce6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerPackDownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerPackDownloadJob.java @@ -2,12 +2,12 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.ApplicationContext; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.StickerDatabase; import org.thoughtcrime.securesms.database.model.IncomingSticker; import org.thoughtcrime.securesms.dependencies.InjectableType; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -130,7 +130,8 @@ public class StickerPackDownloadJob extends BaseJob implements InjectableType { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder().putString(KEY_PACK_ID, packId) .putString(KEY_PACK_KEY, packKey) .putBoolean(KEY_REFERENCE_PACK, isReferencePack) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/TrimThreadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/TrimThreadJob.java index 0e4761dca9..c9d7808233 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/TrimThreadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/TrimThreadJob.java @@ -18,8 +18,8 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.database.DatabaseFactory; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.logging.Log; @@ -45,7 +45,8 @@ public class TrimThreadJob extends BaseJob { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder().putLong(KEY_THREAD_ID, threadId).build(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java index e38b3ab2ae..70854e9eb2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java @@ -4,10 +4,10 @@ import androidx.annotation.NonNull; import com.annimon.stream.Stream; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.dependencies.InjectableType; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.logging.Log; import org.session.libsignal.libsignal.util.guava.Optional; @@ -60,7 +60,8 @@ public class TypingSendJob extends BaseJob implements InjectableType { @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return new Data.Builder().putLong(KEY_THREAD_ID, threadId) .putBoolean(KEY_TYPING, typing) .build(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/UpdateApkJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/UpdateApkJob.java index a1c4428da9..2d222fa064 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/UpdateApkJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/UpdateApkJob.java @@ -13,7 +13,7 @@ import androidx.annotation.Nullable; import com.fasterxml.jackson.annotation.JsonProperty; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.session.libsession.messaging.jobs.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.logging.Log; @@ -51,7 +51,8 @@ public class UpdateApkJob extends BaseJob { } @Override - public @NonNull Data serialize() { + public @NonNull + Data serialize() { return Data.EMPTY; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/api/PrepareAttachmentAudioExtrasJob.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/api/PrepareAttachmentAudioExtrasJob.kt index aa2d220521..0a24d5f0de 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/api/PrepareAttachmentAudioExtrasJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/api/PrepareAttachmentAudioExtrasJob.kt @@ -5,11 +5,11 @@ import android.os.Build import org.thoughtcrime.securesms.logging.Log import androidx.annotation.RequiresApi import org.greenrobot.eventbus.EventBus +import org.session.libsession.messaging.jobs.Data import org.session.libsession.messaging.sending_receiving.attachments.Attachment import org.session.libsession.messaging.sending_receiving.attachments.AttachmentId import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachmentAudioExtras import org.thoughtcrime.securesms.database.DatabaseFactory -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobs.BaseJob import org.thoughtcrime.securesms.loki.utilities.audio.DecodedAudio diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/api/ResetThreadSessionJob.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/api/ResetThreadSessionJob.kt index 5203a849d3..86df11e2d2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/api/ResetThreadSessionJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/api/ResetThreadSessionJob.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.loki.api +import org.session.libsession.messaging.jobs.Data import org.session.libsession.messaging.threads.Address -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.jobs.BaseJob diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/ClosedGroupUpdateMessageSendJob.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/ClosedGroupUpdateMessageSendJob.kt index a26be28ee6..92209bb8d2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/ClosedGroupUpdateMessageSendJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/ClosedGroupUpdateMessageSendJob.kt @@ -1,9 +1,9 @@ package org.thoughtcrime.securesms.loki.protocol import com.google.protobuf.ByteString +import org.session.libsession.messaging.jobs.Data import org.thoughtcrime.securesms.ApplicationContext import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.jobs.BaseJob diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/ClosedGroupUpdateMessageSendJobV2.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/ClosedGroupUpdateMessageSendJobV2.kt index 59d0c34fd1..f64745046d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/ClosedGroupUpdateMessageSendJobV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/ClosedGroupUpdateMessageSendJobV2.kt @@ -5,6 +5,7 @@ import kotlinx.serialization.Serializable import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json +import org.session.libsession.messaging.jobs.Data import org.session.libsignal.libsignal.ecc.DjbECPrivateKey import org.session.libsignal.libsignal.ecc.DjbECPublicKey import org.session.libsignal.libsignal.ecc.ECKeyPair @@ -16,7 +17,6 @@ import org.session.libsignal.service.loki.utilities.toHexString import org.thoughtcrime.securesms.ApplicationContext import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil import org.thoughtcrime.securesms.crypto.storage.SignalProtocolStoreImpl -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.jobs.BaseJob diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/NullMessageSendJob.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/NullMessageSendJob.kt index 43b79e31e2..27f78d783a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/NullMessageSendJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/NullMessageSendJob.kt @@ -1,10 +1,10 @@ package org.thoughtcrime.securesms.loki.protocol import com.google.protobuf.ByteString +import org.session.libsession.messaging.jobs.Data import org.thoughtcrime.securesms.ApplicationContext import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil import org.session.libsession.messaging.threads.Address -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.jobs.BaseJob diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt index cdce348b3d..771a87faa7 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt @@ -16,8 +16,6 @@ class AttachmentDownloadJob(val attachmentID: Long, val tsIncomingMessageID: Lon private val MAX_ATTACHMENT_SIZE = 10 * 1024 * 1024 - - // Error internal sealed class Error(val description: String) : Exception() { object NoAttachment : Error("No such attachment.") diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/Data.java b/libsession/src/main/java/org/session/libsession/messaging/jobs/Data.java new file mode 100644 index 0000000000..67c142ab3c --- /dev/null +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/Data.java @@ -0,0 +1,348 @@ +package org.session.libsession.messaging.jobs; + +import android.os.Parcelable; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import org.session.libsession.utilities.ParcelableUtil; + +import java.util.HashMap; +import java.util.Map; + +// TODO AC: For now parcelable objects utilize byteArrays field to store their data into. +// Introduce a dedicated Map field specifically for parcelable needs. +public class Data { + + public static final Data EMPTY = new Data.Builder().build(); + + @JsonProperty private final Map strings; + @JsonProperty private final Map stringArrays; + @JsonProperty private final Map integers; + @JsonProperty private final Map integerArrays; + @JsonProperty private final Map longs; + @JsonProperty private final Map longArrays; + @JsonProperty private final Map floats; + @JsonProperty private final Map floatArrays; + @JsonProperty private final Map doubles; + @JsonProperty private final Map doubleArrays; + @JsonProperty private final Map booleans; + @JsonProperty private final Map booleanArrays; + @JsonProperty private final Map byteArrays; + + public Data(@JsonProperty("strings") @NonNull Map strings, + @JsonProperty("stringArrays") @NonNull Map stringArrays, + @JsonProperty("integers") @NonNull Map integers, + @JsonProperty("integerArrays") @NonNull Map integerArrays, + @JsonProperty("longs") @NonNull Map longs, + @JsonProperty("longArrays") @NonNull Map longArrays, + @JsonProperty("floats") @NonNull Map floats, + @JsonProperty("floatArrays") @NonNull Map floatArrays, + @JsonProperty("doubles") @NonNull Map doubles, + @JsonProperty("doubleArrays") @NonNull Map doubleArrays, + @JsonProperty("booleans") @NonNull Map booleans, + @JsonProperty("booleanArrays") @NonNull Map booleanArrays, + @JsonProperty("byteArrays") @NonNull Map byteArrays) + { + this.strings = strings; + this.stringArrays = stringArrays; + this.integers = integers; + this.integerArrays = integerArrays; + this.longs = longs; + this.longArrays = longArrays; + this.floats = floats; + this.floatArrays = floatArrays; + this.doubles = doubles; + this.doubleArrays = doubleArrays; + this.booleans = booleans; + this.booleanArrays = booleanArrays; + this.byteArrays = byteArrays; + } + + public boolean hasString(@NonNull String key) { + return strings.containsKey(key); + } + + public String getString(@NonNull String key) { + throwIfAbsent(strings, key); + return strings.get(key); + } + + public String getStringOrDefault(@NonNull String key, String defaultValue) { + if (hasString(key)) return getString(key); + else return defaultValue; + } + + + public boolean hasStringArray(@NonNull String key) { + return stringArrays.containsKey(key); + } + + public String[] getStringArray(@NonNull String key) { + throwIfAbsent(stringArrays, key); + return stringArrays.get(key); + } + + + public boolean hasInt(@NonNull String key) { + return integers.containsKey(key); + } + + public int getInt(@NonNull String key) { + throwIfAbsent(integers, key); + return integers.get(key); + } + + public int getIntOrDefault(@NonNull String key, int defaultValue) { + if (hasInt(key)) return getInt(key); + else return defaultValue; + } + + + public boolean hasIntegerArray(@NonNull String key) { + return integerArrays.containsKey(key); + } + + public int[] getIntegerArray(@NonNull String key) { + throwIfAbsent(integerArrays, key); + return integerArrays.get(key); + } + + + public boolean hasLong(@NonNull String key) { + return longs.containsKey(key); + } + + public long getLong(@NonNull String key) { + throwIfAbsent(longs, key); + return longs.get(key); + } + + public long getLongOrDefault(@NonNull String key, long defaultValue) { + if (hasLong(key)) return getLong(key); + else return defaultValue; + } + + + public boolean hasLongArray(@NonNull String key) { + return longArrays.containsKey(key); + } + + public long[] getLongArray(@NonNull String key) { + throwIfAbsent(longArrays, key); + return longArrays.get(key); + } + + + public boolean hasFloat(@NonNull String key) { + return floats.containsKey(key); + } + + public float getFloat(@NonNull String key) { + throwIfAbsent(floats, key); + return floats.get(key); + } + + public float getFloatOrDefault(@NonNull String key, float defaultValue) { + if (hasFloat(key)) return getFloat(key); + else return defaultValue; + } + + + public boolean hasFloatArray(@NonNull String key) { + return floatArrays.containsKey(key); + } + + public float[] getFloatArray(@NonNull String key) { + throwIfAbsent(floatArrays, key); + return floatArrays.get(key); + } + + + public boolean hasDouble(@NonNull String key) { + return doubles.containsKey(key); + } + + public double getDouble(@NonNull String key) { + throwIfAbsent(doubles, key); + return doubles.get(key); + } + + public double getDoubleOrDefault(@NonNull String key, double defaultValue) { + if (hasDouble(key)) return getDouble(key); + else return defaultValue; + } + + + public boolean hasDoubleArray(@NonNull String key) { + return floatArrays.containsKey(key); + } + + public double[] getDoubleArray(@NonNull String key) { + throwIfAbsent(doubleArrays, key); + return doubleArrays.get(key); + } + + + public boolean hasBoolean(@NonNull String key) { + return booleans.containsKey(key); + } + + public boolean getBoolean(@NonNull String key) { + throwIfAbsent(booleans, key); + return booleans.get(key); + } + + public boolean getBooleanOrDefault(@NonNull String key, boolean defaultValue) { + if (hasBoolean(key)) return getBoolean(key); + else return defaultValue; + } + + + public boolean hasBooleanArray(@NonNull String key) { + return booleanArrays.containsKey(key); + } + + public boolean[] getBooleanArray(@NonNull String key) { + throwIfAbsent(booleanArrays, key); + return booleanArrays.get(key); + } + + public boolean hasByteArray(@NonNull String key) { + return byteArrays.containsKey(key); + } + + public byte[] getByteArray(@NonNull String key) { + throwIfAbsent(byteArrays, key); + return byteArrays.get(key); + } + + public boolean hasParcelable(@NonNull String key) { + return byteArrays.containsKey(key); + } + + public T getParcelable(@NonNull String key, @NonNull Parcelable.Creator creator) { + throwIfAbsent(byteArrays, key); + byte[] bytes = byteArrays.get(key); + return ParcelableUtil.unmarshall(bytes, creator); + } + + private void throwIfAbsent(@NonNull Map map, @NonNull String key) { + if (!map.containsKey(key)) { + throw new IllegalStateException("Tried to retrieve a value with key '" + key + "', but it wasn't present."); + } + } + + + public static class Builder { + + private final Map strings = new HashMap<>(); + private final Map stringArrays = new HashMap<>(); + private final Map integers = new HashMap<>(); + private final Map integerArrays = new HashMap<>(); + private final Map longs = new HashMap<>(); + private final Map longArrays = new HashMap<>(); + private final Map floats = new HashMap<>(); + private final Map floatArrays = new HashMap<>(); + private final Map doubles = new HashMap<>(); + private final Map doubleArrays = new HashMap<>(); + private final Map booleans = new HashMap<>(); + private final Map booleanArrays = new HashMap<>(); + private final Map byteArrays = new HashMap<>(); + + public Builder putString(@NonNull String key, @Nullable String value) { + strings.put(key, value); + return this; + } + + public Builder putStringArray(@NonNull String key, @NonNull String[] value) { + stringArrays.put(key, value); + return this; + } + + public Builder putInt(@NonNull String key, int value) { + integers.put(key, value); + return this; + } + + public Builder putIntArray(@NonNull String key, @NonNull int[] value) { + integerArrays.put(key, value); + return this; + } + + public Builder putLong(@NonNull String key, long value) { + longs.put(key, value); + return this; + } + + public Builder putLongArray(@NonNull String key, @NonNull long[] value) { + longArrays.put(key, value); + return this; + } + + public Builder putFloat(@NonNull String key, float value) { + floats.put(key, value); + return this; + } + + public Builder putFloatArray(@NonNull String key, @NonNull float[] value) { + floatArrays.put(key, value); + return this; + } + + public Builder putDouble(@NonNull String key, double value) { + doubles.put(key, value); + return this; + } + + public Builder putDoubleArray(@NonNull String key, @NonNull double[] value) { + doubleArrays.put(key, value); + return this; + } + + public Builder putBoolean(@NonNull String key, boolean value) { + booleans.put(key, value); + return this; + } + + public Builder putBooleanArray(@NonNull String key, @NonNull boolean[] value) { + booleanArrays.put(key, value); + return this; + } + + public Builder putByteArray(@NonNull String key, @NonNull byte[] value) { + byteArrays.put(key, value); + return this; + } + + public Builder putParcelable(@NonNull String key, @NonNull Parcelable value) { + byte[] bytes = ParcelableUtil.marshall(value); + byteArrays.put(key, bytes); + return this; + } + + public Data build() { + return new Data(strings, + stringArrays, + integers, + integerArrays, + longs, + longArrays, + floats, + floatArrays, + doubles, + doubleArrays, + booleans, + booleanArrays, + byteArrays); + } + } + + public interface Serializer { + @NonNull String serialize(@NonNull Data data); + @NonNull Data deserialize(@NonNull String serialized); + } +} + diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ParcelableUtil.kt b/libsession/src/main/java/org/session/libsession/utilities/ParcelableUtil.kt similarity index 95% rename from app/src/main/java/org/thoughtcrime/securesms/util/ParcelableUtil.kt rename to libsession/src/main/java/org/session/libsession/utilities/ParcelableUtil.kt index 2756500b22..4f0de9e06f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ParcelableUtil.kt +++ b/libsession/src/main/java/org/session/libsession/utilities/ParcelableUtil.kt @@ -1,7 +1,6 @@ -package org.thoughtcrime.securesms.util +package org.session.libsession.utilities import android.os.Parcel - import android.os.Parcelable object ParcelableUtil { From 74e2fb64901d003629e7ae6702e569081553459c Mon Sep 17 00:00:00 2001 From: Brice Date: Fri, 22 Jan 2021 15:19:41 +1100 Subject: [PATCH 3/3] JobData class removed --- .../messaging/jobs/AttachmentDownloadJob.kt | 4 +- .../messaging/jobs/AttachmentUploadJob.kt | 4 +- .../session/libsession/messaging/jobs/Job.kt | 10 +- .../libsession/messaging/jobs/JobData.kt | 351 ------------------ .../messaging/jobs/MessageReceiveJob.kt | 4 +- .../messaging/jobs/MessageSendJob.kt | 4 +- .../messaging/jobs/NotifyPNServerJob.kt | 4 +- 7 files changed, 15 insertions(+), 366 deletions(-) delete mode 100644 libsession/src/main/java/org/session/libsession/messaging/jobs/JobData.kt diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt index 771a87faa7..159f16b5cd 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt @@ -88,7 +88,7 @@ class AttachmentDownloadJob(val attachmentID: Long, val tsIncomingMessageID: Lon //database functions - override fun serialize(): JobData { + override fun serialize(): Data { val builder = this.createJobDataBuilder() return builder.putLong(KEY_ATTACHMENT_ID, attachmentID) .putLong(KEY_TS_INCOMING_MESSAGE_ID, tsIncomingMessageID) @@ -96,7 +96,7 @@ class AttachmentDownloadJob(val attachmentID: Long, val tsIncomingMessageID: Lon } class Factory: Job.Factory { - override fun create(data: JobData): AttachmentDownloadJob { + override fun create(data: Data): AttachmentDownloadJob { val job = AttachmentDownloadJob(data.getLong(KEY_ATTACHMENT_ID), data.getLong(KEY_TS_INCOMING_MESSAGE_ID)) job.initJob(data) return job diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentUploadJob.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentUploadJob.kt index 1545736867..9fe4e064e6 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentUploadJob.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentUploadJob.kt @@ -103,7 +103,7 @@ class AttachmentUploadJob(val attachmentID: Long, val threadID: String, val mess //database functions - override fun serialize(): JobData { + override fun serialize(): Data { val builder = this.createJobDataBuilder() //serialize Message property val kryo = Kryo() @@ -120,7 +120,7 @@ class AttachmentUploadJob(val attachmentID: Long, val threadID: String, val mess } class Factory: Job.Factory { - override fun create(data: JobData): AttachmentUploadJob { + override fun create(data: Data): AttachmentUploadJob { val serializedMessage = data.getByteArray(KEY_MESSAGE) //deserialize Message property val kryo = Kryo() diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/Job.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/Job.kt index 7e2ae3985c..1e2e904f5a 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/Job.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/Job.kt @@ -17,19 +17,19 @@ interface Job { //database functions - fun serialize(): JobData + fun serialize(): Data - fun initJob(data: JobData) { + fun initJob(data: Data) { id = data.getString(KEY_ID) failureCount = data.getInt(KEY_FAILURE_COUNT) } - fun createJobDataBuilder(): JobData.Builder { - return JobData.Builder().putString(KEY_ID, id) + fun createJobDataBuilder(): Data.Builder { + return Data.Builder().putString(KEY_ID, id) .putInt(KEY_FAILURE_COUNT, failureCount) } interface Factory { - fun create(data: JobData): T + fun create(data: Data): T } } \ No newline at end of file diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/JobData.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/JobData.kt deleted file mode 100644 index a6f10372a5..0000000000 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/JobData.kt +++ /dev/null @@ -1,351 +0,0 @@ -package org.session.libsession.messaging.jobs - -import com.fasterxml.jackson.annotation.JsonProperty -import java.util.* - -class JobData { - - val EMPTY: JobData = Builder().build() - - @JsonProperty - private var strings: Map - - @JsonProperty - private var stringArrays: Map> - - @JsonProperty - private var integers: Map - - @JsonProperty - private var integerArrays: Map - - @JsonProperty - private var longs: Map - - @JsonProperty - private var longArrays: Map - - @JsonProperty - private var floats: Map - - @JsonProperty - private var floatArrays: Map - - @JsonProperty - private var doubles: Map - - @JsonProperty - private var doubleArrays: Map - - @JsonProperty - private var booleans: Map - - @JsonProperty - private var booleanArrays: Map - - @JsonProperty - private var byteArrays: Map - - constructor(@JsonProperty("strings") strings: MutableMap, - @JsonProperty("stringArrays") stringArrays: Map>, - @JsonProperty("integers") integers: Map, - @JsonProperty("integerArrays") integerArrays: Map, - @JsonProperty("longs") longs: Map, - @JsonProperty("longArrays") longArrays: Map, - @JsonProperty("floats") floats: Map, - @JsonProperty("floatArrays") floatArrays: Map, - @JsonProperty("doubles") doubles: Map, - @JsonProperty("doubleArrays") doubleArrays: Map, - @JsonProperty("booleans") booleans: Map, - @JsonProperty("booleanArrays") booleanArrays: Map, - @JsonProperty("byteArrays") byteArrays: Map) { - this.strings = strings - this.stringArrays = stringArrays - this.integers = integers - this.integerArrays = integerArrays - this.longs = longs - this.longArrays = longArrays - this.floats = floats - this.floatArrays = floatArrays - this.doubles = doubles - this.doubleArrays = doubleArrays - this.booleans = booleans - this.booleanArrays = booleanArrays - this.byteArrays = byteArrays - } - - fun hasString(key: String): Boolean { - return strings.containsKey(key) - } - - fun getString(key: String): String { - throwIfAbsent(strings, key) - return strings[key]!! - } - - fun getStringOrDefault(key: String, defaultValue: String?): String? { - return if (hasString(key)) getString(key) else defaultValue - } - - - fun hasStringArray(key: String): Boolean { - return stringArrays.containsKey(key) - } - - fun getStringArray(key: String): Array? { - throwIfAbsent(stringArrays, key) - return stringArrays[key] - } - - - fun hasInt(key: String): Boolean { - return integers.containsKey(key) - } - - fun getInt(key: String): Int { - throwIfAbsent(integers, key) - return integers[key]!! - } - - fun getIntOrDefault(key: String, defaultValue: Int): Int { - return if (hasInt(key)) getInt(key) else defaultValue - } - - - fun hasIntegerArray(key: String): Boolean { - return integerArrays.containsKey(key) - } - - fun getIntegerArray(key: String): IntArray? { - throwIfAbsent(integerArrays, key) - return integerArrays[key] - } - - - fun hasLong(key: String): Boolean { - return longs.containsKey(key) - } - - fun getLong(key: String): Long { - throwIfAbsent(longs, key) - return longs[key]!! - } - - fun getLongOrDefault(key: String, defaultValue: Long): Long { - return if (hasLong(key)) getLong(key) else defaultValue - } - - - fun hasLongArray(key: String): Boolean { - return longArrays.containsKey(key) - } - - fun getLongArray(key: String): LongArray? { - throwIfAbsent(longArrays, key) - return longArrays[key] - } - - - fun hasFloat(key: String): Boolean { - return floats.containsKey(key) - } - - fun getFloat(key: String): Float { - throwIfAbsent(floats, key) - return floats[key]!! - } - - fun getFloatOrDefault(key: String, defaultValue: Float): Float { - return if (hasFloat(key)) getFloat(key) else defaultValue - } - - - fun hasFloatArray(key: String): Boolean { - return floatArrays.containsKey(key) - } - - fun getFloatArray(key: String): FloatArray? { - throwIfAbsent(floatArrays, key) - return floatArrays[key] - } - - - fun hasDouble(key: String): Boolean { - return doubles.containsKey(key) - } - - fun getDouble(key: String): Double { - throwIfAbsent(doubles, key) - return doubles[key]!! - } - - fun getDoubleOrDefault(key: String, defaultValue: Double): Double { - return if (hasDouble(key)) getDouble(key) else defaultValue - } - - - fun hasDoubleArray(key: String): Boolean { - return floatArrays.containsKey(key) - } - - fun getDoubleArray(key: String): DoubleArray? { - throwIfAbsent(doubleArrays, key) - return doubleArrays[key] - } - - - fun hasBoolean(key: String): Boolean { - return booleans.containsKey(key) - } - - fun getBoolean(key: String): Boolean { - throwIfAbsent(booleans, key) - return booleans[key]!! - } - - fun getBooleanOrDefault(key: String, defaultValue: Boolean): Boolean { - return if (hasBoolean(key)) getBoolean(key) else defaultValue - } - - - fun hasBooleanArray(key: String): Boolean { - return booleanArrays.containsKey(key) - } - - fun getBooleanArray(key: String): BooleanArray? { - throwIfAbsent(booleanArrays, key) - return booleanArrays[key] - } - - fun hasByteArray(key: String): Boolean { - return byteArrays.containsKey(key) - } - - fun getByteArray(key: String): ByteArray { - throwIfAbsent(byteArrays, key) - return byteArrays[key]!! - } - - fun hasParcelable(key: String): Boolean { - return byteArrays!!.containsKey(key) - } - - /*fun getParcelable(key: String, creator: Parcelable.Creator): T { - throwIfAbsent(byteArrays!!, key) - val bytes = byteArrays[key] - return ParcelableUtil.unmarshall(bytes, creator) - }*/ - - private fun throwIfAbsent(map: Map<*, *>, key: String) { - check(map.containsKey(key)) { "Tried to retrieve a value with key '$key', but it wasn't present." } - } - - - class Builder { - private val strings: MutableMap = HashMap() - private val stringArrays: MutableMap> = HashMap() - private val integers: MutableMap = HashMap() - private val integerArrays: MutableMap = HashMap() - private val longs: MutableMap = HashMap() - private val longArrays: MutableMap = HashMap() - private val floats: MutableMap = HashMap() - private val floatArrays: MutableMap = HashMap() - private val doubles: MutableMap = HashMap() - private val doubleArrays: MutableMap = HashMap() - private val booleans: MutableMap = HashMap() - private val booleanArrays: MutableMap = HashMap() - private val byteArrays: MutableMap = HashMap() - fun putString(key: String, value: String?): Builder { - value?.let { strings[key] = value } - return this - } - - fun putStringArray(key: String, value: Array): Builder { - stringArrays[key] = value - return this - } - - fun putInt(key: String, value: Int): Builder { - integers[key] = value - return this - } - - fun putIntArray(key: String, value: IntArray): Builder { - integerArrays[key] = value - return this - } - - fun putLong(key: String, value: Long): Builder { - longs[key] = value - return this - } - - fun putLongArray(key: String, value: LongArray): Builder { - longArrays[key] = value - return this - } - - fun putFloat(key: String, value: Float): Builder { - floats[key] = value - return this - } - - fun putFloatArray(key: String, value: FloatArray): Builder { - floatArrays[key] = value - return this - } - - fun putDouble(key: String, value: Double): Builder { - doubles[key] = value - return this - } - - fun putDoubleArray(key: String, value: DoubleArray): Builder { - doubleArrays[key] = value - return this - } - - fun putBoolean(key: String, value: Boolean): Builder { - booleans[key] = value - return this - } - - fun putBooleanArray(key: String, value: BooleanArray): Builder { - booleanArrays[key] = value - return this - } - - fun putByteArray(key: String, value: ByteArray): Builder { - byteArrays[key] = value - return this - } - - /*fun putParcelable(key: String, value: Parcelable): Builder { - val bytes: ByteArray = ParcelableUtil.marshall(value) - byteArrays[key] = bytes - return this - }*/ - - fun build(): JobData { - return JobData(strings, - stringArrays, - integers, - integerArrays, - longs, - longArrays, - floats, - floatArrays, - doubles, - doubleArrays, - booleans, - booleanArrays, - byteArrays) - } - } - - interface Serializer { - fun serialize(data: JobData): String - fun deserialize(serialized: String): JobData - } - -} \ No newline at end of file diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageReceiveJob.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageReceiveJob.kt index 6a693945eb..438a38a878 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageReceiveJob.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageReceiveJob.kt @@ -63,7 +63,7 @@ class MessageReceiveJob(val data: ByteArray, val isBackgroundPoll: Boolean, val //database functions - override fun serialize(): JobData { + override fun serialize(): Data { val builder = this.createJobDataBuilder() builder.putByteArray(KEY_DATA, data) .putBoolean(KEY_IS_BACKGROUND_POLL, isBackgroundPoll) @@ -74,7 +74,7 @@ class MessageReceiveJob(val data: ByteArray, val isBackgroundPoll: Boolean, val } class Factory: Job.Factory { - override fun create(data: JobData): MessageReceiveJob { + override fun create(data: Data): MessageReceiveJob { val job = MessageReceiveJob(data.getByteArray(KEY_DATA), data.getBoolean(KEY_IS_BACKGROUND_POLL), data.getLong(KEY_OPEN_GROUP_MESSAGE_SERVER_ID), data.getString(KEY_OPEN_GROUP_ID)) job.initJob(data) return job diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageSendJob.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageSendJob.kt index 219b882c8b..c7fd708d62 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageSendJob.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageSendJob.kt @@ -76,7 +76,7 @@ class MessageSendJob(val message: Message, val destination: Destination) : Job { //database functions - override fun serialize(): JobData { + override fun serialize(): Data { val builder = this.createJobDataBuilder() //serialize Message and Destination properties val kryo = Kryo() @@ -95,7 +95,7 @@ class MessageSendJob(val message: Message, val destination: Destination) : Job { } class Factory: Job.Factory { - override fun create(data: JobData): MessageSendJob { + override fun create(data: Data): MessageSendJob { val serializedMessage = data.getByteArray(KEY_MESSAGE) val serializedDestination = data.getByteArray(KEY_DESTINATION) //deserialize Message and Destination properties diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/NotifyPNServerJob.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/NotifyPNServerJob.kt index df5c409b1e..f3564836a4 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/NotifyPNServerJob.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/NotifyPNServerJob.kt @@ -63,7 +63,7 @@ class NotifyPNServerJob(val message: SnodeMessage) : Job { //database functions - override fun serialize(): JobData { + override fun serialize(): Data { val builder = this.createJobDataBuilder() //serialize SnodeMessage property val kryo = Kryo() @@ -77,7 +77,7 @@ class NotifyPNServerJob(val message: SnodeMessage) : Job { } class Factory: Job.Factory { - override fun create(data: JobData): NotifyPNServerJob { + override fun create(data: Data): NotifyPNServerJob { val serializedMessage = data.getByteArray(KEY_MESSAGE) //deserialize SnodeMessage property val kryo = Kryo()