Skip to content

Commit 20b9812

Browse files
Send an empty group sync when linking devices if no groups exist.
1 parent 35c102a commit 20b9812

File tree

4 files changed

+25
-8
lines changed

4 files changed

+25
-8
lines changed

app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -244,8 +244,8 @@ private void generateFullContactUpdate()
244244

245245
@Override
246246
public boolean onShouldRetry(@NonNull Exception exception) {
247-
if (exception instanceof PushNetworkException) return true;
248-
return false;
247+
return exception instanceof PushNetworkException ||
248+
exception instanceof NetworkException;
249249
}
250250

251251
@Override

app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceGroupUpdateJob.java

+17-6
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
3131
import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException;
3232

33+
import java.io.ByteArrayInputStream;
3334
import java.io.File;
3435
import java.io.IOException;
3536
import java.io.InputStream;
@@ -128,7 +129,11 @@ public void onRun() throws Exception {
128129
BlobProvider.getInstance().getStream(context, uri),
129130
length);
130131
} else {
131-
Log.w(TAG, "No groups present for sync message...");
132+
Log.w(TAG, "No groups present for sync message. Sending an empty update.");
133+
134+
sendUpdate(ApplicationDependencies.getSignalServiceMessageSender(),
135+
null,
136+
0);
132137
}
133138
} finally {
134139
BlobProvider.getInstance().delete(context, uri);
@@ -149,11 +154,17 @@ public void onFailure() {
149154
private void sendUpdate(SignalServiceMessageSender messageSender, InputStream stream, long length)
150155
throws IOException, UntrustedIdentityException
151156
{
152-
SignalServiceAttachmentStream attachmentStream = SignalServiceAttachment.newStreamBuilder()
153-
.withStream(stream)
154-
.withContentType("application/octet-stream")
155-
.withLength(length)
156-
.build();
157+
SignalServiceAttachmentStream attachmentStream;
158+
159+
if (length > 0) {
160+
attachmentStream = SignalServiceAttachment.newStreamBuilder()
161+
.withStream(stream)
162+
.withContentType("application/octet-stream")
163+
.withLength(length)
164+
.build();
165+
} else {
166+
attachmentStream = SignalServiceAttachment.emptyStream("application/octet-stream");
167+
}
157168

158169
messageSender.sendMessage(SignalServiceSyncMessage.forGroups(attachmentStream),
159170
UnidentifiedAccessUtil.getAccessForSync(context));

libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java

+1
Original file line numberDiff line numberDiff line change
@@ -869,6 +869,7 @@ private byte[] createMultiDeviceContactsContent(SignalServiceAttachmentStream co
869869
private byte[] createMultiDeviceGroupsContent(SignalServiceAttachmentStream groups) throws IOException {
870870
Content.Builder container = Content.newBuilder();
871871
SyncMessage.Builder builder = createSyncMessageBuilder();
872+
872873
builder.setGroups(SyncMessage.Groups.newBuilder()
873874
.setBlob(createAttachmentPointer(groups)));
874875

libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachment.java

+5
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.whispersystems.signalservice.internal.push.http.CancelationSignal;
1111
import org.whispersystems.signalservice.internal.push.http.ResumableUploadSpec;
1212

13+
import java.io.ByteArrayInputStream;
1314
import java.io.InputStream;
1415

1516
public abstract class SignalServiceAttachment {
@@ -39,6 +40,10 @@ public static Builder newStreamBuilder() {
3940
return new Builder();
4041
}
4142

43+
public static SignalServiceAttachmentStream emptyStream(String contentType) {
44+
return new SignalServiceAttachmentStream(new ByteArrayInputStream(new byte[0]), contentType, 0, Optional.absent(), false, false, null, null);
45+
}
46+
4247
public static class Builder {
4348

4449
private InputStream inputStream;

0 commit comments

Comments
 (0)