X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/1fd62ee342eb224017e044def60d5ffbf157be43..49c4b762b61a84feda75edb6b1e3e7c47b1467f1:/src/main/java/org/asamk/signal/manager/Manager.java diff --git a/src/main/java/org/asamk/signal/manager/Manager.java b/src/main/java/org/asamk/signal/manager/Manager.java index 887f9e42..d15d164b 100644 --- a/src/main/java/org/asamk/signal/manager/Manager.java +++ b/src/main/java/org/asamk/signal/manager/Manager.java @@ -739,17 +739,24 @@ public class Manager implements Closeable { } public Pair> sendQuitGroupMessage(byte[] groupId) throws GroupNotFoundException, IOException, NotAGroupMemberException { - SignalServiceGroup group = SignalServiceGroup.newBuilder(SignalServiceGroup.Type.QUIT).withId(groupId).build(); - SignalServiceDataMessage.Builder messageBuilder = SignalServiceDataMessage.newBuilder().asGroupMessage(group); + SignalServiceDataMessage.Builder messageBuilder; final GroupInfo g = getGroupForSending(groupId); if (g instanceof GroupInfoV1) { GroupInfoV1 groupInfoV1 = (GroupInfoV1) g; + SignalServiceGroup group = SignalServiceGroup.newBuilder(SignalServiceGroup.Type.QUIT) + .withId(groupId) + .build(); + messageBuilder = SignalServiceDataMessage.newBuilder().asGroupMessage(group); groupInfoV1.removeMember(account.getSelfAddress()); account.getGroupStore().updateGroup(groupInfoV1); } else { - throw new RuntimeException("TODO Not implemented!"); + final GroupInfoV2 groupInfoV2 = (GroupInfoV2) g; + final Pair groupGroupChangePair = groupHelper.leaveGroup(groupInfoV2); + groupInfoV2.setGroup(groupGroupChangePair.first()); + messageBuilder = getGroupUpdateMessageBuilder(groupInfoV2, groupGroupChangePair.second().toByteArray()); + account.getGroupStore().updateGroup(groupInfoV2); } return sendMessage(messageBuilder, g.getMembersWithout(account.getSelfAddress())); @@ -1861,7 +1868,7 @@ public class Manager implements Closeable { ) { List actions = new ArrayList<>(); if (content != null) { - SignalServiceAddress sender; + final SignalServiceAddress sender; if (!envelope.isUnidentifiedSender() && envelope.hasSource()) { sender = envelope.getSourceAddress(); } else { @@ -1888,11 +1895,14 @@ public class Manager implements Closeable { SignalServiceSyncMessage syncMessage = content.getSyncMessage().get(); if (syncMessage.getSent().isPresent()) { SentTranscriptMessage message = syncMessage.getSent().get(); - actions.addAll(handleSignalServiceDataMessage(message.getMessage(), - true, - sender, - message.getDestination().orNull(), - ignoreAttachments)); + final SignalServiceAddress destination = message.getDestination().orNull(); + if (destination != null) { + actions.addAll(handleSignalServiceDataMessage(message.getMessage(), + true, + sender, + destination, + ignoreAttachments)); + } } if (syncMessage.getRequest().isPresent()) { RequestMessage rm = syncMessage.getRequest().get();