X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/5cccf521032954d7ad8e3f70e3cbef2ce1293e85..53f47d42fc30a86a9bb6cd08f4678a756f4a4aaf:/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java index 671966a0..b4485e32 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java @@ -3,7 +3,6 @@ package org.asamk.signal.dbus; import org.asamk.Signal; import org.asamk.signal.BaseConfig; 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.Identity; import org.asamk.signal.manager.api.InactiveGroupLinkException; @@ -16,9 +15,11 @@ import org.asamk.signal.manager.api.Pair; import org.asamk.signal.manager.api.RecipientIdentifier; import org.asamk.signal.manager.api.SendMessageResult; import org.asamk.signal.manager.api.SendMessageResults; +import org.asamk.signal.manager.api.StickerPackInvalidException; import org.asamk.signal.manager.api.TypingAction; import org.asamk.signal.manager.api.UnregisteredRecipientException; import org.asamk.signal.manager.api.UpdateGroup; +import org.asamk.signal.manager.api.UserStatus; import org.asamk.signal.manager.groups.GroupId; import org.asamk.signal.manager.groups.GroupInviteLinkUrl; import org.asamk.signal.manager.groups.GroupLinkState; @@ -53,7 +54,6 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; -import java.util.UUID; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -79,12 +79,22 @@ public class DbusSignalImpl implements Signal { this.connection = connection; this.objectPath = objectPath; this.noReceiveOnStart = noReceiveOnStart; + + m.addAddressChangedListener(() -> { + unExportObjects(); + exportObjects(); + }); } public void initObjects() { + exportObjects(); if (!noReceiveOnStart) { subscribeReceive(); } + } + + private void exportObjects() { + exportObject(this); updateDevices(); updateGroups(); @@ -96,9 +106,14 @@ public class DbusSignalImpl implements Signal { m.removeReceiveHandler(dbusMessageHandler); dbusMessageHandler = null; } + unExportObjects(); + } + + private void unExportObjects() { unExportDevices(); unExportGroups(); unExportConfiguration(); + connection.unExportObject(this.objectPath); } @Override @@ -501,7 +516,7 @@ public class DbusSignalImpl implements Signal { @Override public void setContactBlocked(final String number, final boolean blocked) { try { - m.setContactBlocked(getSingleRecipientIdentifier(number, m.getSelfNumber()), blocked); + m.setContactsBlocked(List.of(getSingleRecipientIdentifier(number, m.getSelfNumber())), blocked); } catch (NotMasterDeviceException e) { throw new Error.Failure("This command doesn't work on linked devices."); } catch (IOException e) { @@ -514,7 +529,7 @@ public class DbusSignalImpl implements Signal { @Override public void setGroupBlocked(final byte[] groupId, final boolean blocked) { try { - m.setGroupBlocked(getGroupId(groupId), blocked); + m.setGroupsBlocked(List.of(getGroupId(groupId)), blocked); } catch (NotMasterDeviceException e) { throw new Error.Failure("This command doesn't work on linked devices."); } catch (GroupNotFoundException e) { @@ -626,17 +641,14 @@ public class DbusSignalImpl implements Signal { return List.of(); } - Map> registered; + Map registered; try { - registered = m.areUsersRegistered(new HashSet<>(numbers)); + registered = m.getUserStatus(new HashSet<>(numbers)); } catch (IOException e) { throw new Error.Failure(e.getMessage()); } - return numbers.stream().map(number -> { - var uuid = registered.get(number).second(); - return uuid != null; - }).toList(); + return numbers.stream().map(number -> registered.get(number).uuid() != null).toList(); } @Override @@ -859,7 +871,7 @@ public class DbusSignalImpl implements Signal { } var errors = SendMessageResultUtils.getErrorMessagesFromSendMessageResults(results); - if (errors.size() < results.size()) { + if (errors.size() == 0 || errors.size() < results.size()) { return; } @@ -1147,6 +1159,8 @@ public class DbusSignalImpl implements Signal { () -> new Variant<>(getRecipientStrings(getGroup().requestingMembers()), "as")), new DbusProperty<>("Admins", () -> new Variant<>(getRecipientStrings(getGroup().adminMembers()), "as")), + new DbusProperty<>("Banned", + () -> new Variant<>(getRecipientStrings(getGroup().bannedMembers()), "as")), new DbusProperty<>("PermissionAddMember", () -> getGroup().permissionAddMember().name(), this::setGroupPermissionAddMember), @@ -1273,7 +1287,7 @@ public class DbusSignalImpl implements Signal { private void setIsBlocked(final boolean isBlocked) { try { - m.setGroupBlocked(groupId, isBlocked); + m.setGroupsBlocked(List.of(groupId), isBlocked); } catch (NotMasterDeviceException e) { throw new Error.Failure("This command doesn't work on linked devices."); } catch (GroupNotFoundException e) {