]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java
Cleanup manager package
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / ManagerImpl.java
index a080b1851871c6b20065e0f3945b43649f4a15f6..c15f1612ff82c7e2aad096a4650e604a7e543c64 100644 (file)
@@ -16,6 +16,7 @@
  */
 package org.asamk.signal.manager;
 
+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;
@@ -24,6 +25,7 @@ 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.NotMasterDeviceException;
 import org.asamk.signal.manager.api.Pair;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.api.SendGroupMessageResults;
@@ -31,6 +33,7 @@ import org.asamk.signal.manager.api.SendMessageResult;
 import org.asamk.signal.manager.api.SendMessageResults;
 import org.asamk.signal.manager.api.StickerPack;
 import org.asamk.signal.manager.api.StickerPackId;
+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;
@@ -50,6 +53,8 @@ import org.asamk.signal.manager.storage.recipients.Contact;
 import org.asamk.signal.manager.storage.recipients.Profile;
 import org.asamk.signal.manager.storage.recipients.RecipientAddress;
 import org.asamk.signal.manager.storage.recipients.RecipientId;
+import org.asamk.signal.manager.storage.stickerPacks.JsonStickerPack;
+import org.asamk.signal.manager.storage.stickerPacks.StickerPackStore;
 import org.asamk.signal.manager.storage.stickers.Sticker;
 import org.asamk.signal.manager.util.AttachmentUtils;
 import org.asamk.signal.manager.util.KeyUtils;
@@ -81,6 +86,7 @@ import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.locks.ReentrantLock;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -88,7 +94,7 @@ import java.util.stream.Stream;
 
 import io.reactivex.rxjava3.disposables.CompositeDisposable;
 
-public class ManagerImpl implements Manager {
+class ManagerImpl implements Manager {
 
     private final static Logger logger = LoggerFactory.getLogger(ManagerImpl.class);
 
@@ -145,7 +151,7 @@ public class ManagerImpl implements Manager {
             }
         });
         disposable.add(account.getIdentityKeyStore().getIdentityChanges().subscribe(recipientId -> {
-            logger.trace("Archiving old sessions");
+            logger.trace("Archiving old sessions for {}", recipientId);
             account.getSessionStore().archiveSessions(recipientId);
             account.getSenderKeyStore().deleteSharedWith(recipientId);
             final var profile = account.getRecipientStore().getProfile(recipientId);
@@ -165,8 +171,7 @@ public class ManagerImpl implements Manager {
         return account.getAccount();
     }
 
-    @Override
-    public void checkAccountState() throws IOException {
+    void checkAccountState() throws IOException {
         context.getAccountHelper().checkAccountState();
     }
 
@@ -289,7 +294,7 @@ public class ManagerImpl implements Manager {
     }
 
     @Override
-    public void removeLinkedDevices(long deviceId) throws IOException {
+    public void removeLinkedDevices(int deviceId) throws IOException {
         context.getAccountHelper().removeLinkedDevices(deviceId);
     }
 
@@ -571,6 +576,17 @@ public class ManagerImpl implements Manager {
     ) throws IOException, NotAGroupMemberException, GroupNotFoundException, GroupSendingNotAllowedException {
         var delete = new SignalServiceDataMessage.RemoteDelete(targetSentTimestamp);
         final var messageBuilder = SignalServiceDataMessage.newBuilder().withRemoteDelete(delete);
+        for (final var recipient : recipients) {
+            if (recipient instanceof RecipientIdentifier.Single r) {
+                try {
+                    final var recipientId = context.getRecipientHelper().resolveRecipient(r);
+                    account.getMessageSendLogStore().deleteEntryForRecipientNonGroup(targetSentTimestamp, recipientId);
+                } catch (UnregisteredRecipientException ignored) {
+                }
+            } else if (recipient instanceof RecipientIdentifier.Group r) {
+                account.getMessageSendLogStore().deleteEntryForGroup(targetSentTimestamp, r.groupId());
+            }
+        }
         return sendMessage(messageBuilder, recipients);
     }
 
@@ -738,6 +754,8 @@ public class ManagerImpl implements Manager {
         }
     }
 
+    private static final AtomicInteger threadNumber = new AtomicInteger(0);
+
     private void startReceiveThreadIfRequired() {
         if (receiveThread != null) {
             return;
@@ -773,6 +791,7 @@ public class ManagerImpl implements Manager {
                 }
             }
         });
+        receiveThread.setName("receive-" + threadNumber.getAndIncrement());
 
         receiveThread.start();
     }