1 package org
.asamk
.signal
.manager
;
3 import org
.asamk
.signal
.manager
.api
.AccountCheckException
;
4 import org
.asamk
.signal
.manager
.api
.NotRegisteredException
;
5 import org
.asamk
.signal
.manager
.config
.ServiceEnvironment
;
6 import org
.asamk
.signal
.manager
.storage
.identities
.TrustNewIdentity
;
7 import org
.slf4j
.LoggerFactory
;
8 import org
.whispersystems
.signalservice
.api
.util
.PhoneNumberFormatter
;
11 import java
.io
.IOException
;
13 import java
.util
.Arrays
;
14 import java
.util
.List
;
15 import java
.util
.Objects
;
16 import java
.util
.concurrent
.TimeoutException
;
17 import java
.util
.function
.Consumer
;
19 public interface MultiAccountManager
extends AutoCloseable
{
21 static MultiAccountManager
init(
22 final File settingsPath
,
23 final ServiceEnvironment serviceEnvironment
,
24 final String userAgent
,
25 final TrustNewIdentity trustNewIdentity
27 final var logger
= LoggerFactory
.getLogger(MultiAccountManager
.class);
28 final var managers
= getAllLocalAccountNumbers(settingsPath
).stream().map(a
-> {
30 return Manager
.init(a
, settingsPath
, serviceEnvironment
, userAgent
, trustNewIdentity
);
31 } catch (NotRegisteredException
| IOException
| AccountCheckException e
) {
32 logger
.warn("Ignoring {}: {} ({})", a
, e
.getMessage(), e
.getClass().getSimpleName());
35 }).filter(Objects
::nonNull
).toList();
37 return new MultiAccountManagerImpl(managers
, settingsPath
, serviceEnvironment
, userAgent
);
40 static List
<String
> getAllLocalAccountNumbers(File settingsPath
) {
41 var pathConfig
= PathConfig
.createDefault(settingsPath
);
42 final var dataPath
= pathConfig
.dataPath();
43 final var files
= dataPath
.listFiles();
49 return Arrays
.stream(files
)
52 .filter(file
-> PhoneNumberFormatter
.isValidNumber(file
, null))
56 List
<String
> getAccountNumbers();
58 List
<Manager
> getManagers();
60 void addOnManagerAddedHandler(Consumer
<Manager
> handler
);
62 void addOnManagerRemovedHandler(Consumer
<Manager
> handler
);
64 Manager
getManager(String phoneNumber
);
66 URI
getNewProvisioningDeviceLinkUri() throws TimeoutException
, IOException
;
68 ProvisioningManager
getProvisioningManagerFor(URI deviceLinkUri
);
70 RegistrationManager
getNewRegistrationManager(String account
) throws IOException
;