]> nmode's Git Repositories - signal-cli/commitdiff
Update libsignal-service-java
authorAsamK <asamk@gmx.de>
Thu, 17 Mar 2022 22:24:30 +0000 (23:24 +0100)
committerAsamK <asamk@gmx.de>
Thu, 17 Mar 2022 22:33:57 +0000 (23:33 +0100)
32 files changed:
graalvm-config-dir/reflect-config.json
lib/build.gradle.kts
lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java
lib/src/main/java/org/asamk/signal/manager/SignalDependencies.java
lib/src/main/java/org/asamk/signal/manager/SignalWebSocketHealthMonitor.java
lib/src/main/java/org/asamk/signal/manager/actions/SendRetryMessageRequestAction.java
lib/src/main/java/org/asamk/signal/manager/api/MessageEnvelope.java
lib/src/main/java/org/asamk/signal/manager/config/LiveConfig.java
lib/src/main/java/org/asamk/signal/manager/config/StagingConfig.java
lib/src/main/java/org/asamk/signal/manager/helper/AccountHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/GroupV2Helper.java
lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java
lib/src/main/java/org/asamk/signal/manager/helper/ProfileHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/RecipientHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/SendHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/StickerHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/StorageHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/SyncHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/UnidentifiedAccessHelper.java
lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java
lib/src/main/java/org/asamk/signal/manager/storage/profiles/SignalProfile.java
lib/src/main/java/org/asamk/signal/manager/storage/recipients/Profile.java
lib/src/main/java/org/asamk/signal/manager/storage/recipients/RecipientAddress.java
lib/src/main/java/org/asamk/signal/manager/util/AttachmentUtils.java
lib/src/main/java/org/asamk/signal/manager/util/MessageCacheUtils.java
lib/src/main/java/org/asamk/signal/manager/util/NumberVerificationUtils.java
lib/src/main/java/org/asamk/signal/manager/util/ProfileUtils.java
lib/src/main/java/org/asamk/signal/manager/util/StickerUtils.java
lib/src/main/java/org/asamk/signal/manager/util/Utils.java
man/signal-cli-dbus.5.adoc
src/main/java/org/asamk/signal/dbus/DbusProperties.java

index f7c1a95b43c17284c50091c057bf530e7424e3d7..58cf72ed7605d3e13a219818edf332ae1836d138 100644 (file)
     {"name":"signature_"}
   ]
 },
