package org.asamk.signal.manager;
-import org.asamk.signal.manager.api.AccountCheckException;
-import org.asamk.signal.manager.api.NotRegisteredException;
-import org.asamk.signal.manager.config.ServiceEnvironment;
-import org.asamk.signal.manager.storage.identities.TrustNewIdentity;
-import org.slf4j.LoggerFactory;
-import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
-
-import java.io.File;
import java.io.IOException;
import java.net.URI;
-import java.util.Arrays;
import java.util.List;
-import java.util.Objects;
import java.util.concurrent.TimeoutException;
import java.util.function.Consumer;
public interface MultiAccountManager extends AutoCloseable {
- static MultiAccountManager init(
- final File settingsPath,
- final ServiceEnvironment serviceEnvironment,
- final String userAgent,
- final TrustNewIdentity trustNewIdentity
- ) {
- final var logger = LoggerFactory.getLogger(MultiAccountManager.class);
- final var managers = getAllLocalAccountNumbers(settingsPath).stream().map(a -> {
- try {
- return Manager.init(a, settingsPath, serviceEnvironment, userAgent, trustNewIdentity);
- } catch (NotRegisteredException | IOException | AccountCheckException e) {
- logger.warn("Ignoring {}: {} ({})", a, e.getMessage(), e.getClass().getSimpleName());
- return null;
- }
- }).filter(Objects::nonNull).toList();
-
- return new MultiAccountManagerImpl(managers, settingsPath, serviceEnvironment, userAgent);
- }
-
- static List<String> getAllLocalAccountNumbers(File settingsPath) {
- var pathConfig = PathConfig.createDefault(settingsPath);
- final var dataPath = pathConfig.dataPath();
- final var files = dataPath.listFiles();
-
- if (files == null) {
- return List.of();
- }
-
- return Arrays.stream(files)
- .filter(File::isFile)
- .map(File::getName)
- .filter(file -> PhoneNumberFormatter.isValidNumber(file, null))
- .toList();
- }
-
List<String> getAccountNumbers();
List<Manager> getManagers();