]> nmode's Git Repositories - signal-cli/commitdiff
Load multiple accounts in parallel
authorAsamK <asamk@gmx.de>
Sun, 13 Feb 2022 19:07:08 +0000 (20:07 +0100)
committerAsamK <asamk@gmx.de>
Sun, 13 Feb 2022 19:08:30 +0000 (20:08 +0100)
graalvm-config-dir/reflect-config.json
lib/src/main/java/org/asamk/signal/manager/SignalAccountFiles.java
lib/src/main/java/org/asamk/signal/manager/storage/accounts/AccountsStorage.java
lib/src/main/java/org/asamk/signal/manager/storage/accounts/AccountsStore.java

index 18954ec8035d60caffc56e0cff5d54afc03c957f..859fa0ea1cfbf631635f359844aabe4f5167029b 100644 (file)
   "queryAllDeclaredMethods":true,
   "queryAllDeclaredConstructors":true,
   "methods":[
+    {"name":"<init>","parameterTypes":["java.lang.String","java.lang.String","org.asamk.signal.manager.storage.stickerPacks.JsonStickerPack$JsonSticker","java.util.List"] }, 
     {"name":"author","parameterTypes":[] }, 
     {"name":"cover","parameterTypes":[] }, 
     {"name":"stickers","parameterTypes":[] }, 
   "queryAllDeclaredMethods":true,
   "queryAllDeclaredConstructors":true,
   "methods":[
+    {"name":"<init>","parameterTypes":["java.lang.Integer","java.lang.String","java.lang.String","java.lang.String"] }, 
     {"name":"contentType","parameterTypes":[] }, 
     {"name":"emoji","parameterTypes":[] }, 
     {"name":"file","parameterTypes":[] }, 
index 379aa1cb5ef79f5ff5e030e142f7fa14024a1515..b3ed439d44b9226b50f9dae3aafc78d99876b872 100644 (file)
@@ -47,11 +47,11 @@ public class SignalAccountFiles {
     }
 
     public MultiAccountManager initMultiAccountManager() {
-        final var managers = getAllLocalAccountNumbers().stream().map(a -> {
+        final var managers = accountsStore.getAllAccounts().parallelStream().map(a -> {
             try {
-                return initManager(a);
+                return initManager(a.path());
             } catch (NotRegisteredException | IOException | AccountCheckException e) {
-                logger.warn("Ignoring {}: {} ({})", a, e.getMessage(), e.getClass().getSimpleName());
+                logger.warn("Ignoring {}: {} ({})", a.number(), e.getMessage(), e.getClass().getSimpleName());
                 return null;
             }
         }).filter(Objects::nonNull).toList();
@@ -61,7 +61,16 @@ public class SignalAccountFiles {
 
     public Manager initManager(String number) throws IOException, NotRegisteredException, AccountCheckException {
         final var accountPath = accountsStore.getPathByNumber(number);
-        if (accountPath == null || !SignalAccount.accountFileExists(pathConfig.dataPath(), accountPath)) {
+        return this.initManager(number, accountPath);
+    }
+
+    private Manager initManager(
+            String number, String accountPath
+    ) throws IOException, NotRegisteredException, AccountCheckException {
+        if (accountPath == null) {
+            throw new NotRegisteredException();
+        }
+        if (!SignalAccount.accountFileExists(pathConfig.dataPath(), accountPath)) {
             throw new NotRegisteredException();
         }
 
index 341d957252ef75d442f44b8bd1cfff93e3e898fa..7507c3397b50951bc093f2e6bb66b049746a1201 100644 (file)
@@ -2,7 +2,7 @@ package org.asamk.signal.manager.storage.accounts;
 
 import java.util.List;
 
-record AccountsStorage(List<Account> accounts) {
+public record AccountsStorage(List<Account> accounts) {
 
-    record Account(String path, String number, String uuid) {}
+    public record Account(String path, String number, String uuid) {}
 }
index 07dfac3c766ba95ef3af8ef69e817d74dcb5d564..3c81c7d7294faa311a88d0cb89e9c6b0061677d9 100644 (file)
@@ -41,14 +41,18 @@ public class AccountsStore {
         }
     }
 
-    public Set<String> getAllNumbers() {
+    public synchronized Set<String> getAllNumbers() {
         return readAccounts().stream()
                 .map(AccountsStorage.Account::number)
                 .filter(Objects::nonNull)
                 .collect(Collectors.toSet());
     }
 
-    public String getPathByNumber(String number) {
+    public synchronized Set<AccountsStorage.Account> getAllAccounts() {
+        return readAccounts().stream().filter(a -> a.number() != null).collect(Collectors.toSet());
+    }
+
+    public synchronized String getPathByNumber(String number) {
         return readAccounts().stream()
                 .filter(a -> number.equals(a.number()))
                 .map(AccountsStorage.Account::path)
@@ -56,7 +60,7 @@ public class AccountsStore {
                 .orElse(null);
     }
 
-    public String getPathByAci(ACI aci) {
+    public synchronized String getPathByAci(ACI aci) {
         return readAccounts().stream()
                 .filter(a -> aci.toString().equals(a.uuid()))
                 .map(AccountsStorage.Account::path)
@@ -64,7 +68,7 @@ public class AccountsStore {
                 .orElse(null);
     }
 
-    public void updateAccount(String path, String number, ACI aci) {
+    public synchronized void updateAccount(String path, String number, ACI aci) {
         updateAccounts(accounts -> accounts.stream().map(a -> {
             if (path.equals(a.path())) {
                 return new AccountsStorage.Account(a.path(), number, aci == null ? null : aci.toString());
@@ -81,7 +85,7 @@ public class AccountsStore {
         }).toList());
     }
 
-    public String addAccount(String number, ACI aci) {
+    public synchronized String addAccount(String number, ACI aci) {
         final var accountPath = generateNewAccountPath();
         final var account = new AccountsStorage.Account(accountPath, number, aci == null ? null : aci.toString());
         updateAccounts(accounts -> {