+{
+  "name":"org.signal.storageservice.protos.groups.BannedMember",
+  "fields":[{"name":"userId_"}]
+},
 {
   "name":"org.signal.storageservice.protos.groups.Group",
   "fields":[
     {"name":"accessControl_"}, 
     {"name":"announcementsOnly_"}, 
     {"name":"avatar_"}, 
+    {"name":"bannedMembers_"}, 
     {"name":"description_"}, 
     {"name":"disappearingMessagesTimer_"}, 
     {"name":"inviteLinkPassword_"}, 
 {
   "name":"org.signal.storageservice.protos.groups.GroupChange$Actions",
   "fields":[
+    {"name":"addBannedMembers_"}, 
     {"name":"addMembers_"}, 
     {"name":"addPendingMembers_"}, 
     {"name":"addRequestingMembers_"}, 
+    {"name":"deleteBannedMembers_"}, 
     {"name":"deleteMembers_"}, 
     {"name":"deletePendingMembers_"}, 
     {"name":"deleteRequestingMembers_"}, 
     {"name":"sourceUuid_"}
   ]
 },
+{
+  "name":"org.signal.storageservice.protos.groups.GroupChange$Actions$AddBannedMemberAction",
+  "fields":[{"name":"added_"}]
+},
 {
   "name":"org.signal.storageservice.protos.groups.GroupChange$Actions$AddMemberAction",
   "fields":[
   "name":"org.signal.storageservice.protos.groups.GroupChange$Actions$AddRequestingMemberAction",
   "fields":[{"name":"added_"}]
 },
+{
+  "name":"org.signal.storageservice.protos.groups.GroupChange$Actions$DeleteBannedMemberAction",
+  "fields":[{"name":"deletedUserId_"}]
+},
 {
   "name":"org.signal.storageservice.protos.groups.GroupChange$Actions$DeleteMemberAction",
   "fields":[{"name":"deletedUserId_"}]
     {"name":"uuid_"}
   ]
 },
+{
+  "name":"org.signal.storageservice.protos.groups.local.DecryptedBannedMember",
+  "fields":[{"name":"uuid_"}]
+},
 {
   "name":"org.signal.storageservice.protos.groups.local.DecryptedGroup",
   "fields":[
     {"name":"accessControl_"}, 
     {"name":"avatar_"}, 
+    {"name":"bannedMembers_"}, 
     {"name":"description_"}, 
     {"name":"disappearingMessagesTimer_"}, 
     {"name":"inviteLinkPassword_"}, 
 {
   "name":"org.signal.storageservice.protos.groups.local.DecryptedGroupChange",
   "fields":[
+    {"name":"deleteBannedMembers_"}, 
     {"name":"deleteMembers_"}, 
     {"name":"deletePendingMembers_"}, 
     {"name":"deleteRequestingMembers_"}, 
     {"name":"modifyMemberRoles_"}, 
     {"name":"newAttributeAccess_"}, 
     {"name":"newAvatar_"}, 
+    {"name":"newBannedMembers_"}, 
     {"name":"newDescription_"}, 
     {"name":"newInviteLinkAccess_"}, 
     {"name":"newInviteLinkPassword_"}, 
index 81a804ff056f31207c6dd84097c1b251d3335403..ee2ace73576cfe6ef1249a978252f923ba48710f 100644 (file)
@@ -14,7 +14,7 @@ repositories {
 }
 
 dependencies {
-    implementation("com.github.turasa", "signal-service-java", "2.15.3_unofficial_44")
+    implementation("com.github.turasa", "signal-service-java", "2.15.3_unofficial_45")
     implementation("com.fasterxml.jackson.core", "jackson-databind", "2.13.1")
     implementation("com.google.protobuf", "protobuf-javalite", "3.11.4")
     implementation("org.bouncycastle", "bcprov-jdk15on", "1.70")
index 380b00ee7964c7b2003855aff4bd3fbcc47fcaa1..aa4752a2644e0e4b4f7100e8ff334e6f3edd4b94 100644 (file)
@@ -62,7 +62,6 @@ import org.asamk.signal.manager.util.KeyUtils;
 import org.asamk.signal.manager.util.StickerUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.SignalSessionLock;
 import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
 import org.whispersystems.signalservice.api.messages.SignalServiceReceiptMessage;
@@ -82,6 +81,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.ExecutorService;
@@ -246,14 +246,9 @@ class ManagerImpl implements Manager {
 
     @Override
     public void setProfile(
-            String givenName, final String familyName, String about, String aboutEmoji, java.util.Optional<File> avatar
+            String givenName, final String familyName, String about, String aboutEmoji, Optional<File> avatar
     ) throws IOException {
-        context.getProfileHelper()
-                .setProfile(givenName,
-                        familyName,
-                        about,
-                        aboutEmoji,
-                        avatar == null ? null : Optional.fromNullable(avatar.orElse(null)));
+        context.getProfileHelper().setProfile(givenName, familyName, about, aboutEmoji, avatar);
         context.getSyncHelper().sendSyncFetchProfileMessage();
     }
 
@@ -308,7 +303,7 @@ class ManagerImpl implements Manager {
     }
 
     @Override
-    public void setRegistrationLockPin(java.util.Optional<String> pin) throws IOException, NotMasterDeviceException {
+    public void setRegistrationLockPin(Optional<String> pin) throws IOException, NotMasterDeviceException {
         if (!account.isMasterDevice()) {
             throw new NotMasterDeviceException();
         }
@@ -442,7 +437,7 @@ class ManagerImpl implements Manager {
         final var timestamp = System.currentTimeMillis();
         for (var recipient : recipients) {
             if (recipient instanceof RecipientIdentifier.Single single) {
-                final var message = new SignalServiceTypingMessage(action, timestamp, Optional.absent());
+                final var message = new SignalServiceTypingMessage(action, timestamp, Optional.empty());
                 try {
                     final var recipientId = context.getRecipientHelper().resolveRecipient(single);
                     final var result = context.getSendHelper().sendTypingMessage(message, recipientId);
@@ -558,7 +553,7 @@ class ManagerImpl implements Manager {
                     stickerPack.getPackKey(),
                     stickerId,
                     manifestSticker.emoji(),
-                    AttachmentUtils.createAttachment(streamDetails, Optional.absent())));
+                    AttachmentUtils.createAttachment(streamDetails, Optional.empty())));
         }
     }
 
@@ -719,7 +714,7 @@ class ManagerImpl implements Manager {
                             pack.isInstalled(),
                             manifest.title(),
                             manifest.author(),
-                            java.util.Optional.ofNullable(manifest.cover() == null ? null : manifest.cover().toApi()),
+                            Optional.ofNullable(manifest.cover() == null ? null : manifest.cover().toApi()),
                             manifest.stickers().stream().map(JsonStickerPack.JsonSticker::toApi).toList());
                 } catch (Exception e) {
                     logger.warn("Failed to read local sticker pack manifest: {}", e.getMessage(), e);
index 244a110f7ccb8d17cb67a07611a7885194ea8c6d..4db6eddf00ce41066f0d20e651bfb191048b8dde 100644 (file)
@@ -4,7 +4,6 @@ import org.asamk.signal.manager.config.ServiceConfig;
 import org.asamk.signal.manager.config.ServiceEnvironmentConfig;
 import org.signal.libsignal.metadata.certificate.CertificateValidator;
 import org.signal.zkgroup.profiles.ClientZkProfileOperations;
-import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.KeyBackupService;
 import org.whispersystems.signalservice.api.SignalServiceAccountManager;
 import org.whispersystems.signalservice.api.SignalServiceDataStore;
@@ -23,6 +22,7 @@ import org.whispersystems.signalservice.api.util.UptimeSleepTimer;
 import org.whispersystems.signalservice.api.websocket.WebSocketFactory;
 import org.whispersystems.signalservice.internal.websocket.WebSocketConnection;
 
+import java.util.Optional;
 import java.util.concurrent.ExecutorService;
 import java.util.function.Supplier;
 
@@ -137,7 +137,7 @@ public class SignalDependencies {
                 public WebSocketConnection createUnidentifiedWebSocket() {
                     return new WebSocketConnection("unidentified",
                             serviceEnvironmentConfig.getSignalServiceConfiguration(),
-                            Optional.absent(),
+                            Optional.empty(),
                             userAgent,
                             healthMonitor);
                 }
@@ -164,7 +164,7 @@ public class SignalDependencies {
                         sessionLock,
                         userAgent,
                         getSignalWebSocket(),
-                        Optional.absent(),
+                        Optional.empty(),
                         getClientZkProfileOperations(),
                         executor,
                         ServiceConfig.MAX_ENVELOPE_SIZE,
index fd4db601655e79ba6deeab722165639e2e21e379..95d126740edb9ee3fd14d9fb7bc3d01ff02286c4 100644 (file)
@@ -2,8 +2,8 @@ package org.asamk.signal.manager;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.whispersystems.libsignal.util.guava.Preconditions;
 import org.whispersystems.signalservice.api.SignalWebSocket;
+import org.whispersystems.signalservice.api.util.Preconditions;
 import org.whispersystems.signalservice.api.util.SleepTimer;
 import org.whispersystems.signalservice.api.websocket.HealthMonitor;
 import org.whispersystems.signalservice.api.websocket.WebSocketConnectionState;
index cb4cd246b11900af83d8d65a227e8d6a87fc0fb6..144fba4af9903b9ab35cdc156fd2a3f9f6ca5894 100644 (file)
@@ -6,10 +6,11 @@ import org.asamk.signal.manager.storage.recipients.RecipientId;
 import org.signal.libsignal.metadata.ProtocolException;
 import org.whispersystems.libsignal.protocol.CiphertextMessage;
 import org.whispersystems.libsignal.protocol.DecryptionErrorMessage;
-import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
 import org.whispersystems.signalservice.internal.push.SignalServiceProtos;
 
+import java.util.Optional;
+
 public class SendRetryMessageRequestAction implements HandleAction {
 
     private final RecipientId recipientId;
@@ -32,7 +33,7 @@ public class SendRetryMessageRequestAction implements HandleAction {
 
         int senderDevice = protocolException.getSenderDevice();
         Optional<GroupId> groupId = protocolException.getGroupId().isPresent() ? Optional.of(GroupId.unknownVersion(
-                protocolException.getGroupId().get())) : Optional.absent();
+                protocolException.getGroupId().get())) : Optional.empty();
 
         byte[] originalContent;
         int envelopeType;
index 2361c733274fefc70861f8d9c9a19b88966e6c4c..7c6cd58c76bfdd205413fec0bdf4ac2d8341dff1 100644 (file)
@@ -82,7 +82,7 @@ public record MessageEnvelope(
         public static Typing from(final SignalServiceTypingMessage typingMessage) {
             return new Typing(typingMessage.getTimestamp(),
                     typingMessage.isTypingStarted() ? Type.STARTED : Type.STOPPED,
-                    Optional.ofNullable(typingMessage.getGroupId().transform(GroupId::unknownVersion).orNull()));
+                    typingMessage.getGroupId().map(GroupId::unknownVersion));
         }
 
         public enum Type {
@@ -119,43 +119,33 @@ public record MessageEnvelope(
                 final AttachmentFileProvider fileProvider
         ) {
             return new Data(dataMessage.getTimestamp(),
-                    Optional.ofNullable(dataMessage.getGroupContext().transform(GroupContext::from).orNull()),
-                    Optional.ofNullable(dataMessage.getGroupCallUpdate().transform(GroupCallUpdate::from).orNull()),
-                    Optional.ofNullable(dataMessage.getBody().orNull()),
+                    dataMessage.getGroupContext().map(GroupContext::from),
+                    dataMessage.getGroupCallUpdate().map(GroupCallUpdate::from),
+                    dataMessage.getBody(),
                     dataMessage.getExpiresInSeconds(),
                     dataMessage.isExpirationUpdate(),
                     dataMessage.isViewOnce(),
                     dataMessage.isEndSession(),
                     dataMessage.getProfileKey().isPresent(),
-                    Optional.ofNullable(dataMessage.getReaction()
-                            .transform(r -> Reaction.from(r, recipientResolver, addressResolver))
-                            .orNull()),
-                    Optional.ofNullable(dataMessage.getQuote()
-                            .transform(q -> Quote.from(q, recipientResolver, addressResolver, fileProvider))
-                            .orNull()),
-                    Optional.ofNullable(dataMessage.getPayment()
-                            .transform(p -> p.getPaymentNotification().isPresent() ? Payment.from(p) : null)
-                            .orNull()),
+                    dataMessage.getReaction().map(r -> Reaction.from(r, recipientResolver, addressResolver)),
+                    dataMessage.getQuote().map(q -> Quote.from(q, recipientResolver, addressResolver, fileProvider)),
+                    dataMessage.getPayment().map(p -> p.getPaymentNotification().isPresent() ? Payment.from(p) : null),
                     dataMessage.getAttachments()
-                            .transform(a -> a.stream().map(as -> Attachment.from(as, fileProvider)).toList())
-                            .or(List.of()),
-                    Optional.ofNullable(dataMessage.getRemoteDelete()
-                            .transform(SignalServiceDataMessage.RemoteDelete::getTargetSentTimestamp)
-                            .orNull()),
-                    Optional.ofNullable(dataMessage.getSticker().transform(Sticker::from).orNull()),
+                            .map(a -> a.stream().map(as -> Attachment.from(as, fileProvider)).toList())
+                            .orElse(List.of()),
+                    dataMessage.getRemoteDelete().map(SignalServiceDataMessage.RemoteDelete::getTargetSentTimestamp),
+                    dataMessage.getSticker().map(Sticker::from),
                     dataMessage.getSharedContacts()
-                            .transform(a -> a.stream()
+                            .map(a -> a.stream()
                                     .map(sharedContact -> SharedContact.from(sharedContact, fileProvider))
                                     .toList())
-                            .or(List.of()),
+                            .orElse(List.of()),
                     dataMessage.getMentions()
-                            .transform(a -> a.stream()
-                                    .map(m -> Mention.from(m, recipientResolver, addressResolver))
-                                    .toList())
-                            .or(List.of()),
+                            .map(a -> a.stream().map(m -> Mention.from(m, recipientResolver, addressResolver)).toList())
+                            .orElse(List.of()),
                     dataMessage.getPreviews()
-                            .transform(a -> a.stream().map(preview -> Preview.from(preview, fileProvider)).toList())
-                            .or(List.of()));
+                            .map(a -> a.stream().map(preview -> Preview.from(preview, fileProvider)).toList())
+                            .orElse(List.of()));
         }
 
         public record GroupContext(GroupId groupId, boolean isGroupUpdate, int revision) {
@@ -271,13 +261,13 @@ public record MessageEnvelope(
                     final var a = attachment.asPointer();
                     return new Attachment(Optional.of(a.getRemoteId().toString()),
                             Optional.of(fileProvider.getFile(a.getRemoteId())),
-                            Optional.ofNullable(a.getFileName().orNull()),
+                            a.getFileName(),
                             a.getContentType(),
                             a.getUploadTimestamp() == 0 ? Optional.empty() : Optional.of(a.getUploadTimestamp()),
-                            Optional.ofNullable(a.getSize().transform(Integer::longValue).orNull()),
-                            Optional.ofNullable(a.getPreview().orNull()),
+                            a.getSize().map(Integer::longValue),
+                            a.getPreview(),
                             Optional.empty(),
-                            Optional.ofNullable(a.getCaption().orNull()),
+                            a.getCaption(),
                             a.getWidth() == 0 ? Optional.empty() : Optional.of(a.getWidth()),
                             a.getHeight() == 0 ? Optional.empty() : Optional.of(a.getHeight()),
                             a.getVoiceNote(),
@@ -287,13 +277,13 @@ public record MessageEnvelope(
                     final var a = attachment.asStream();
                     return new Attachment(Optional.empty(),
                             Optional.empty(),
-                            Optional.ofNullable(a.getFileName().orNull()),
+                            a.getFileName(),
                             a.getContentType(),
                             a.getUploadTimestamp() == 0 ? Optional.empty() : Optional.of(a.getUploadTimestamp()),
                             Optional.of(a.getLength()),
-                            Optional.ofNullable(a.getPreview().orNull()),
+                            a.getPreview(),
                             Optional.empty(),
-                            Optional.ofNullable(a.getCaption().orNull()),
+                            a.getCaption(),
                             a.getWidth() == 0 ? Optional.empty() : Optional.of(a.getWidth()),
                             a.getHeight() == 0 ? Optional.empty() : Optional.of(a.getHeight()),
                             a.getVoiceNote(),
@@ -347,13 +337,11 @@ public record MessageEnvelope(
                     final AttachmentFileProvider fileProvider
             ) {
                 return new SharedContact(Name.from(sharedContact.getName()),
-                        Optional.ofNullable(sharedContact.getAvatar()
-                                .transform(avatar1 -> Avatar.from(avatar1, fileProvider))
-                                .orNull()),
-                        sharedContact.getPhone().transform(p -> p.stream().map(Phone::from).toList()).or(List.of()),
-                        sharedContact.getEmail().transform(p -> p.stream().map(Email::from).toList()).or(List.of()),
-                        sharedContact.getAddress().transform(p -> p.stream().map(Address::from).toList()).or(List.of()),
-                        Optional.ofNullable(sharedContact.getOrganization().orNull()));
+                        sharedContact.getAvatar().map(avatar1 -> Avatar.from(avatar1, fileProvider)),
+                        sharedContact.getPhone().map(p -> p.stream().map(Phone::from).toList()).orElse(List.of()),
+                        sharedContact.getEmail().map(p -> p.stream().map(Email::from).toList()).orElse(List.of()),
+                        sharedContact.getAddress().map(p -> p.stream().map(Address::from).toList()).orElse(List.of()),
+                        sharedContact.getOrganization());
             }
 
             public record Name(
@@ -366,12 +354,12 @@ public record MessageEnvelope(
             ) {
 
                 static Name from(org.whispersystems.signalservice.api.messages.shared.SharedContact.Name name) {
-                    return new Name(Optional.ofNullable(name.getDisplay().orNull()),
-                            Optional.ofNullable(name.getGiven().orNull()),
-                            Optional.ofNullable(name.getFamily().orNull()),
-                            Optional.ofNullable(name.getPrefix().orNull()),
-                            Optional.ofNullable(name.getSuffix().orNull()),
-                            Optional.ofNullable(name.getMiddle().orNull()));
+                    return new Name(name.getDisplay(),
+                            name.getGiven(),
+                            name.getFamily(),
+                            name.getPrefix(),
+                            name.getSuffix(),
+                            name.getMiddle());
                 }
             }
 
@@ -390,9 +378,7 @@ public record MessageEnvelope(
             ) {
 
                 static Phone from(org.whispersystems.signalservice.api.messages.shared.SharedContact.Phone phone) {
-                    return new Phone(phone.getValue(),
-                            Type.from(phone.getType()),
-                            Optional.ofNullable(phone.getLabel().orNull()));
+                    return new Phone(phone.getValue(), Type.from(phone.getType()), phone.getLabel());
                 }
 
                 public enum Type {
@@ -417,9 +403,7 @@ public record MessageEnvelope(
             ) {
 
                 static Email from(org.whispersystems.signalservice.api.messages.shared.SharedContact.Email email) {
-                    return new Email(email.getValue(),
-                            Type.from(email.getType()),
-                            Optional.ofNullable(email.getLabel().orNull()));
+                    return new Email(email.getValue(), Type.from(email.getType()), email.getLabel());
                 }
 
                 public enum Type {
@@ -453,14 +437,14 @@ public record MessageEnvelope(
 
                 static Address from(org.whispersystems.signalservice.api.messages.shared.SharedContact.PostalAddress address) {
                     return new Address(Address.Type.from(address.getType()),
-                            Optional.ofNullable(address.getLabel().orNull()),
-                            Optional.ofNullable(address.getLabel().orNull()),
-                            Optional.ofNullable(address.getLabel().orNull()),
-                            Optional.ofNullable(address.getLabel().orNull()),
-                            Optional.ofNullable(address.getLabel().orNull()),
-                            Optional.ofNullable(address.getLabel().orNull()),
-                            Optional.ofNullable(address.getLabel().orNull()),
-                            Optional.ofNullable(address.getLabel().orNull()));
+                            address.getLabel(),
+                            address.getLabel(),
+                            address.getLabel(),
+                            address.getLabel(),
+                            address.getLabel(),
+                            address.getLabel(),
+                            address.getLabel(),
+                            address.getLabel());
                 }
 
                 public enum Type {
@@ -488,9 +472,7 @@ public record MessageEnvelope(
                         preview.getDescription(),
                         preview.getDate(),
                         preview.getUrl(),
-                        Optional.ofNullable(preview.getImage()
-                                .transform(as -> Attachment.from(as, fileProvider))
-                                .orNull()));
+                        preview.getImage().map(as -> Attachment.from(as, fileProvider)));
             }
         }
     }
@@ -512,30 +494,22 @@ public record MessageEnvelope(
                 RecipientAddressResolver addressResolver,
                 final AttachmentFileProvider fileProvider
         ) {
-            return new Sync(Optional.ofNullable(syncMessage.getSent()
-                    .transform(s -> Sent.from(s, recipientResolver, addressResolver, fileProvider))
-                    .orNull()),
-                    Optional.ofNullable(syncMessage.getBlockedList()
-                            .transform(b -> Blocked.from(b, recipientResolver, addressResolver))
-                            .orNull()),
+            return new Sync(syncMessage.getSent()
+                    .map(s -> Sent.from(s, recipientResolver, addressResolver, fileProvider)),
+                    syncMessage.getBlockedList().map(b -> Blocked.from(b, recipientResolver, addressResolver)),
                     syncMessage.getRead()
-                            .transform(r -> r.stream()
-                                    .map(rm -> Read.from(rm, recipientResolver, addressResolver))
-                                    .toList())
-                            .or(List.of()),
+                            .map(r -> r.stream().map(rm -> Read.from(rm, recipientResolver, addressResolver)).toList())
+                            .orElse(List.of()),
                     syncMessage.getViewed()
-                            .transform(r -> r.stream()
+                            .map(r -> r.stream()
                                     .map(rm -> Viewed.from(rm, recipientResolver, addressResolver))
                                     .toList())
-                            .or(List.of()),
-                    Optional.ofNullable(syncMessage.getViewOnceOpen()
-                            .transform(rm -> ViewOnceOpen.from(rm, recipientResolver, addressResolver))
-                            .orNull()),
-                    Optional.ofNullable(syncMessage.getContacts().transform(Contacts::from).orNull()),
-                    Optional.ofNullable(syncMessage.getGroups().transform(Groups::from).orNull()),
-                    Optional.ofNullable(syncMessage.getMessageRequestResponse()
-                            .transform(m -> MessageRequestResponse.from(m, recipientResolver, addressResolver))
-                            .orNull()));
+                            .orElse(List.of()),
+                    syncMessage.getViewOnceOpen().map(rm -> ViewOnceOpen.from(rm, recipientResolver, addressResolver)),
+                    syncMessage.getContacts().map(Contacts::from),
+                    syncMessage.getGroups().map(Groups::from),
+                    syncMessage.getMessageRequestResponse()
+                            .map(m -> MessageRequestResponse.from(m, recipientResolver, addressResolver)));
         }
 
         public record Sent(
@@ -554,10 +528,8 @@ public record MessageEnvelope(
             ) {
                 return new Sent(sentMessage.getTimestamp(),
                         sentMessage.getExpirationStartTimestamp(),
-                        Optional.ofNullable(sentMessage.getDestination()
-                                .transform(d -> addressResolver.resolveRecipientAddress(recipientResolver.resolveRecipient(
-                                        d)))
-                                .orNull()),
+                        sentMessage.getDestination()
+                                .map(d -> addressResolver.resolveRecipientAddress(recipientResolver.resolveRecipient(d))),
                         sentMessage.getRecipients()
                                 .stream()
                                 .map(d -> addressResolver.resolveRecipientAddress(recipientResolver.resolveRecipient(d)))
@@ -638,13 +610,9 @@ public record MessageEnvelope(
                     RecipientAddressResolver addressResolver
             ) {
                 return new MessageRequestResponse(Type.from(messageRequestResponse.getType()),
-                        Optional.ofNullable(messageRequestResponse.getGroupId()
-                                .transform(GroupId::unknownVersion)
-                                .orNull()),
-                        Optional.ofNullable(messageRequestResponse.getPerson()
-                                .transform(p -> addressResolver.resolveRecipientAddress(recipientResolver.resolveRecipient(
-                                        p)))
-                                .orNull()));
+                        messageRequestResponse.getGroupId().map(GroupId::unknownVersion),
+                        messageRequestResponse.getPerson()
+                                .map(p -> addressResolver.resolveRecipientAddress(recipientResolver.resolveRecipient(p))));
             }
 
             public enum Type {
@@ -682,17 +650,17 @@ public record MessageEnvelope(
     ) {
 
         public static Call from(final SignalServiceCallMessage callMessage) {
-            return new Call(Optional.ofNullable(callMessage.getDestinationDeviceId().orNull()),
-                    Optional.ofNullable(callMessage.getGroupId().transform(GroupId::unknownVersion).orNull()),
-                    Optional.ofNullable(callMessage.getTimestamp().orNull()),
-                    Optional.ofNullable(callMessage.getOfferMessage().transform(Offer::from).orNull()),
-                    Optional.ofNullable(callMessage.getAnswerMessage().transform(Answer::from).orNull()),
-                    Optional.ofNullable(callMessage.getHangupMessage().transform(Hangup::from).orNull()),
-                    Optional.ofNullable(callMessage.getBusyMessage().transform(Busy::from).orNull()),
+            return new Call(callMessage.getDestinationDeviceId(),
+                    callMessage.getGroupId().map(GroupId::unknownVersion),
+                    callMessage.getTimestamp(),
+                    callMessage.getOfferMessage().map(Offer::from),
+                    callMessage.getAnswerMessage().map(Answer::from),
+                    callMessage.getHangupMessage().map(Hangup::from),
+                    callMessage.getBusyMessage().map(Busy::from),
                     callMessage.getIceUpdateMessages()
-                            .transform(m -> m.stream().map(IceUpdate::from).toList())
-                            .or(List.of()),
-                    Optional.ofNullable(callMessage.getOpaqueMessage().transform(Opaque::from).orNull()));
+                            .map(m -> m.stream().map(IceUpdate::from).toList())
+                            .orElse(List.of()),
+                    callMessage.getOpaqueMessage().map(Opaque::from));
         }
 
         public record Offer(long id, String sdp, Type type, byte[] opaque) {
@@ -813,15 +781,12 @@ public record MessageEnvelope(
         Optional<Sync> sync;
         Optional<Call> call;
         if (content != null) {
-            receipt = Optional.ofNullable(content.getReceiptMessage().transform(Receipt::from).orNull());
-            typing = Optional.ofNullable(content.getTypingMessage().transform(Typing::from).orNull());
-            data = Optional.ofNullable(content.getDataMessage()
-                    .transform(dataMessage -> Data.from(dataMessage, recipientResolver, addressResolver, fileProvider))
-                    .orNull());
-            sync = Optional.ofNullable(content.getSyncMessage()
-                    .transform(s -> Sync.from(s, recipientResolver, addressResolver, fileProvider))
-                    .orNull());
-            call = Optional.ofNullable(content.getCallMessage().transform(Call::from).orNull());
+            receipt = content.getReceiptMessage().map(Receipt::from);
+            typing = content.getTypingMessage().map(Typing::from);
+            data = content.getDataMessage()
+                    .map(dataMessage -> Data.from(dataMessage, recipientResolver, addressResolver, fileProvider));
+            sync = content.getSyncMessage().map(s -> Sync.from(s, recipientResolver, addressResolver, fileProvider));
+            call = content.getCallMessage().map(Call::from);
         } else {
             receipt = envelope.isReceipt() ? Optional.of(new Receipt(envelope.getServerReceivedTimestamp(),
                     Receipt.Type.DELIVERY,
index ec9099efb8d0e02886ed5ec6d91aeae6d7f8746e..5890b6a3ad804567f929df58e50fdf0f651550c7 100644 (file)
@@ -4,7 +4,6 @@ import org.bouncycastle.util.encoders.Hex;
 import org.whispersystems.libsignal.InvalidKeyException;
 import org.whispersystems.libsignal.ecc.Curve;
 import org.whispersystems.libsignal.ecc.ECPublicKey;
-import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.push.TrustStore;
 import org.whispersystems.signalservice.internal.configuration.SignalCdnUrl;
 import org.whispersystems.signalservice.internal.configuration.SignalCdshUrl;
@@ -18,6 +17,7 @@ import org.whispersystems.signalservice.internal.configuration.SignalStorageUrl;
 import java.util.Base64;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 import okhttp3.Dns;
 import okhttp3.Interceptor;
@@ -42,8 +42,8 @@ class LiveConfig {
     private final static String SIGNAL_CDSH_URL = "";
     private final static TrustStore TRUST_STORE = new WhisperTrustStore();
 
-    private final static Optional<Dns> dns = Optional.absent();
-    private final static Optional<SignalProxy> proxy = Optional.absent();
+    private final static Optional<Dns> dns = Optional.empty();
+    private final static Optional<SignalProxy> proxy = Optional.empty();
 
     private final static byte[] zkGroupServerPublicParams = Base64.getDecoder()
             .decode("AMhf5ywVwITZMsff/eCyudZx9JDmkkkbV6PInzG4p8x3VqVJSFiMvnvlEKWuRob/1eaIetR31IYeAbm0NdOuHH8Qi+Rexi1wLlpzIo1gstHWBfZzy1+qHRV5A4TqPp15YzBPm0WSggW6PbSn+F4lf57VCnHF7p8SvzAA2ZZJPYJURt8X7bbg+H3i+PEjH9DXItNEqs2sNcug37xZQDLm7X36nOoGPs54XsEGzPdEV+itQNGUFEjY6X9Uv+Acuks7NpyGvCoKxGwgKgE5XyJ+nNKlyHHOLb6N1NuHyBrZrgtY/JYJHRooo5CEqYKBqdFnmbTVGEkCvJKxLnjwKWf+fEPoWeQFj5ObDjcKMZf2Jm2Ae69x+ikU5gBXsRmoF94GXQ==");
index 71b63e71fa9ebd119529e60918cfe95cae94596e..ed53d8d89afb9cae651de248c630d26634228cdd 100644 (file)
@@ -4,7 +4,6 @@ import org.bouncycastle.util.encoders.Hex;
 import org.whispersystems.libsignal.InvalidKeyException;
 import org.whispersystems.libsignal.ecc.Curve;
 import org.whispersystems.libsignal.ecc.ECPublicKey;
-import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.push.TrustStore;
 import org.whispersystems.signalservice.internal.configuration.SignalCdnUrl;
 import org.whispersystems.signalservice.internal.configuration.SignalCdshUrl;
@@ -18,6 +17,7 @@ import org.whispersystems.signalservice.internal.configuration.SignalStorageUrl;
 import java.util.Base64;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 import okhttp3.Dns;
 import okhttp3.Interceptor;
@@ -42,8 +42,8 @@ class StagingConfig {
     private final static String SIGNAL_CDSH_URL = "https://cdsh.staging.signal.org";
     private final static TrustStore TRUST_STORE = new WhisperTrustStore();
 
-    private final static Optional<Dns> dns = Optional.absent();
-    private final static Optional<SignalProxy> proxy = Optional.absent();
+    private final static Optional<Dns> dns = Optional.empty();
+    private final static Optional<SignalProxy> proxy = Optional.empty();
 
     private final static byte[] zkGroupServerPublicParams = Base64.getDecoder()
             .decode("ABSY21VckQcbSXVNCGRYJcfWHiAMZmpTtTELcDmxgdFbtp/bWsSxZdMKzfCp8rvIs8ocCU3B37fT3r4Mi5qAemeGeR2X+/YmOGR5ofui7tD5mDQfstAI9i+4WpMtIe8KC3wU5w3Inq3uNWVmoGtpKndsNfwJrCg0Hd9zmObhypUnSkfYn2ooMOOnBpfdanRtrvetZUayDMSC5iSRcXKpdlukrpzzsCIvEwjwQlJYVPOQPj4V0F4UXXBdHSLK05uoPBCQG8G9rYIGedYsClJXnbrgGYG3eMTG5hnx4X4ntARBgELuMWWUEEfSK0mjXg+/2lPmWcTZWR9nkqgQQP0tbzuiPm74H2wMO4u1Wafe+UwyIlIT9L7KLS19Aw8r4sPrXQ==");
index fc1bcfc401eaf062bec60e872ee70ec5e0489cf8..328074b7e48a0032d10cab62f06b40a2310abc12 100644 (file)
@@ -13,13 +13,13 @@ import org.asamk.signal.manager.util.NumberVerificationUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.whispersystems.libsignal.InvalidKeyException;
-import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.push.ACI;
 import org.whispersystems.signalservice.api.push.PNI;
 import org.whispersystems.signalservice.api.push.exceptions.AuthorizationFailedException;
 import org.whispersystems.signalservice.api.util.DeviceNameUtil;
 
 import java.io.IOException;
+import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 
 public class AccountHelper {
@@ -176,7 +176,7 @@ public class AccountHelper {
         // When setting an empty GCM id, the Signal-Server also sets the fetchesMessages property to false.
         // If this is the master device, other users can't send messages to this number anymore.
         // If this is a linked device, other users can still send messages, but this device doesn't receive them anymore.
-        dependencies.getAccountManager().setGcmId(Optional.absent());
+        dependencies.getAccountManager().setGcmId(Optional.empty());
 
         account.setRegistered(false);
         unregisteredListener.call();
index 140b5971a42fe413f91bfcb4a00886a0bdebcfc8..e40dbdfbaa734c441d01983576b3e49a1e799eb3 100644 (file)
@@ -34,7 +34,6 @@ import org.signal.zkgroup.groups.GroupSecretParams;
 import org.signal.zkgroup.profiles.ProfileKey;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.groupsv2.GroupLinkNotActiveException;
 import org.whispersystems.signalservice.api.messages.SignalServiceAttachment;
 import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentStream;
@@ -53,6 +52,7 @@ import java.nio.file.Files;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 
 public class GroupHelper {
@@ -91,10 +91,10 @@ public class GroupHelper {
     public Optional<SignalServiceAttachmentStream> createGroupAvatarAttachment(GroupIdV1 groupId) throws IOException {
         final var streamDetails = context.getAvatarStore().retrieveGroupAvatar(groupId);
         if (streamDetails == null) {
-            return Optional.absent();
+            return Optional.empty();
         }
 
-        return Optional.of(AttachmentUtils.createAttachment(streamDetails, Optional.absent()));
+        return Optional.of(AttachmentUtils.createAttachment(streamDetails, Optional.empty()));
     }
 
     public GroupInfoV2 getOrMigrateGroup(
@@ -625,9 +625,7 @@ public class GroupHelper {
 
         try {
             final var attachment = createGroupAvatarAttachment(g.getGroupId());
-            if (attachment.isPresent()) {
-                group.withAvatar(attachment.get());
-            }
+            attachment.ifPresent(group::withAvatar);
         } catch (IOException e) {
             throw new AttachmentInvalidException(g.getGroupId().toBase64(), e);
         }
index a40c62234b89fd584dbe2463653c84ba324fa0e2..92da383e08acf5fd8195f6246c111dbf350d46b7 100644 (file)
@@ -10,7 +10,6 @@ import org.asamk.signal.manager.groups.GroupPermission;
 import org.asamk.signal.manager.groups.GroupUtils;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
 import org.asamk.signal.manager.storage.groups.GroupInfoV2;
-import org.asamk.signal.manager.storage.recipients.Profile;
 import org.asamk.signal.manager.storage.recipients.RecipientId;
 import org.asamk.signal.manager.util.IOUtils;
 import org.asamk.signal.manager.util.Utils;
@@ -29,7 +28,6 @@ import org.signal.zkgroup.groups.GroupSecretParams;
 import org.signal.zkgroup.groups.UuidCiphertext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil;
 import org.whispersystems.signalservice.api.groupsv2.GroupCandidate;
 import org.whispersystems.signalservice.api.groupsv2.GroupLinkNotActiveException;
@@ -48,6 +46,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Optional;
 import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
@@ -90,7 +89,7 @@ class GroupV2Helper {
 
         return dependencies.getGroupsV2Api()
                 .getGroupJoinInfo(groupSecretParams,
-                        Optional.fromNullable(password).transform(GroupLinkPassword::serialize),
+                        Optional.ofNullable(password).map(GroupLinkPassword::serialize),
                         getGroupAuthForToday(groupSecretParams));
     }
 
@@ -145,44 +144,27 @@ class GroupV2Helper {
             return null;
         }
 
-        if (!areMembersValid(members)) return null;
-
-        final var self = new GroupCandidate(getSelfAci().uuid(), Optional.fromNullable(profileKeyCredential));
+        final var self = new GroupCandidate(getSelfAci().uuid(), Optional.of(profileKeyCredential));
         final var memberList = new ArrayList<>(members);
         final var credentials = context.getProfileHelper().getRecipientProfileKeyCredential(memberList).stream();
         final var uuids = memberList.stream()
                 .map(member -> context.getRecipientHelper().resolveSignalServiceAddress(member).getServiceId().uuid());
         var candidates = Utils.zip(uuids,
                         credentials,
-                        (uuid, credential) -> new GroupCandidate(uuid, Optional.fromNullable(credential)))
+                        (uuid, credential) -> new GroupCandidate(uuid, Optional.ofNullable(credential)))
                 .collect(Collectors.toSet());
 
         final var groupSecretParams = GroupSecretParams.generate();
         return dependencies.getGroupsV2Operations()
                 .createNewGroup(groupSecretParams,
                         name,
-                        Optional.fromNullable(avatar),
+                        Optional.ofNullable(avatar),
                         self,
                         candidates,
                         Member.Role.DEFAULT,
                         0);
     }
 
-    private boolean areMembersValid(final Set<RecipientId> members) {
-        final var noGv2Capability = context.getProfileHelper()
-                .getRecipientProfile(new ArrayList<>(members))
-                .stream()
-                .filter(profile -> profile != null && !profile.getCapabilities().contains(Profile.Capability.gv2))
-                .collect(Collectors.toSet());
-        if (noGv2Capability.size() > 0) {
-            logger.warn("Cannot create a V2 group as some members don't support Groups V2: {}",
-                    noGv2Capability.stream().map(Profile::getDisplayName).collect(Collectors.joining(", ")));
-            return false;
-        }
-
-        return true;
-    }
-
     Pair<DecryptedGroup, GroupChange> updateGroup(
             GroupInfoV2 groupInfoV2, String name, String description, File avatarFile
     ) throws IOException {
@@ -212,21 +194,17 @@ class GroupV2Helper {
     ) throws IOException {
         GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
 
-        if (!areMembersValid(newMembers)) {
-            throw new IOException("Failed to update group");
-        }
-
         final var memberList = new ArrayList<>(newMembers);
         final var credentials = context.getProfileHelper().getRecipientProfileKeyCredential(memberList).stream();
         final var uuids = memberList.stream()
                 .map(member -> context.getRecipientHelper().resolveSignalServiceAddress(member).getServiceId().uuid());
         var candidates = Utils.zip(uuids,
                         credentials,
-                        (uuid, credential) -> new GroupCandidate(uuid, Optional.fromNullable(credential)))
+                        (uuid, credential) -> new GroupCandidate(uuid, Optional.ofNullable(credential)))
                 .collect(Collectors.toSet());
 
         final var aci = getSelfAci();
-        final var change = groupOperations.createModifyGroupMembershipChange(candidates, aci.uuid());
+        final var change = groupOperations.createModifyGroupMembershipChange(candidates, Set.of(), aci.uuid());
 
         change.setSourceUuid(getSelfAci().toByteString());
 
@@ -431,7 +409,7 @@ class GroupV2Helper {
             GroupInfoV2 groupInfoV2, Set<UUID> uuids
     ) throws IOException {
         final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
-        return commitChange(groupInfoV2, groupOperations.createRemoveMembersChange(uuids));
+        return commitChange(groupInfoV2, groupOperations.createRemoveMembersChange(uuids, false));
     }
 
     private Pair<DecryptedGroup, GroupChange> commitChange(
@@ -453,7 +431,7 @@ class GroupV2Helper {
         }
 
         var signedGroupChange = dependencies.getGroupsV2Api()
-                .patchGroup(changeActions, getGroupAuthForToday(groupSecretParams), Optional.absent());
+                .patchGroup(changeActions, getGroupAuthForToday(groupSecretParams), Optional.empty());
 
         return new Pair<>(decryptedGroupState, signedGroupChange);
     }
@@ -470,7 +448,7 @@ class GroupV2Helper {
         return dependencies.getGroupsV2Api()
                 .patchGroup(changeActions,
                         getGroupAuthForToday(groupSecretParams),
-                        Optional.fromNullable(password).transform(GroupLinkPassword::serialize));
+                        Optional.ofNullable(password).map(GroupLinkPassword::serialize));
     }
 
     DecryptedGroup getUpdatedDecryptedGroup(
@@ -493,7 +471,7 @@ class GroupV2Helper {
                     .forGroup(GroupSecretParams.deriveFromMasterKey(groupMasterKey));
 
             try {
-                return groupOperations.decryptChange(GroupChange.parseFrom(signedGroupChange), true).orNull();
+                return groupOperations.decryptChange(GroupChange.parseFrom(signedGroupChange), true).orElse(null);
             } catch (VerificationFailedException | InvalidGroupStateException | InvalidProtocolBufferException e) {
                 return null;
             }
index 2400128cfdde4ff5aae0e3bc20524f78a5f34eaa..fb56f262d36652fc4ab1363924ac4485856b318f 100644 (file)
@@ -270,7 +270,7 @@ public final class IncomingMessageHandler {
             final DecryptionErrorMessage message
     ) {
         final var logEntries = account.getMessageSendLogStore()
-                .findMessages(sender, senderDeviceId, message.getTimestamp(), !message.getRatchetKey().isPresent());
+                .findMessages(sender, senderDeviceId, message.getTimestamp(), message.getRatchetKey().isEmpty());
 
         for (final var logEntry : logEntries) {
             actions.add(new ResendMessageAction(sender, message.getTimestamp(), logEntry));
@@ -318,7 +318,7 @@ public final class IncomingMessageHandler {
         account.setMultiDevice(true);
         if (syncMessage.getSent().isPresent()) {
             var message = syncMessage.getSent().get();
-            final var destination = message.getDestination().orNull();
+            final var destination = message.getDestination().orElse(null);
             actions.addAll(handleSignalServiceDataMessage(message.getMessage(),
                     true,
                     sender,
@@ -388,11 +388,11 @@ public final class IncomingMessageHandler {
         if (syncMessage.getStickerPackOperations().isPresent()) {
             final var stickerPackOperationMessages = syncMessage.getStickerPackOperations().get();
             for (var m : stickerPackOperationMessages) {
-                if (!m.getPackId().isPresent()) {
+                if (m.getPackId().isEmpty()) {
                     continue;
                 }
                 final var stickerPackId = StickerPackId.deserialize(m.getPackId().get());
-                final var installed = !m.getType().isPresent()
+                final var installed = m.getType().isEmpty()
                         || m.getType().get() == StickerPackOperationMessage.Type.INSTALL;
 
                 var sticker = account.getStickerStore().getStickerPack(stickerPackId);
@@ -488,12 +488,12 @@ public final class IncomingMessageHandler {
             return false;
         }
 
-        if (content == null || !content.getDataMessage().isPresent()) {
+        if (content == null || content.getDataMessage().isEmpty()) {
             return false;
         }
 
         var message = content.getDataMessage().get();
-        if (!message.getGroupContext().isPresent()) {
+        if (message.getGroupContext().isEmpty()) {
             return false;
         }
 
index 8e58e9769ce34c693d529311bc42936b94b0efb5..43a5ddb774e7a2415e8d7cff764f55a13c91775d 100644 (file)
@@ -15,8 +15,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.whispersystems.libsignal.IdentityKey;
 import org.whispersystems.libsignal.InvalidKeyException;
-import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess;
+import org.whispersystems.signalservice.api.profiles.AvatarUploadParams;
 import org.whispersystems.signalservice.api.profiles.ProfileAndCredential;
 import org.whispersystems.signalservice.api.profiles.SignalServiceProfile;
 import org.whispersystems.signalservice.api.push.SignalServiceAddress;
@@ -33,6 +33,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.Locale;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.Set;
 
 import io.reactivex.rxjava3.core.Flowable;
@@ -130,20 +131,23 @@ public final class ProfileHelper {
         var newProfile = builder.build();
 
         if (uploadProfile) {
-            try (final var streamDetails = avatar == null
-                    ? context.getAvatarStore()
-                    .retrieveProfileAvatar(account.getSelfRecipientAddress())
-                    : avatar.isPresent() ? Utils.createStreamDetailsFromFile(avatar.get()) : null) {
+            try (final var streamDetails = avatar != null && avatar.isPresent() ? Utils.createStreamDetailsFromFile(
+                    avatar.get()) : null) {
+                final var avatarUploadParams = avatar == null
+                        ? AvatarUploadParams.unchanged(true)
+                        : avatar.isPresent()
+                                ? AvatarUploadParams.forAvatar(streamDetails)
+                                : AvatarUploadParams.unchanged(false);
                 final var avatarPath = dependencies.getAccountManager()
                         .setVersionedProfile(account.getAci(),
                                 account.getProfileKey(),
                                 newProfile.getInternalServiceName(),
                                 newProfile.getAbout() == null ? "" : newProfile.getAbout(),
                                 newProfile.getAboutEmoji() == null ? "" : newProfile.getAboutEmoji(),
-                                Optional.absent(),
-                                streamDetails,
+                                Optional.empty(),
+                                avatarUploadParams,
                                 List.of(/* TODO */));
-                builder.withAvatarUrlPath(avatarPath.orNull());
+                builder.withAvatarUrlPath(avatarPath.orElse(null));
                 newProfile = builder.build();
             }
         }
@@ -202,7 +206,7 @@ public final class ProfileHelper {
 
     private SignalServiceProfile retrieveProfileSync(String username) throws IOException {
         final var locale = Utils.getDefaultLocale(Locale.US);
-        return dependencies.getMessageReceiver().retrieveProfileByUsername(username, Optional.absent(), locale);
+        return dependencies.getMessageReceiver().retrieveProfileByUsername(username, Optional.empty(), locale);
     }
 
     private Profile decryptProfileAndDownloadAvatar(
@@ -246,7 +250,7 @@ public final class ProfileHelper {
             RecipientId recipientId, SignalServiceProfile.RequestType requestType
     ) {
         var unidentifiedAccess = getUnidentifiedAccess(recipientId);
-        var profileKey = Optional.fromNullable(account.getProfileStore().getProfileKey(recipientId));
+        var profileKey = Optional.ofNullable(account.getProfileStore().getProfileKey(recipientId));
 
         logger.trace("Retrieving profile for {} {}",
                 recipientId,
@@ -259,7 +263,7 @@ public final class ProfileHelper {
             if (requestType == SignalServiceProfile.RequestType.PROFILE_AND_CREDENTIAL
                     || account.getProfileStore().getProfileKeyCredential(recipientId) == null) {
                 logger.trace("Storing profile credential");
-                final var profileKeyCredential = p.getProfileKeyCredential().orNull();
+                final var profileKeyCredential = p.getProfileKeyCredential().orElse(null);
                 account.getProfileStore().storeProfileKeyCredential(recipientId, profileKeyCredential);
             }
 
@@ -324,8 +328,8 @@ public final class ProfileHelper {
                 throw new NotFoundException("Profile not found");
             } else {
                 throw pair.getExecutionError()
-                        .or(pair.getApplicationError())
-                        .or(new IOException("Unknown error while retrieving profile"));
+                        .or(pair::getApplicationError)
+                        .orElseThrow(() -> new IOException("Unknown error while retrieving profile"));
             }
         });
     }
@@ -380,6 +384,6 @@ public final class ProfileHelper {
             return unidentifiedAccess.get().getTargetUnidentifiedAccess();
         }
 
-        return Optional.absent();
+        return Optional.empty();
     }
 }
index 278fb107d6a1dc9c2d2c7d2a5943e5229579cb81..5a1942f9d250eac9429d7f246bf7eeb5aec444ab 100644 (file)
@@ -91,7 +91,7 @@ public class RecipientHelper {
 
     public RecipientId refreshRegisteredUser(RecipientId recipientId) throws IOException, UnregisteredRecipientException {
         final var address = resolveSignalServiceAddress(recipientId);
-        if (!address.getNumber().isPresent()) {
+        if (address.getNumber().isEmpty()) {
             return recipientId;
         }
         final var number = address.getNumber().get();
index 1fb7c35cbf2f0d7b963c3fc03fc799256e27ab5f..375c2def9f099845cca15038cf23e7022381ebdb 100644 (file)
@@ -21,7 +21,6 @@ import org.whispersystems.libsignal.InvalidRegistrationIdException;
 import org.whispersystems.libsignal.NoSessionException;
 import org.whispersystems.libsignal.SignalProtocolAddress;
 import org.whispersystems.libsignal.protocol.DecryptionErrorMessage;
-import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.SignalServiceMessageSender;
 import org.whispersystems.signalservice.api.crypto.ContentHint;
 import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess;
@@ -47,6 +46,7 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
@@ -138,7 +138,7 @@ public class SendHelper {
         final var result = handleSendMessage(recipientId,
                 (messageSender, address, unidentifiedAccess) -> messageSender.sendRetryReceipt(address,
                         unidentifiedAccess,
-                        groupId.transform(GroupId::serialize),
+                        groupId.map(GroupId::serialize),
                         errorMessage));
         handleSendMessageResult(result);
         return result;
@@ -222,7 +222,7 @@ public class SendHelper {
                             timestamp,
                             messageSendLogEntry.content(),
                             messageSendLogEntry.contentHint(),
-                            Optional.absent()));
+                            Optional.empty()));
         }
 
         final var groupId = messageSendLogEntry.groupId().get();
@@ -457,7 +457,7 @@ public class SendHelper {
             }
 
             final var access = context.getUnidentifiedAccessHelper().getAccessFor(recipientId);
-            if (!access.isPresent() || !access.get().getTargetUnidentifiedAccess().isPresent()) {
+            if (access.isEmpty() || access.get().getTargetUnidentifiedAccess().isEmpty()) {
                 continue;
             }
 
index c432ad9a99ce5523ee962815692bad32c26bd445..566c2b1537e084f9bb37fab67db9a68c9fc67b62 100644 (file)
@@ -64,14 +64,14 @@ public class StickerHelper {
             context.getStickerPackStore().storeSticker(packId, id, o -> IOUtils.copyStream(inputStream, o));
         }
 
-        final var jsonManifest = new JsonStickerPack(manifest.getTitle().orNull(),
-                manifest.getAuthor().orNull(),
+        final var jsonManifest = new JsonStickerPack(manifest.getTitle().orElse(null),
+                manifest.getAuthor().orElse(null),
                 manifest.getCover()
-                        .transform(c -> new JsonStickerPack.JsonSticker(c.getId(),
+                        .map(c -> new JsonStickerPack.JsonSticker(c.getId(),
                                 c.getEmoji(),
                                 String.valueOf(c.getId()),
                                 c.getContentType()))
-                        .orNull(),
+                        .orElse(null),
                 manifest.getStickers()
                         .stream()
                         .map(c -> new JsonStickerPack.JsonSticker(c.getId(),
index b85d0050b8ed1caa568a21ce09f6e23de7430916..c28eb6134d9fb4caa46e5c79cb8bfb6d2fefb84a 100644 (file)
@@ -13,7 +13,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.whispersystems.libsignal.IdentityKey;
 import org.whispersystems.libsignal.InvalidKeyException;
-import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.storage.SignalAccountRecord;
 import org.whispersystems.signalservice.api.storage.SignalStorageManifest;
 import org.whispersystems.signalservice.api.storage.SignalStorageRecord;
@@ -25,6 +24,7 @@ import java.io.IOException;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 
 public class StorageHelper {
 
@@ -51,7 +51,7 @@ public class StorageHelper {
             return;
         }
 
-        if (!manifest.isPresent()) {
+        if (manifest.isEmpty()) {
             logger.debug("Manifest is up to date, does not exist or couldn't be decrypted, ignoring.");
             return;
         }
@@ -79,7 +79,7 @@ public class StorageHelper {
     }
 
     private void readContactRecord(final SignalStorageRecord record) {
-        if (record == null || !record.getContact().isPresent()) {
+        if (record == null || record.getContact().isEmpty()) {
             return;
         }
 
@@ -92,9 +92,9 @@ public class StorageHelper {
                 (contact == null || !contact.isBlocked()) && contactRecord.isBlocked()
         )) {
             final var newContact = (contact == null ? Contact.newBuilder() : Contact.newBuilder(contact)).withBlocked(
-                            contactRecord.isBlocked())
-                    .withName((contactRecord.getGivenName().or("") + " " + contactRecord.getFamilyName().or("")).trim())
-                    .build();
+                    contactRecord.isBlocked()).withName((
+                    contactRecord.getGivenName().orElse("") + " " + contactRecord.getFamilyName().orElse("")
+            ).trim()).build();
             account.getContactStore().storeContact(recipientId, newContact);
         }
 
@@ -122,7 +122,7 @@ public class StorageHelper {
     }
 
     private void readGroupV1Record(final SignalStorageRecord record) {
-        if (record == null || !record.getGroupV1().isPresent()) {
+        if (record == null || record.getGroupV1().isEmpty()) {
             return;
         }
 
@@ -145,7 +145,7 @@ public class StorageHelper {
     }
 
     private void readGroupV2Record(final SignalStorageRecord record) {
-        if (record == null || !record.getGroupV2().isPresent()) {
+        if (record == null || record.getGroupV2().isEmpty()) {
             return;
         }
 
@@ -171,7 +171,7 @@ public class StorageHelper {
 
     private void readAccountRecord(final SignalStorageManifest manifest) throws IOException {
         Optional<StorageId> accountId = manifest.getAccountStorageId();
-        if (!accountId.isPresent()) {
+        if (accountId.isEmpty()) {
             logger.warn("Manifest has no account record, ignoring.");
             return;
         }
@@ -182,7 +182,7 @@ public class StorageHelper {
             return;
         }
 
-        SignalAccountRecord accountRecord = record.getAccount().orNull();
+        SignalAccountRecord accountRecord = record.getAccount().orElse(null);
         if (accountRecord == null) {
             logger.warn("The storage record didn't actually have an account, ignoring.");
             return;
@@ -217,15 +217,15 @@ public class StorageHelper {
             }
             if (profileKey != null) {
                 account.setProfileKey(profileKey);
-                final var avatarPath = accountRecord.getAvatarUrlPath().orNull();
+                final var avatarPath = accountRecord.getAvatarUrlPath().orElse(null);
                 context.getProfileHelper().downloadProfileAvatar(account.getSelfRecipientId(), avatarPath, profileKey);
             }
         }
 
         context.getProfileHelper()
                 .setProfile(false,
-                        accountRecord.getGivenName().orNull(),
-                        accountRecord.getFamilyName().orNull(),
+                        accountRecord.getGivenName().orElse(null),
+                        accountRecord.getFamilyName().orElse(null),
                         null,
                         null,
                         null);
index 9d987984f4c43fb7b3394399b44f49c99a520696..67afed1a7047171584218e07b6930b9e172a7cf1 100644 (file)
@@ -12,7 +12,6 @@ import org.asamk.signal.manager.util.IOUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.whispersystems.libsignal.IdentityKey;
-import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.messages.SignalServiceAttachment;
 import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentStream;
 import org.whispersystems.signalservice.api.messages.multidevice.BlockedListMessage;
@@ -37,6 +36,7 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.file.Files;
 import java.util.ArrayList;
+import java.util.Optional;
 
 public class SyncHelper {
 
@@ -81,7 +81,7 @@ public class SyncHelper {
                 for (var record : account.getGroupStore().getGroups()) {
                     if (record instanceof GroupInfoV1 groupInfo) {
                         out.write(new DeviceGroup(groupInfo.getGroupId().serialize(),
-                                Optional.fromNullable(groupInfo.name),
+                                Optional.ofNullable(groupInfo.name),
                                 groupInfo.getMembers()
                                         .stream()
                                         .map(context.getRecipientHelper()::resolveSignalServiceAddress)
@@ -89,9 +89,9 @@ public class SyncHelper {
                                 context.getGroupHelper().createGroupAvatarAttachment(groupInfo.getGroupId()),
                                 groupInfo.isMember(account.getSelfRecipientId()),
                                 Optional.of(groupInfo.messageExpirationTime),
-                                Optional.fromNullable(groupInfo.color),
+                                Optional.ofNullable(groupInfo.color),
                                 groupInfo.blocked,
-                                Optional.absent(),
+                                Optional.empty(),
                                 groupInfo.archived));
                     }
                 }
@@ -139,28 +139,28 @@ public class SyncHelper {
 
                     var profileKey = account.getProfileStore().getProfileKey(recipientId);
                     out.write(new DeviceContact(address,
-                            Optional.fromNullable(contact.getName()),
+                            Optional.ofNullable(contact.getName()),
                             createContactAvatarAttachment(new RecipientAddress(address)),
-                            Optional.fromNullable(contact.getColor()),
-                            Optional.fromNullable(verifiedMessage),
-                            Optional.fromNullable(profileKey),
+                            Optional.ofNullable(contact.getColor()),
+                            Optional.ofNullable(verifiedMessage),
+                            Optional.ofNullable(profileKey),
                             contact.isBlocked(),
                             Optional.of(contact.getMessageExpirationTime()),
-                            Optional.absent(),
+                            Optional.empty(),
                             contact.isArchived()));
                 }
 
                 if (account.getProfileKey() != null) {
                     // Send our own profile key as well
                     out.write(new DeviceContact(account.getSelfAddress(),
-                            Optional.absent(),
-                            Optional.absent(),
-                            Optional.absent(),
-                            Optional.absent(),
+                            Optional.empty(),
+                            Optional.empty(),
+                            Optional.empty(),
+                            Optional.empty(),
                             Optional.of(account.getProfileKey()),
                             false,
-                            Optional.absent(),
-                            Optional.absent(),
+                            Optional.empty(),
+                            Optional.empty(),
                             false));
                 }
             }
@@ -215,16 +215,16 @@ public class SyncHelper {
     }
 
     public void sendKeysMessage() {
-        var keysMessage = new KeysMessage(Optional.fromNullable(account.getStorageKey()));
+        var keysMessage = new KeysMessage(Optional.ofNullable(account.getStorageKey()));
         context.getSendHelper().sendSyncMessage(SignalServiceSyncMessage.forKeys(keysMessage));
     }
 
     public void sendConfigurationMessage() {
         final var config = account.getConfigurationStore();
-        var configurationMessage = new ConfigurationMessage(Optional.fromNullable(config.getReadReceipts()),
-                Optional.fromNullable(config.getUnidentifiedDeliveryIndicators()),
-                Optional.fromNullable(config.getTypingIndicators()),
-                Optional.fromNullable(config.getLinkPreviews()));
+        var configurationMessage = new ConfigurationMessage(Optional.ofNullable(config.getReadReceipts()),
+                Optional.ofNullable(config.getUnidentifiedDeliveryIndicators()),
+                Optional.ofNullable(config.getTypingIndicators()),
+                Optional.ofNullable(config.getLinkPreviews()));
         context.getSendHelper().sendSyncMessage(SignalServiceSyncMessage.forConfiguration(configurationMessage));
     }
 
@@ -299,10 +299,10 @@ public class SyncHelper {
     private Optional<SignalServiceAttachmentStream> createContactAvatarAttachment(RecipientAddress address) throws IOException {
         final var streamDetails = context.getAvatarStore().retrieveContactAvatar(address);
         if (streamDetails == null) {
-            return Optional.absent();
+            return Optional.empty();
         }
 
-        return Optional.of(AttachmentUtils.createAttachment(streamDetails, Optional.absent()));
+        return Optional.of(AttachmentUtils.createAttachment(streamDetails, Optional.empty()));
     }
 
     private void downloadContactAvatar(SignalServiceAttachment avatar, RecipientAddress address) {
index 36e1893916542c3a5865a74ff6e9262dfff87089..b2b5fc55897c01f493976b803ed818e49ccd77cb 100644 (file)
@@ -10,12 +10,12 @@ import org.signal.libsignal.metadata.certificate.SenderCertificate;
 import org.signal.zkgroup.profiles.ProfileKey;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess;
 import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair;
 
 import java.io.IOException;
 import java.util.List;
+import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 
 public class UnidentifiedAccessHelper {
@@ -54,26 +54,26 @@ public class UnidentifiedAccessHelper {
         var recipientUnidentifiedAccessKey = getTargetUnidentifiedAccessKey(recipientId, noRefresh);
         if (recipientUnidentifiedAccessKey == null) {
             logger.trace("Unidentified access not available for {}", recipientId);
-            return Optional.absent();
+            return Optional.empty();
         }
 
         var selfUnidentifiedAccessKey = getSelfUnidentifiedAccessKey(noRefresh);
         if (selfUnidentifiedAccessKey == null) {
             logger.trace("Unidentified access not available for self");
-            return Optional.absent();
+            return Optional.empty();
         }
 
         var senderCertificate = getSenderCertificateFor(recipientId);
         if (senderCertificate == null) {
             logger.trace("Unidentified access not available due to missing sender certificate");
-            return Optional.absent();
+            return Optional.empty();
         }
 
         try {
             return Optional.of(new UnidentifiedAccessPair(new UnidentifiedAccess(recipientUnidentifiedAccessKey,
                     senderCertificate), new UnidentifiedAccess(selfUnidentifiedAccessKey, senderCertificate)));
         } catch (InvalidCertificateException e) {
-            return Optional.absent();
+            return Optional.empty();
         }
     }
 
@@ -82,7 +82,7 @@ public class UnidentifiedAccessHelper {
         var selfUnidentifiedAccessCertificate = getSenderCertificate();
 
         if (selfUnidentifiedAccessKey == null || selfUnidentifiedAccessCertificate == null) {
-            return Optional.absent();
+            return Optional.empty();
         }
 
         try {
@@ -90,7 +90,7 @@ public class UnidentifiedAccessHelper {
                     selfUnidentifiedAccessCertificate),
                     new UnidentifiedAccess(selfUnidentifiedAccessKey, selfUnidentifiedAccessCertificate)));
         } catch (InvalidCertificateException e) {
-            return Optional.absent();
+            return Optional.empty();
         }
     }
 
index d2723e38d236e83b275854e137f6dca09e7fc183..a6593fd96a604f69610d6ba50a904b9c98fa1686 100644 (file)
@@ -705,9 +705,6 @@ public class SignalAccount implements Closeable {
                         if (profile.getCapabilities().gv1Migration) {
                             capabilities.add(Profile.Capability.gv1Migration);
                         }
-                        if (profile.getCapabilities().gv2) {
-                            capabilities.add(Profile.Capability.gv2);
-                        }
                         if (profile.getCapabilities().storage) {
                             capabilities.add(Profile.Capability.storage);
                         }
index 60d9aefc78e85ec445d88e88ccad88a68c0f34bf..ed5f0160d0f84371fe4e2edc6ec38c9f409d236d 100644 (file)
@@ -88,9 +88,6 @@ public class SignalProfile {
         @JsonIgnore
         public boolean uuid;
 
-        @JsonProperty
-        public boolean gv2;
-
         @JsonProperty
         public boolean storage;
 
index 44ee5f6d05ec0210cc282fd15f457ffeaffe5e8e..dc3aaf534fb6f0f2fee5dc979a6d380901bf9bb8 100644 (file)
@@ -142,7 +142,6 @@ public class Profile {
     }
 
     public enum Capability {
-        gv2,
         storage,
         gv1Migration,
         senderKey,
index 69e2537d638028405941072e981cdd3fbe86c794..0ab8c8f5ac3e52646c461ffc50d0603e2aea4cad 100644 (file)
@@ -28,7 +28,7 @@ public record RecipientAddress(Optional<UUID> uuid, Optional<String> number) {
     }
 
     public RecipientAddress(SignalServiceAddress address) {
-        this(Optional.of(address.getServiceId().uuid()), Optional.ofNullable(address.getNumber().orNull()));
+        this(Optional.of(address.getServiceId().uuid()), address.getNumber());
     }
 
     public RecipientAddress(UUID uuid) {
@@ -62,7 +62,6 @@ public record RecipientAddress(Optional<UUID> uuid, Optional<String> number) {
     }
 
     public SignalServiceAddress toSignalServiceAddress() {
-        return new SignalServiceAddress(ServiceId.from(uuid.orElse(UNKNOWN_UUID)),
-                org.whispersystems.libsignal.util.guava.Optional.fromNullable(number.orElse(null)));
+        return new SignalServiceAddress(ServiceId.from(uuid.orElse(UNKNOWN_UUID)), number);
     }
 }
index 793e452e5b4744ffc8f553c1a2b1faf6fddd9a29..a19a6fcf7916080be70fdbea3c2f5ea66a21506c 100644 (file)
@@ -1,7 +1,6 @@
 package org.asamk.signal.manager.util;
 
 import org.asamk.signal.manager.api.AttachmentInvalidException;
-import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.messages.SignalServiceAttachment;
 import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentStream;
 import org.whispersystems.signalservice.api.util.StreamDetails;
@@ -11,6 +10,7 @@ import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 
 public class AttachmentUtils {
 
@@ -39,10 +39,10 @@ public class AttachmentUtils {
     ) {
         // TODO mabybe add a parameter to set the voiceNote, borderless, preview, width, height and caption option
         final var uploadTimestamp = System.currentTimeMillis();
-        Optional<byte[]> preview = Optional.absent();
-        Optional<String> caption = Optional.absent();
-        Optional<String> blurHash = Optional.absent();
-        final Optional<ResumableUploadSpec> resumableUploadSpec = Optional.absent();
+        Optional<byte[]> preview = Optional.empty();
+        Optional<String> caption = Optional.empty();
+        Optional<String> blurHash = Optional.empty();
+        final Optional<ResumableUploadSpec> resumableUploadSpec = Optional.empty();
         return new SignalServiceAttachmentStream(streamDetails.getStream(),
                 streamDetails.getContentType(),
                 streamDetails.getLength(),
index 9d7e0c5013ab7b74ca3d44dbb16ebd6f36f87a8a..a1f19274f08f06391f4c70b4b4ddb50b7bd7290c 100644 (file)
@@ -1,6 +1,5 @@
 package org.asamk.signal.manager.util;
 
-import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
 import org.whispersystems.signalservice.api.push.ServiceId;
 import org.whispersystems.signalservice.api.push.SignalServiceAddress;
@@ -11,6 +10,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.util.Optional;
 
 public class MessageCacheUtils {
 
@@ -59,7 +59,7 @@ public class MessageCacheUtils {
                 serverDeliveredTimestamp = in.readLong();
             }
             Optional<SignalServiceAddress> addressOptional = sourceServiceId == null
-                    ? Optional.absent()
+                    ? Optional.empty()
                     : Optional.of(new SignalServiceAddress(sourceServiceId, source));
             return new SignalServiceEnvelope(type,
                     addressOptional,
index 1874bab042be71e0f20ad599043d8c062056d054..2f8981e3ac3132af68cd26bc3b1093cbc9ee5c2f 100644 (file)
@@ -5,7 +5,6 @@ import org.asamk.signal.manager.api.IncorrectPinException;
 import org.asamk.signal.manager.api.Pair;
 import org.asamk.signal.manager.api.PinLockedException;
 import org.asamk.signal.manager.helper.PinHelper;
-import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.KbsPinData;
 import org.whispersystems.signalservice.api.SignalServiceAccountManager;
 import org.whispersystems.signalservice.api.kbs.MasterKey;
@@ -15,6 +14,7 @@ import org.whispersystems.signalservice.internal.push.RequestVerificationCodeRes
 import org.whispersystems.signalservice.internal.push.VerifyAccountResponse;
 
 import java.io.IOException;
+import java.util.Optional;
 
 public class NumberVerificationUtils {
 
@@ -26,14 +26,14 @@ public class NumberVerificationUtils {
         final ServiceResponse<RequestVerificationCodeResponse> response;
         if (voiceVerification) {
             response = accountManager.requestVoiceVerificationCode(Utils.getDefaultLocale(null),
-                    Optional.fromNullable(captcha),
-                    Optional.absent(),
-                    Optional.absent());
+                    Optional.ofNullable(captcha),
+                    Optional.empty(),
+                    Optional.empty());
         } else {
             response = accountManager.requestSmsVerificationCode(false,
-                    Optional.fromNullable(captcha),
-                    Optional.absent(),
-                    Optional.absent());
+                    Optional.ofNullable(captcha),
+                    Optional.empty(),
+                    Optional.empty());
         }
         try {
             handleResponseException(response);
@@ -82,7 +82,7 @@ public class NumberVerificationUtils {
     }
 
     private static void handleResponseException(final ServiceResponse<?> response) throws IOException {
-        final var throwableOptional = response.getExecutionError().or(response.getApplicationError());
+        final var throwableOptional = response.getExecutionError().or(response::getApplicationError);
         if (throwableOptional.isPresent()) {
             if (throwableOptional.get() instanceof IOException) {
                 throw (IOException) throwableOptional.get();
index c62c1d4cd4b14fe2e80bd17eaeb30bdc2680ea6b..5510eeeb6e97ffb1fd5f25efce945dabd6ad5eb8 100644 (file)
@@ -62,9 +62,6 @@ public class ProfileUtils {
         if (encryptedProfile.getCapabilities().isGv1Migration()) {
             capabilities.add(Profile.Capability.gv1Migration);
         }
-        if (encryptedProfile.getCapabilities().isGv2()) {
-            capabilities.add(Profile.Capability.gv2);
-        }
         if (encryptedProfile.getCapabilities().isStorage()) {
             capabilities.add(Profile.Capability.storage);
         }
index c914db4795ff92b119465232770c97ff9d845474..f3825cc4aced54a096d98192f155dcc3957fd8cd 100644 (file)
@@ -2,10 +2,9 @@ package org.asamk.signal.manager.util;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import org.asamk.signal.manager.api.StickerPackInvalidException;
 import org.asamk.signal.manager.api.Pair;
+import org.asamk.signal.manager.api.StickerPackInvalidException;
 import org.asamk.signal.manager.storage.stickerPacks.JsonStickerPack;
-import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.messages.SignalServiceStickerManifestUpload;
 
 import java.io.BufferedInputStream;
@@ -15,6 +14,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.URLConnection;
 import java.util.ArrayList;
+import java.util.Optional;
 import java.util.zip.ZipFile;
 
 public class StickerUtils {
@@ -61,7 +61,7 @@ public class StickerUtils {
                     : getContentType(rootPath, zip, sticker.file());
             var stickerInfo = new SignalServiceStickerManifestUpload.StickerInfo(data.first(),
                     data.second(),
-                    Optional.fromNullable(sticker.emoji()).or(""),
+                    Optional.ofNullable(sticker.emoji()).orElse(""),
                     contentType);
             stickers.add(stickerInfo);
         }
@@ -83,7 +83,7 @@ public class StickerUtils {
                     .contentType() : getContentType(rootPath, zip, pack.cover().file());
             cover = new SignalServiceStickerManifestUpload.StickerInfo(data.first(),
                     data.second(),
-                    Optional.fromNullable(pack.cover().emoji()).or(""),
+                    Optional.ofNullable(pack.cover().emoji()).orElse(""),
                     contentType);
         }
 
index 535c157db76e862545ca50f074b95021f2fef0e4..49f474ed5af3d7261087c9606042d1e427cd8c4e 100644 (file)
@@ -70,7 +70,7 @@ public class Utils {
         } else {
             // Version 1: E164 user
             version = 1;
-            if (!ownAddress.getNumber().isPresent() || !theirAddress.getNumber().isPresent()) {
+            if (ownAddress.getNumber().isEmpty() || theirAddress.getNumber().isEmpty()) {
                 return null;
             }
             ownId = ownAddress.getNumber().get().getBytes();
@@ -102,7 +102,7 @@ public class Utils {
     public static <L, R, T> Stream<T> zip(Stream<L> leftStream, Stream<R> rightStream, BiFunction<L, R, T> combiner) {
         Spliterator<L> lefts = leftStream.spliterator();
         Spliterator<R> rights = rightStream.spliterator();
-        return StreamSupport.stream(new Spliterators.AbstractSpliterator<T>(Long.min(lefts.estimateSize(),
+        return StreamSupport.stream(new Spliterators.AbstractSpliterator<>(Long.min(lefts.estimateSize(),
                 rights.estimateSize()), lefts.characteristics() & rights.characteristics()) {
             @Override
             public boolean tryAdvance(Consumer<? super T> action) {
index a475eadc66c89b768f05c2a76a8cd77440b9c717..a27383372215054649d08b88b328554f033eaceb 100644 (file)
@@ -67,9 +67,10 @@ This can be piped to a QR encoder to create a display that can be captured by a
 
 For example:
 
-```
+[source]
+----
 dbus-send --session --dest=org.asamk.Signal --type=method_call --print-reply /org/asamk/Signal org.asamk.Signal.link string:"My secondary client" | tr '\n' '\0' | sed 's/.*string //g' | sed 's/\"//g' | qrencode -s10 -tANSI256
-```
+----
 
 listAccounts() -> accountList<as>::
 * accountList : Array of all attached accounts in DBus object path form
index bbe01d6b581dc9e85025c2b222b64d51f7aa666a..256b858d080b4f5679dadb525e7b666ed8b8e0ac 100644 (file)
@@ -7,6 +7,7 @@ import org.freedesktop.dbus.types.Variant;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 public abstract class DbusProperties implements Properties {
@@ -25,7 +26,7 @@ public abstract class DbusProperties implements Properties {
         return handler.get();
     }
 
-    private java.util.Optional<DbusInterfacePropertiesHandler> getHandlerOptional(final String interfaceName) {
+    private Optional<DbusInterfacePropertiesHandler> getHandlerOptional(final String interfaceName) {
         return handlers.stream().filter(h -> h.getInterfaceName().equals(interfaceName)).findFirst();
     }