+ 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();
+ }
+