X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/0ad42a72ab64e663733eb7ab89b6de5ec9f80a4a..800b92c4ba9f417b3a3a88929c61a66d86408d85:/src/main/java/org/asamk/signal/Manager.java diff --git a/src/main/java/org/asamk/signal/Manager.java b/src/main/java/org/asamk/signal/Manager.java index 5bff3cf3..a38eed5a 100644 --- a/src/main/java/org/asamk/signal/Manager.java +++ b/src/main/java/org/asamk/signal/Manager.java @@ -411,7 +411,9 @@ class Manager implements Signal { } SignalServiceDataMessage message = messageBuilder.build(); - sendMessage(message, groupStore.getGroup(groupId).members); + Set members = groupStore.getGroup(groupId).members; + members.remove(this.username); + sendMessage(message, members); } public void sendQuitGroupMessage(byte[] groupId) throws GroupNotFoundException, IOException, EncapsulatedExceptions, UntrustedIdentityException { @@ -423,7 +425,11 @@ class Manager implements Signal { .asGroupMessage(group) .build(); - sendMessage(message, groupStore.getGroup(groupId).members); + final GroupInfo g = groupStore.getGroup(groupId); + g.members.remove(this.username); + groupStore.updateGroup(g); + + sendMessage(message, g.members); } public byte[] sendUpdateGroupMessage(byte[] groupId, String name, Collection members, String avatarFile) throws IOException, EncapsulatedExceptions, GroupNotFoundException, AttachmentInvalidException, UntrustedIdentityException { @@ -473,7 +479,9 @@ class Manager implements Signal { .asGroupMessage(group.build()) .build(); - sendMessage(message, g.members); + final Set membersSend = g.members; + membersSend.remove(this.username); + sendMessage(message, membersSend); return g.groupId; } @@ -540,36 +548,39 @@ class Manager implements Signal { private void sendMessage(SignalServiceDataMessage message, Collection recipients) throws IOException, EncapsulatedExceptions, UntrustedIdentityException { - SignalServiceMessageSender messageSender = new SignalServiceMessageSender(URL, TRUST_STORE, username, password, - deviceId, signalProtocolStore, USER_AGENT, Optional.absent()); + try { + SignalServiceMessageSender messageSender = new SignalServiceMessageSender(URL, TRUST_STORE, username, password, + deviceId, signalProtocolStore, USER_AGENT, Optional.absent()); - Set recipientsTS = new HashSet<>(recipients.size()); - for (String recipient : recipients) { - try { - recipientsTS.add(getPushAddress(recipient)); - } catch (InvalidNumberException e) { - System.err.println("Failed to add recipient \"" + recipient + "\": " + e.getMessage()); - System.err.println("Aborting sending."); - save(); - return; + Set recipientsTS = new HashSet<>(recipients.size()); + for (String recipient : recipients) { + try { + recipientsTS.add(getPushAddress(recipient)); + } catch (InvalidNumberException e) { + System.err.println("Failed to add recipient \"" + recipient + "\": " + e.getMessage()); + System.err.println("Aborting sending."); + save(); + return; + } } - } - if (message.getGroupInfo().isPresent()) { - messageSender.sendMessage(new ArrayList<>(recipientsTS), message); - } else { - // Send to all individually, so sync messages are sent correctly - for (SignalServiceAddress address : recipientsTS) { - messageSender.sendMessage(address, message); + if (message.getGroupInfo().isPresent()) { + messageSender.sendMessage(new ArrayList<>(recipientsTS), message); + } else { + // Send to all individually, so sync messages are sent correctly + for (SignalServiceAddress address : recipientsTS) { + messageSender.sendMessage(address, message); + } } - } - if (message.isEndSession()) { - for (SignalServiceAddress recipient : recipientsTS) { - handleEndSession(recipient.getNumber()); + if (message.isEndSession()) { + for (SignalServiceAddress recipient : recipientsTS) { + handleEndSession(recipient.getNumber()); + } } + } finally { + save(); } - save(); } private SignalServiceContent decryptMessage(SignalServiceEnvelope envelope) { @@ -637,6 +648,7 @@ class Manager implements Signal { try { group = groupStore.getGroup(groupInfo.getGroupId()); group.members.remove(source); + groupStore.updateGroup(group); } catch (GroupNotFoundException e) { } break;