]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/SignalAccountFiles.java
Fix send parameters to be all camel case
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / SignalAccountFiles.java
index da8a3f3a837bf5ff32696d9da1e833e63c07f7c5..cd0b5a215134b3f9ee0fc636859628dacc9283a0 100644 (file)
@@ -2,6 +2,7 @@ package org.asamk.signal.manager;
 
 import org.asamk.signal.manager.api.AccountCheckException;
 import org.asamk.signal.manager.api.NotRegisteredException;
+import org.asamk.signal.manager.api.Pair;
 import org.asamk.signal.manager.api.ServiceEnvironment;
 import org.asamk.signal.manager.config.ServiceConfig;
 import org.asamk.signal.manager.config.ServiceEnvironmentConfig;
@@ -14,7 +15,6 @@ import org.asamk.signal.manager.internal.RegistrationManagerImpl;
 import org.asamk.signal.manager.storage.SignalAccount;
 import org.asamk.signal.manager.storage.accounts.AccountsStore;
 import org.asamk.signal.manager.util.KeyUtils;
-import org.signal.libsignal.protocol.util.KeyHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.whispersystems.signalservice.api.push.exceptions.DeprecatedVersionException;
@@ -64,19 +64,28 @@ public class SignalAccountFiles {
         return accountsStore.getAllNumbers();
     }
 
-    public MultiAccountManager initMultiAccountManager() throws IOException {
-        final var managers = accountsStore.getAllAccounts().parallelStream().map(a -> {
+    public MultiAccountManager initMultiAccountManager() throws IOException, AccountCheckException {
+        final var managerPairs = accountsStore.getAllAccounts().parallelStream().map(a -> {
             try {
-                return initManager(a.number(), a.path());
-            } catch (NotRegisteredException | IOException | AccountCheckException e) {
+                return new Pair<Manager, Throwable>(initManager(a.number(), a.path()), null);
+            } catch (NotRegisteredException e) {
                 logger.warn("Ignoring {}: {} ({})", a.number(), e.getMessage(), e.getClass().getSimpleName());
                 return null;
-            } catch (Throwable e) {
+            } catch (AccountCheckException | IOException e) {
                 logger.error("Failed to load {}: {} ({})", a.number(), e.getMessage(), e.getClass().getSimpleName());
-                throw e;
+                return new Pair<Manager, Throwable>(null, e);
             }
         }).filter(Objects::nonNull).toList();
 
+        for (final var pair : managerPairs) {
+            if (pair.second() instanceof IOException e) {
+                throw e;
+            } else if (pair.second() instanceof AccountCheckException e) {
+                throw e;
+            }
+        }
+
+        final var managers = managerPairs.stream().map(Pair::first).toList();
         return new MultiAccountManagerImpl(managers, this);
     }
 
@@ -86,7 +95,8 @@ public class SignalAccountFiles {
     }
 
     private Manager initManager(
-            String number, String accountPath
+            String number,
+            String accountPath
     ) throws IOException, NotRegisteredException, AccountCheckException {
         if (accountPath == null) {
             throw new NotRegisteredException();
@@ -153,15 +163,14 @@ public class SignalAccountFiles {
     }
 
     public RegistrationManager initRegistrationManager(
-            String number, Consumer<Manager> newManagerListener
+            String number,
+            Consumer<Manager> newManagerListener
     ) throws IOException {
         final var accountPath = accountsStore.getPathByNumber(number);
         if (accountPath == null || !SignalAccount.accountFileExists(pathConfig.dataPath(), accountPath)) {
             final var newAccountPath = accountPath == null ? accountsStore.addAccount(number, null) : accountPath;
             var aciIdentityKey = KeyUtils.generateIdentityKeyPair();
             var pniIdentityKey = KeyUtils.generateIdentityKeyPair();
-            var registrationId = KeyHelper.generateRegistrationId(false);
-            var pniRegistrationId = KeyHelper.generateRegistrationId(false);
 
             var profileKey = KeyUtils.createProfileKey();
             var account = SignalAccount.create(pathConfig.dataPath(),
@@ -170,10 +179,9 @@ public class SignalAccountFiles {
                     serviceEnvironment,
                     aciIdentityKey,
                     pniIdentityKey,
-                    registrationId,
-                    pniRegistrationId,
                     profileKey,
                     settings);
+            account.initDatabase();
 
             return new RegistrationManagerImpl(account,
                     pathConfig,
@@ -188,6 +196,7 @@ public class SignalAccountFiles {
             account.close();
             throw new IOException("Number in account file doesn't match expected number: " + account.getNumber());
         }
+        account.initDatabase();
 
         return new RegistrationManagerImpl(account,
                 pathConfig,