diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java b/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java index 95c27e41a7..b8b7bca668 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java @@ -484,6 +484,7 @@ public final class GroupSendUtil { @Nullable CancelationSignal cancelationSignal) throws IOException, UntrustedIdentityException { + // PniSignatures are only needed for 1:1 messages, but some message jobs use the GroupSendUtil methods to send 1:1 if (targets.size() == 1 && relatedMessageId == null) { Recipient targetRecipient = targetRecipients.get(0); SendMessageResult result = messageSender.sendDataMessage(targets.get(0), access.get(0), contentHint, message, SignalServiceMessageSender.IndividualSendEvents.EMPTY, urgent, targetRecipient.needsPniSignature()); @@ -689,7 +690,14 @@ public final class GroupSendUtil { @Nullable CancelationSignal cancelationSignal) throws IOException, UntrustedIdentityException { - throw new UnsupportedOperationException("Stories can only be send via sender key!"); + // We only allow legacy sends if you're sending to an empty group and just need to send a sync message. + if (targets.isEmpty()) { + Log.w(TAG, "Only sending a sync message."); + messageSender.sendStorySyncMessage(message, getSentTimestamp(), isRecipientUpdate, manifest); + return Collections.emptyList(); + } else { + throw new UnsupportedOperationException("Stories can only be send via sender key!"); + } } @Override diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java index 93ac1606cf..a8a86a4b66 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java @@ -268,6 +268,20 @@ public class SignalServiceMessageSender { sendGroupMessage(distributionId, recipients, unidentifiedAccess, message.getTimestamp(), content, ContentHint.IMPLICIT, message.getGroupId(), true, SenderKeyGroupEvents.EMPTY, false, false); } + /** + * Only sends sync message for a story. Useful if you're sending to a group with no one else in it -- meaning you don't need to send a story, but you do need + * to send it to your linked devices. + */ + public void sendStorySyncMessage(SignalServiceStoryMessage message, + long timestamp, + boolean isRecipientUpdate, + Set manifest) + throws IOException, UntrustedIdentityException + { + SignalServiceSyncMessage syncMessage = createSelfSendSyncMessageForStory(message, timestamp, isRecipientUpdate, manifest); + sendSyncMessage(syncMessage, Optional.empty()); + } + /** * Send a story using sender key. Note: This is not just for group stories -- it's for any story. Just following the naming convention of making sender key * method named "sendGroup*"