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;
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;
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;
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(),
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
throw new UnsupportedOperationException();
}
+ @Override
+ public void addAddressChangedListener(final Runnable listener) {
+ }
+
@Override
public void addClosedListener(final Runnable listener) {
synchronized (closedListeners) {