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 955c733f75..995093254f 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/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/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/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..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 @@ -25,6 +25,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 +85,21 @@ class AttachmentDownloadJob(val attachmentID: Long, val tsIncomingMessageID: Lon file.deleteOnExit() return file } + + //database functions + + override fun serialize(): Data { + 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: Data): 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..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 @@ -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(): Data { + 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: Data): 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/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/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..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 @@ -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(): Data + + fun initJob(data: Data) { + id = data.getString(KEY_ID) + failureCount = data.getInt(KEY_FAILURE_COUNT) + } + + fun createJobDataBuilder(): Data.Builder { + return Data.Builder().putString(KEY_ID, id) + .putInt(KEY_FAILURE_COUNT, failureCount) + } + + interface Factory { + fun create(data: Data): T + } } \ 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..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 @@ -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(): Data { + 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: 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 + } + } } \ 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..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 @@ -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(): Data { + 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: Data): 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..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 @@ -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(): Data { + 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: Data): 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 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 {