]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/util/Utils.java
Update libsignal-service
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / util / Utils.java
index 6e9c701e13cddf4b401cb76bb3ca98fbdfdaa143..daee1d77edfe750fd8d75ff39f817adc178e4d1a 100644 (file)
@@ -6,18 +6,24 @@ import org.signal.libsignal.protocol.fingerprint.Fingerprint;
 import org.signal.libsignal.protocol.fingerprint.NumericFingerprintGenerator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.whispersystems.signalservice.api.NetworkResult;
+import org.whispersystems.signalservice.api.NetworkResultUtil;
 import org.whispersystems.signalservice.api.push.ServiceId;
 import org.whispersystems.signalservice.api.util.StreamDetails;
-import org.whispersystems.signalservice.internal.ServiceResponse;
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.Proxy;
+import java.net.ProxySelector;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URLDecoder;
 import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Optional;
@@ -30,9 +36,11 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
 
+import okio.ByteString;
+
 public class Utils {
 
-    private final static Logger logger = LoggerFactory.getLogger(Utils.class);
+    private static final Logger logger = LoggerFactory.getLogger(Utils.class);
 
     public static Pair<StreamDetails, Optional<String>> createStreamDetailsFromDataURI(final String dataURI) {
         final DataURI uri = DataURI.of(dataURI);
@@ -59,7 +67,10 @@ public class Utils {
     }
 
     public static Fingerprint computeSafetyNumberForNumber(
-            String ownNumber, IdentityKey ownIdentityKey, String theirNumber, IdentityKey theirIdentityKey
+            String ownNumber,
+            IdentityKey ownIdentityKey,
+            String theirNumber,
+            IdentityKey theirIdentityKey
     ) {
         // Version 1: E164 user
         final var version = 1;
@@ -70,7 +81,10 @@ public class Utils {
     }
 
     public static Fingerprint computeSafetyNumberForUuid(
-            ServiceId ownServiceId, IdentityKey ownIdentityKey, ServiceId theirServiceId, IdentityKey theirIdentityKey
+            ServiceId ownServiceId,
+            IdentityKey ownIdentityKey,
+            ServiceId theirServiceId,
+            IdentityKey theirIdentityKey
     ) {
         // Version 2: UUID user
         final var version = 2;
@@ -140,15 +154,64 @@ public class Utils {
         return map;
     }
 
-    public static <T> T handleResponseException(final ServiceResponse<T> response) throws IOException {
-        final var throwableOptional = response.getExecutionError().or(response::getApplicationError);
-        if (throwableOptional.isPresent()) {
-            if (throwableOptional.get() instanceof IOException) {
-                throw (IOException) throwableOptional.get();
-            } else {
-                throw new IOException(throwableOptional.get());
+    public static <T> T handleResponseException(final NetworkResult<T> response) throws IOException {
+        return NetworkResultUtil.toBasicLegacy(response);
+    }
+
+    public static ByteString firstNonEmpty(ByteString... strings) {
+        for (final var s : strings) {
+            if (s.size() > 0) {
+                return s;
+            }
+        }
+        return ByteString.EMPTY;
+    }
+
+    @SafeVarargs
+    public static <T> List<T> firstNonEmpty(List<T>... values) {
+        for (final var s : values) {
+            if (!s.isEmpty()) {
+                return s;
+            }
+        }
+        return List.of();
+    }
+
+    public static String firstNonEmpty(String... strings) {
+        for (final var s : strings) {
+            if (!s.isEmpty()) {
+                return s;
             }
         }
-        return response.getResult().orElse(null);
+        return "";
+    }
+
+    @SafeVarargs
+    public static <T> T firstNonNull(T... values) {
+        for (final var v : values) {
+            if (v != null) {
+                return v;
+            }
+        }
+        return null;
+    }
+
+    public static String nullIfEmpty(String string) {
+        return string == null || string.isEmpty() ? null : string;
+    }
+
+    public static Proxy getHttpsProxy() {
+        final URI uri;
+        try {
+            uri = new URI("https://example");
+        } catch (URISyntaxException e) {
+            throw new RuntimeException(e);
+        }
+        final var proxies = ProxySelector.getDefault().select(uri);
+        if (proxies.isEmpty()) {
+            return Proxy.NO_PROXY;
+        } else {
+            return proxies.getFirst();
+        }
     }
 }