X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/19f7b5d78d29544829b25f1cea1ebc24c151f1c3..b77d8206615d991ab31753fd15a8fa894335eb74:/lib/src/main/java/org/asamk/signal/manager/Manager.java diff --git a/lib/src/main/java/org/asamk/signal/manager/Manager.java b/lib/src/main/java/org/asamk/signal/manager/Manager.java index 0fcb42d2..a2152fac 100644 --- a/lib/src/main/java/org/asamk/signal/manager/Manager.java +++ b/lib/src/main/java/org/asamk/signal/manager/Manager.java @@ -1594,14 +1594,7 @@ public class Manager implements Closeable { () -> false); for (var r : result) { - if (r.getIdentityFailure() != null) { - final var recipientId = resolveRecipient(r.getAddress()); - final var newIdentity = account.getIdentityKeyStore() - .saveIdentity(recipientId, r.getIdentityFailure().getIdentityKey(), new Date()); - if (newIdentity) { - account.getSessionStore().archiveSessions(recipientId); - } - } + handlePossibleIdentityFailure(r); } return new Pair<>(timestamp, result); @@ -1617,7 +1610,9 @@ public class Manager implements Closeable { final var expirationTime = contact != null ? contact.getMessageExpirationTime() : 0; messageBuilder.withExpiration(expirationTime); message = messageBuilder.build(); - results.add(sendMessage(recipientId, message)); + final var result = sendMessage(recipientId, message); + handlePossibleIdentityFailure(result); + results.add(result); } return new Pair<>(timestamp, results); } @@ -1630,6 +1625,23 @@ public class Manager implements Closeable { } } + private void handlePossibleIdentityFailure(final SendMessageResult r) { + if (r.getIdentityFailure() != null) { + final var recipientId = resolveRecipient(r.getAddress()); + final var identityKey = r.getIdentityFailure().getIdentityKey(); + if (identityKey != null) { + final var newIdentity = account.getIdentityKeyStore() + .saveIdentity(recipientId, identityKey, new Date()); + if (newIdentity) { + account.getSessionStore().archiveSessions(recipientId); + } + } else { + // Retrieve profile to get the current identity key from the server + retrieveEncryptedProfile(recipientId); + } + } + } + private Pair sendSelfMessage( SignalServiceDataMessage.Builder messageBuilder ) throws IOException {