]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/manager/Manager.java
Prevent NullPointerException when destination is null for some reason
[signal-cli] / src / main / java / org / asamk / signal / manager / Manager.java
index 887f9e425642e21f1b024fb103d33ce9b3a07260..d15d164b52a2ed957bb43b356840ea6ac75ab4d9 100644 (file)
@@ -739,17 +739,24 @@ public class Manager implements Closeable {
     }
 
     public Pair<Long, List<SendMessageResult>> 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<DecryptedGroup, GroupChange> 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<HandleAction> 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();