]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java
Reexport dbus objects when self number changes
[signal-cli] / src / main / java / org / asamk / signal / dbus / DbusManagerImpl.java
index 33b149d91052514507c19ba304e2b59eaa449871..51323395fa3576bee1c4b16a1b85dec73fa8f293 100644 (file)
@@ -3,7 +3,6 @@ package org.asamk.signal.dbus;
 import org.asamk.Signal;
 import org.asamk.signal.DbusConfig;
 import org.asamk.signal.manager.Manager;
-import org.asamk.signal.manager.api.StickerPackInvalidException;
 import org.asamk.signal.manager.api.AttachmentInvalidException;
 import org.asamk.signal.manager.api.Configuration;
 import org.asamk.signal.manager.api.Device;
@@ -19,6 +18,7 @@ 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.UpdateGroup;
@@ -53,6 +53,7 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 import java.util.UUID;
+import java.util.concurrent.atomic.AtomicLong;
 import java.util.function.Function;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
@@ -168,7 +169,7 @@ public class DbusManagerImpl implements Manager {
         return signal.listDevices().stream().map(d -> {
             final var device = getRemoteObject(d.getObjectPath(),
                     Signal.Device.class).GetAll("org.asamk.Signal.Device");
-            return new Device(((Long) device.get("Id").getValue()).intValue(),
+            return new Device((Integer) device.get("Id").getValue(),
                     (String) device.get("Name").getValue(),
                     (long) device.get("Created").getValue(),
                     (long) device.get("LastSeen").getValue(),
@@ -498,12 +499,24 @@ public class DbusManagerImpl implements Manager {
     public void receiveMessages(
             final Duration timeout, final ReceiveMessageHandler handler
     ) throws IOException {
-        addReceiveHandler(handler);
-        try {
-            Thread.sleep(timeout.toMillis());
-        } catch (InterruptedException ignored) {
+        final var lastMessage = new AtomicLong(System.currentTimeMillis());
+
+        final ReceiveMessageHandler receiveHandler = (envelope, e) -> {
+            lastMessage.set(System.currentTimeMillis());
+            handler.handleMessage(envelope, e);
+        };
+        addReceiveHandler(receiveHandler);
+        while (true) {
+            try {
+                final var sleepTimeRemaining = timeout.toMillis() - (System.currentTimeMillis() - lastMessage.get());
+                if (sleepTimeRemaining < 0) {
+                    break;
+                }
+                Thread.sleep(sleepTimeRemaining);
+            } catch (InterruptedException ignored) {
+            }
         }
-        removeReceiveHandler(handler);
+        removeReceiveHandler(receiveHandler);
     }
 
     @Override
@@ -608,6 +621,10 @@ public class DbusManagerImpl implements Manager {
         throw new UnsupportedOperationException();
     }
 
+    @Override
+    public void addAddressChangedListener(final Runnable listener) {
+    }
+
     @Override
     public void addClosedListener(final Runnable listener) {
         synchronized (closedListeners) {