]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/Manager.java
Cleanup manager package
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / Manager.java
index bc26d87cc2a407df22b197fbbb87540ef4bddf1d..b7a97c469373c3ae4dab5d075f1dba416e35e439 100644 (file)
@@ -1,17 +1,25 @@
 package org.asamk.signal.manager;
 
+import org.asamk.signal.manager.api.AccountCheckException;
+import org.asamk.signal.manager.api.AttachmentInvalidException;
 import org.asamk.signal.manager.api.Configuration;
 import org.asamk.signal.manager.api.Device;
 import org.asamk.signal.manager.api.Group;
 import org.asamk.signal.manager.api.Identity;
 import org.asamk.signal.manager.api.InactiveGroupLinkException;
 import org.asamk.signal.manager.api.InvalidDeviceLinkException;
+import org.asamk.signal.manager.api.InvalidStickerException;
 import org.asamk.signal.manager.api.Message;
 import org.asamk.signal.manager.api.MessageEnvelope;
+import org.asamk.signal.manager.api.NotMasterDeviceException;
+import org.asamk.signal.manager.api.NotRegisteredException;
 import org.asamk.signal.manager.api.Pair;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.api.SendGroupMessageResults;
 import org.asamk.signal.manager.api.SendMessageResults;
+import org.asamk.signal.manager.api.StickerPack;
+import org.asamk.signal.manager.api.StickerPackInvalidException;
+import org.asamk.signal.manager.api.StickerPackUrl;
 import org.asamk.signal.manager.api.TypingAction;
 import org.asamk.signal.manager.api.UnregisteredRecipientException;
 import org.asamk.signal.manager.api.UpdateGroup;
@@ -35,7 +43,6 @@ import java.io.File;
 import java.io.IOException;
 import java.net.URI;
 import java.time.Duration;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -50,7 +57,7 @@ public interface Manager extends Closeable {
             ServiceEnvironment serviceEnvironment,
             String userAgent,
             TrustNewIdentity trustNewIdentity
-    ) throws IOException, NotRegisteredException {
+    ) throws IOException, NotRegisteredException, AccountCheckException {
         var pathConfig = PathConfig.createDefault(settingsPath);
 
         if (!SignalAccount.userExists(pathConfig.dataPath(), number)) {
@@ -64,9 +71,19 @@ public interface Manager extends Closeable {
             throw new NotRegisteredException();
         }
 
+        account.initDatabase();
         final var serviceEnvironmentConfig = ServiceConfig.getServiceEnvironmentConfig(serviceEnvironment, userAgent);
 
-        return new ManagerImpl(account, pathConfig, serviceEnvironmentConfig, userAgent);
+        final var manager = new ManagerImpl(account, pathConfig, serviceEnvironmentConfig, userAgent);
+
+        try {
+            manager.checkAccountState();
+        } catch (IOException e) {
+            manager.close();
+            throw new AccountCheckException("Error while checking account " + account + ": " + e.getMessage(), e);
+        }
+
+        return manager;
     }
 
     static void initLogger() {
@@ -77,26 +94,8 @@ public interface Manager extends Closeable {
         return PhoneNumberFormatter.isValidNumber(e164Number, countryCode);
     }
 
-    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();
-    }
-
     String getSelfNumber();
 
-    void checkAccountState() throws IOException;
-
     /**
      * This is used for checking a set of phone numbers for registration on Signal
      *
@@ -131,7 +130,7 @@ public interface Manager extends Closeable {
 
     List<Device> getLinkedDevices() throws IOException;
 
-    void removeLinkedDevices(long deviceId) throws IOException;
+    void removeLinkedDevices(int deviceId) throws IOException;
 
     void addDeviceLink(URI linkUri) throws IOException, InvalidDeviceLinkException;
 
@@ -173,7 +172,7 @@ public interface Manager extends Closeable {
 
     SendMessageResults sendMessage(
             Message message, Set<RecipientIdentifier> recipients
-    ) throws IOException, AttachmentInvalidException, NotAGroupMemberException, GroupNotFoundException, GroupSendingNotAllowedException, UnregisteredRecipientException;
+    ) throws IOException, AttachmentInvalidException, NotAGroupMemberException, GroupNotFoundException, GroupSendingNotAllowedException, UnregisteredRecipientException, InvalidStickerException;
 
     SendMessageResults sendRemoteDeleteMessage(
             long targetSentTimestamp, Set<RecipientIdentifier> recipients
@@ -218,7 +217,9 @@ public interface Manager extends Closeable {
      * @param path Path can be a path to a manifest.json file or to a zip file that contains a manifest.json file
      * @return if successful, returns the URL to install the sticker pack in the signal app
      */
-    URI uploadStickerPack(File path) throws IOException, StickerPackInvalidException;
+    StickerPackUrl uploadStickerPack(File path) throws IOException, StickerPackInvalidException;
+
+    List<StickerPack> getStickerPacks();
 
     void requestAllSyncData() throws IOException;