]> nmode's Git Repositories - signal-cli/commitdiff
Announce support for gift badges if linked device
authorAsamK <asamk@gmx.de>
Sun, 16 Apr 2023 19:17:22 +0000 (21:17 +0200)
committerAsamK <asamk@gmx.de>
Sun, 16 Apr 2023 19:19:17 +0000 (21:19 +0200)
Fixes #1226

lib/src/main/java/org/asamk/signal/manager/ProvisioningManagerImpl.java
lib/src/main/java/org/asamk/signal/manager/config/ServiceConfig.java
lib/src/main/java/org/asamk/signal/manager/helper/IdentityHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java
lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java

index 8ae9bb26c38396f1d4ec2d8cb2567a7b48bbb981..544032dadc7b24c451463eac11afc5dfabd3aa34 100644 (file)
@@ -41,7 +41,7 @@ import java.nio.channels.OverlappingFileLockException;
 import java.util.concurrent.TimeoutException;
 import java.util.function.Consumer;
 
-import static org.asamk.signal.manager.config.ServiceConfig.capabilities;
+import static org.asamk.signal.manager.config.ServiceConfig.getCapabilities;
 
 class ProvisioningManagerImpl implements ProvisioningManager {
 
@@ -132,7 +132,7 @@ class ProvisioningManagerImpl implements ProvisioningManager {
                         registrationId,
                         pniRegistrationId,
                         encryptedDeviceName,
-                        capabilities));
+                        getCapabilities(false)));
 
         // Create new account with the synced identity
         var profileKey = ret.getProfileKey() == null ? KeyUtils.createProfileKey() : ret.getProfileKey();
index 36bbdb7e53d6be2b8f5acb5fb8842cedb62aeb9a..c56d9e86ba40405d4d0d53968800273d2430ce04 100644 (file)
@@ -28,21 +28,7 @@ public class ServiceConfig {
 
     private final static KeyStore iasKeyStore;
 
-    public static final AccountAttributes.Capabilities capabilities;
-
     static {
-        capabilities = new AccountAttributes.Capabilities(false,
-                true,
-                false,
-                true,
-                true,
-                true,
-                true,
-                true,
-                false,
-                false,
-                false);
-
         try {
             TrustStore contactTrustStore = new IasTrustStore();
 
@@ -56,6 +42,21 @@ public class ServiceConfig {
         }
     }
 
+    public static AccountAttributes.Capabilities getCapabilities(boolean isPrimaryDevice) {
+        final var giftBadges = !isPrimaryDevice;
+        return new AccountAttributes.Capabilities(false,
+                true,
+                false,
+                true,
+                true,
+                true,
+                true,
+                true,
+                giftBadges,
+                false,
+                false);
+    }
+
     public static boolean isSignalClientAvailable() {
         try {
             try {
index df762c91801610050d7a2c6c1097bd4e53c81396..c9cfaedcbb40c765cbd3717c1d9b5d6b1b0b3a03 100644 (file)
@@ -18,8 +18,6 @@ import java.io.IOException;
 import java.util.Arrays;
 import java.util.function.BiFunction;
 
-import static org.asamk.signal.manager.config.ServiceConfig.capabilities;
-
 public class IdentityHelper {
 
     private final static Logger logger = LoggerFactory.getLogger(IdentityHelper.class);
@@ -75,7 +73,7 @@ public class IdentityHelper {
         final var recipientId = account.getRecipientResolver().resolveRecipient(serviceId);
         final var address = account.getRecipientAddressResolver().resolveRecipientAddress(recipientId);
 
-        if (capabilities.getUuid()) {
+        if (account.getAccountCapabilities().getUuid()) {
             if (serviceId.isUnknown()) {
                 return null;
             }
index 3a834a7019a30869a35352afd675fd77b56917ca..4e171326f6b7bfc74d3ed38d3ad037931f4f22c2 100644 (file)
@@ -817,6 +817,9 @@ public final class IncomingMessageHandler {
                 }
             }
         }
+        if (message.getGiftBadge().isPresent()) {
+            handleIncomingGiftBadge(message.getGiftBadge().get());
+        }
         if (message.getProfileKey().isPresent()) {
             handleIncomingProfileKey(message.getProfileKey().get(), source.recipientId());
         }
@@ -833,6 +836,10 @@ public final class IncomingMessageHandler {
         return actions;
     }
 
+    private void handleIncomingGiftBadge(final SignalServiceDataMessage.GiftBadge giftBadge) {
+        // TODO
+    }
+
     private List<HandleAction> handleSignalServiceStoryMessage(
             SignalServiceStoryMessage message, RecipientId source, boolean ignoreAttachments
     ) {
index bd892c5dddf6d66da1d4253fe9803ea53a0ad8c7..5014ab6d99ea26eee41a377bf90c142cbe3d9083 100644 (file)
@@ -98,7 +98,7 @@ import java.util.List;
 import java.util.Optional;
 import java.util.function.Supplier;
 
-import static org.asamk.signal.manager.config.ServiceConfig.capabilities;
+import static org.asamk.signal.manager.config.ServiceConfig.getCapabilities;
 
 public class SignalAccount implements Closeable {
 
@@ -1328,13 +1328,17 @@ public class SignalAccount implements Closeable {
                 registrationLock != null ? registrationLock : getRegistrationLock(),
                 getSelfUnidentifiedAccessKey(),
                 isUnrestrictedUnidentifiedAccess(),
-                capabilities,
+                getAccountCapabilities(),
                 isDiscoverableByPhoneNumber(),
                 encryptedDeviceName,
                 getLocalPniRegistrationId(),
                 null); // TODO recoveryPassword?
     }
 
+    public AccountAttributes.Capabilities getAccountCapabilities() {
+        return getCapabilities(isPrimaryDevice());
+    }
+
     public ServiceId getAccountId(ServiceIdType serviceIdType) {
         return serviceIdType.equals(ServiceIdType.ACI) ? aci : pni;
     }