diff --git a/graalvm-config-dir/reflect-config.json b/graalvm-config-dir/reflect-config.json index 8baabd33..d19b5e61 100644 --- a/graalvm-config-dir/reflect-config.json +++ b/graalvm-config-dir/reflect-config.json @@ -925,7 +925,7 @@ "allDeclaredFields":true, "queryAllDeclaredMethods":true, "queryAllDeclaredConstructors":true, - "methods":[{"name":"","parameterTypes":["java.lang.Boolean","java.lang.String"] }, {"name":"captcha","parameterTypes":[] }, {"name":"voice","parameterTypes":[] }] + "methods":[{"name":"","parameterTypes":["java.lang.Boolean","java.lang.String"] }, {"name":"","parameterTypes":["java.lang.Boolean","java.lang.String","java.lang.Boolean"] }, {"name":"captcha","parameterTypes":[] }, {"name":"voice","parameterTypes":[] }] }, { "name":"org.asamk.signal.commands.StartLinkCommand$JsonLink", diff --git a/lib/src/main/java/org/asamk/signal/manager/internal/MultiAccountManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/internal/MultiAccountManagerImpl.java index de1c6a15..24ecae61 100644 --- a/lib/src/main/java/org/asamk/signal/manager/internal/MultiAccountManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/internal/MultiAccountManagerImpl.java @@ -5,6 +5,8 @@ import org.asamk.signal.manager.MultiAccountManager; import org.asamk.signal.manager.ProvisioningManager; import org.asamk.signal.manager.RegistrationManager; import org.asamk.signal.manager.SignalAccountFiles; +import org.asamk.signal.manager.api.AccountCheckException; +import org.asamk.signal.manager.api.NotRegisteredException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -50,7 +52,7 @@ public class MultiAccountManagerImpl implements MultiAccountManager { } } - void addManager(final Manager m) { + private void addManager(final Manager m) { synchronized (managers) { if (managers.contains(m)) { return; @@ -95,7 +97,21 @@ public class MultiAccountManagerImpl implements MultiAccountManager { @Override public Manager getManager(final String number) { synchronized (managers) { - return managers.stream().filter(m -> m.getSelfNumber().equals(number)).findFirst().orElse(null); + final var manager = managers.stream() + .filter(m -> m.getSelfNumber().equals(number)) + .findFirst() + .orElse(null); + if (manager != null) { + return manager; + } + try { + final var newManager = signalAccountFiles.initManager(number); + managers.add(newManager); + return newManager; + } catch (IOException | NotRegisteredException | AccountCheckException e) { + logger.warn("Failed to load new manager", e); + return null; + } } }