]> nmode's Git Repositories - signal-cli/commitdiff
Use partial cdsi request only for a maximum of 3 numbers
authorAsamK <asamk@gmx.de>
Mon, 16 Oct 2023 15:34:28 +0000 (17:34 +0200)
committerAsamK <asamk@gmx.de>
Mon, 16 Oct 2023 17:01:08 +0000 (19:01 +0200)
Fixes #1239

lib/src/main/java/org/asamk/signal/manager/config/ServiceConfig.java
lib/src/main/java/org/asamk/signal/manager/helper/RecipientHelper.java

index 7b2ba140de7cfce44235c80fc579e857dde9d784..bf45f8cd5e9570082e7bd4297e7e9644c58d934f 100644 (file)
@@ -29,6 +29,7 @@ public class ServiceConfig {
     public final static long AVATAR_DOWNLOAD_FAILSAFE_MAX_SIZE = 10 * 1024 * 1024;
     public final static boolean AUTOMATIC_NETWORK_RETRY = true;
     public final static int GROUP_MAX_SIZE = 1001;
     public final static long AVATAR_DOWNLOAD_FAILSAFE_MAX_SIZE = 10 * 1024 * 1024;
     public final static boolean AUTOMATIC_NETWORK_RETRY = true;
     public final static int GROUP_MAX_SIZE = 1001;
+    public final static int MAXIMUM_ONE_OFF_REQUEST_SIZE = 3;
 
     private final static KeyStore iasKeyStore;
 
 
     private final static KeyStore iasKeyStore;
 
index 322bd032e112903c6e83b0fdd1f13cbe8fdf9451..133aab5bd83ae0e28de2983cc41f18a8c7ccd522 100644 (file)
@@ -26,6 +26,8 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 
 import java.util.Optional;
 import java.util.Set;
 
+import static org.asamk.signal.manager.config.ServiceConfig.MAXIMUM_ONE_OFF_REQUEST_SIZE;
+
 public class RecipientHelper {
 
     private final static Logger logger = LoggerFactory.getLogger(RecipientHelper.class);
 public class RecipientHelper {
 
     private final static Logger logger = LoggerFactory.getLogger(RecipientHelper.class);
@@ -134,7 +136,14 @@ public class RecipientHelper {
     public Map<String, RegisteredUser> getRegisteredUsers(
             final Set<String> numbers
     ) throws IOException {
     public Map<String, RegisteredUser> getRegisteredUsers(
             final Set<String> numbers
     ) throws IOException {
-        return getRegisteredUsers(numbers, true);
+        if (numbers.size() > MAXIMUM_ONE_OFF_REQUEST_SIZE) {
+            final var allNumbers = new HashSet<>(account.getRecipientStore().getAllNumbers()) {{
+                addAll(numbers);
+            }};
+            return getRegisteredUsers(allNumbers, false);
+        } else {
+            return getRegisteredUsers(numbers, true);
+        }
     }
 
     private Map<String, RegisteredUser> getRegisteredUsers(
     }
 
     private Map<String, RegisteredUser> getRegisteredUsers(
@@ -174,7 +183,10 @@ public class RecipientHelper {
             logger.debug("No new numbers to query.");
             return Map.of();
         }
             logger.debug("No new numbers to query.");
             return Map.of();
         }
-        logger.trace("Querying CDSI for {} new numbers ({} previous)", newNumbers.size(), previousNumbers.size());
+        logger.trace("Querying CDSI for {} new numbers ({} previous), isPartialRefresh={}",
+                newNumbers.size(),
+                previousNumbers.size(),
+                isPartialRefresh);
         final var token = previousNumbers.isEmpty()
                 ? Optional.<byte[]>empty()
                 : Optional.ofNullable(account.getCdsiToken());
         final var token = previousNumbers.isEmpty()
                 ? Optional.<byte[]>empty()
                 : Optional.ofNullable(account.getCdsiToken());