diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/recipients/LegacyRecipientStore2.java b/lib/src/main/java/org/asamk/signal/manager/storage/recipients/LegacyRecipientStore2.java index 3e50cf60..9e8bf338 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/recipients/LegacyRecipientStore2.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/recipients/LegacyRecipientStore2.java @@ -99,6 +99,7 @@ public class LegacyRecipientStore2 { expiringProfileKeyCredential, profile, null, + null, null); }).collect(Collectors.toMap(Recipient::getRecipientId, r -> r)); diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/recipients/Recipient.java b/lib/src/main/java/org/asamk/signal/manager/storage/recipients/Recipient.java index c5e1181b..52354129 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/recipients/Recipient.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/recipients/Recipient.java @@ -23,6 +23,8 @@ public class Recipient { private final Boolean discoverable; + private final Long unregisteredTimestamp; + private final byte[] storageRecord; public Recipient( @@ -33,6 +35,7 @@ public class Recipient { final ExpiringProfileKeyCredential expiringProfileKeyCredential, final Profile profile, final Boolean discoverable, + final Long unregisteredTimestamp, final byte[] storageRecord ) { this.recipientId = recipientId; @@ -42,6 +45,7 @@ public class Recipient { this.expiringProfileKeyCredential = expiringProfileKeyCredential; this.profile = profile; this.discoverable = discoverable; + this.unregisteredTimestamp = unregisteredTimestamp; this.storageRecord = storageRecord; } @@ -53,6 +57,7 @@ public class Recipient { expiringProfileKeyCredential = builder.expiringProfileKeyCredential; profile = builder.profile; discoverable = builder.discoverable; + unregisteredTimestamp = builder.unregisteredTimestamp; storageRecord = builder.storageRecord; } @@ -100,6 +105,14 @@ public class Recipient { return discoverable; } + public Long getUnregisteredTimestamp() { + return unregisteredTimestamp; + } + + public boolean isRegistered() { + return unregisteredTimestamp == null; + } + public byte[] getStorageRecord() { return storageRecord; } @@ -131,6 +144,7 @@ public class Recipient { private ExpiringProfileKeyCredential expiringProfileKeyCredential; private Profile profile; private Boolean discoverable; + private Long unregisteredTimestamp; private byte[] storageRecord; private Builder() { @@ -171,6 +185,11 @@ public class Recipient { return this; } + public Builder withUnregisteredTimestamp(final Long val) { + unregisteredTimestamp = val; + return this; + } + public Builder withStorageRecord(final byte[] val) { storageRecord = val; return this; diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/recipients/RecipientStore.java b/lib/src/main/java/org/asamk/signal/manager/storage/recipients/RecipientStore.java index 9b7a5d0f..044ba658 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/recipients/RecipientStore.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/recipients/RecipientStore.java @@ -1549,6 +1549,7 @@ public class RecipientStore implements RecipientIdCreator, RecipientResolver, Re getExpiringProfileKeyCredentialFromResultSet(resultSet), getProfileFromResultSet(resultSet), getDiscoverableFromResultSet(resultSet), + getUnregisteredTimestampFromResultSet(resultSet), getStorageRecordFromResultSet(resultSet)); } @@ -1580,6 +1581,14 @@ public class RecipientStore implements RecipientIdCreator, RecipientResolver, Re return discoverable; } + private static Long getUnregisteredTimestampFromResultSet(final ResultSet resultSet) throws SQLException { + final var discoverable = resultSet.getLong("unregistered_timestamp"); + if (resultSet.wasNull()) { + return null; + } + return discoverable; + } + private Profile getProfileFromResultSet(ResultSet resultSet) throws SQLException { final var profileCapabilities = resultSet.getString("profile_capabilities"); final var profileUnidentifiedAccessMode = resultSet.getString("profile_unidentified_access_mode");