Skip to content

Commit b8a8079

Browse files
committed
Add optional filename support to attachment pointers
// FREEBIE
1 parent aca08b2 commit b8a8079

9 files changed

+222
-38
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,10 @@ private AttachmentPointer createAttachmentPointer(SignalServiceAttachmentStream
451451
.setDigest(ByteString.copyFrom(attachmentIdAndDigest.second()))
452452
.setSize((int)attachment.getLength());
453453

454+
if (attachment.getFileName().isPresent()) {
455+
builder.setFileName(attachment.getFileName().get());
456+
}
457+
454458
if (attachment.getPreview().isPresent()) {
455459
builder.setThumbnail(ByteString.copyFrom(attachment.getPreview().get()));
456460
}

java/src/main/java/org/whispersystems/signalservice/api/crypto/SignalServiceCipher.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,8 @@ private SignalServiceDataMessage createSignalServiceMessage(SignalServiceEnvelop
170170
envelope.getRelay(),
171171
pointer.hasSize() ? Optional.of(pointer.getSize()) : Optional.<Integer>absent(),
172172
pointer.hasThumbnail() ? Optional.of(pointer.getThumbnail().toByteArray()): Optional.<byte[]>absent(),
173-
pointer.hasDigest() ? Optional.of(pointer.getDigest().toByteArray()) : Optional.<byte[]>absent()));
173+
pointer.hasDigest() ? Optional.of(pointer.getDigest().toByteArray()) : Optional.<byte[]>absent(),
174+
pointer.hasFileName() ? Optional.of(pointer.getFileName()) : Optional.<String>absent()));
174175
}
175176

176177
return new SignalServiceDataMessage(envelope.getTimestamp(), groupInfo, attachments,
@@ -263,7 +264,8 @@ private SignalServiceGroup createGroupInfo(SignalServiceEnvelope envelope, DataM
263264
pointer.getContentType(),
264265
pointer.getKey().toByteArray(),
265266
envelope.getRelay(),
266-
pointer.hasDigest() ? Optional.of(pointer.getDigest().toByteArray()) : Optional.<byte[]>absent());
267+
pointer.hasDigest() ? Optional.of(pointer.getDigest().toByteArray()) : Optional.<byte[]>absent(),
268+
Optional.<String>absent());
267269
}
268270

269271
return new SignalServiceGroup(type, content.getGroup().getId().toByteArray(), name, members, avatar);

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
package org.whispersystems.signalservice.api.messages;
88

9+
import org.whispersystems.libsignal.util.guava.Optional;
10+
911
import java.io.InputStream;
1012

1113
public abstract class SignalServiceAttachment {
@@ -39,6 +41,7 @@ public static class Builder {
3941

4042
private InputStream inputStream;
4143
private String contentType;
44+
private String fileName;
4245
private long length;
4346
private ProgressListener listener;
4447

@@ -59,6 +62,11 @@ public Builder withLength(long length) {
5962
return this;
6063
}
6164

65+
public Builder withFileName(String fileName) {
66+
this.fileName = fileName;
67+
return this;
68+
}
69+
6270
public Builder withListener(ProgressListener listener) {
6371
this.listener = listener;
6472
return this;
@@ -69,7 +77,7 @@ public SignalServiceAttachmentStream build() {
6977
if (contentType == null) throw new IllegalArgumentException("No content type specified!");
7078
if (length == 0) throw new IllegalArgumentException("No length specified!");
7179

72-
return new SignalServiceAttachmentStream(inputStream, contentType, length, listener);
80+
return new SignalServiceAttachmentStream(inputStream, contentType, length, Optional.fromNullable(fileName), listener);
7381
}
7482
}
7583

java/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachmentPointer.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,24 @@ public class SignalServiceAttachmentPointer extends SignalServiceAttachment {
2424
private final Optional<Integer> size;
2525
private final Optional<byte[]> preview;
2626
private final Optional<byte[]> digest;
27+
private final Optional<String> fileName;
2728

28-
public SignalServiceAttachmentPointer(long id, String contentType, byte[] key, String relay, Optional<byte[]> digest) {
29-
this(id, contentType, key, relay, Optional.<Integer>absent(), Optional.<byte[]>absent(), digest);
29+
public SignalServiceAttachmentPointer(long id, String contentType, byte[] key, String relay, Optional<byte[]> digest, Optional<String> fileName) {
30+
this(id, contentType, key, relay, Optional.<Integer>absent(), Optional.<byte[]>absent(), digest, fileName);
3031
}
3132

3233
public SignalServiceAttachmentPointer(long id, String contentType, byte[] key, String relay,
3334
Optional<Integer> size, Optional<byte[]> preview,
34-
Optional<byte[]> digest)
35+
Optional<byte[]> digest, Optional<String> fileName)
3536
{
3637
super(contentType);
37-
this.id = id;
38-
this.key = key;
39-
this.relay = Optional.fromNullable(relay);
40-
this.size = size;
41-
this.preview = preview;
42-
this.digest = digest;
38+
this.id = id;
39+
this.key = key;
40+
this.relay = Optional.fromNullable(relay);
41+
this.size = size;
42+
this.preview = preview;
43+
this.digest = digest;
44+
this.fileName = fileName;
4345
}
4446

4547
public long getId() {
@@ -68,6 +70,10 @@ public Optional<Integer> getSize() {
6870
return size;
6971
}
7072

73+
public Optional<String> getFileName() {
74+
return fileName;
75+
}
76+
7177
public Optional<byte[]> getPreview() {
7278
return preview;
7379
}

java/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachmentStream.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,19 @@ public class SignalServiceAttachmentStream extends SignalServiceAttachment {
1717

1818
private final InputStream inputStream;
1919
private final long length;
20+
private final Optional<String> fileName;
2021
private final ProgressListener listener;
2122
private final Optional<byte[]> preview;
2223

23-
public SignalServiceAttachmentStream(InputStream inputStream, String contentType, long length, ProgressListener listener) {
24-
this(inputStream, contentType, length, Optional.<byte[]>absent(), listener);
24+
public SignalServiceAttachmentStream(InputStream inputStream, String contentType, long length, Optional<String> fileName, ProgressListener listener) {
25+
this(inputStream, contentType, length, fileName, Optional.<byte[]>absent(), listener);
2526
}
2627

27-
public SignalServiceAttachmentStream(InputStream inputStream, String contentType, long length, Optional<byte[]> preview, ProgressListener listener) {
28+
public SignalServiceAttachmentStream(InputStream inputStream, String contentType, long length, Optional<String> fileName, Optional<byte[]> preview, ProgressListener listener) {
2829
super(contentType);
2930
this.inputStream = inputStream;
3031
this.length = length;
32+
this.fileName = fileName;
3133
this.listener = listener;
3234
this.preview = preview;
3335
}
@@ -50,6 +52,10 @@ public long getLength() {
5052
return length;
5153
}
5254

55+
public Optional<String> getFileName() {
56+
return fileName;
57+
}
58+
5359
public ProgressListener getListener() {
5460
return listener;
5561
}

java/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContactsInputStream.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public DeviceContact read() throws IOException {
3636
InputStream avatarStream = new LimitedInputStream(in, avatarLength);
3737
String avatarContentType = details.getAvatar().getContentType();
3838

39-
avatar = Optional.of(new SignalServiceAttachmentStream(avatarStream, avatarContentType, avatarLength, null));
39+
avatar = Optional.of(new SignalServiceAttachmentStream(avatarStream, avatarContentType, avatarLength, Optional.<String>absent(), null));
4040
}
4141

4242
return new DeviceContact(number, name, avatar, color);

java/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceGroupsInputStream.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public DeviceGroup read() throws IOException {
4343
InputStream avatarStream = new ChunkedInputStream.LimitedInputStream(in, avatarLength);
4444
String avatarContentType = details.getAvatar().getContentType();
4545

46-
avatar = Optional.of(new SignalServiceAttachmentStream(avatarStream, avatarContentType, avatarLength, null));
46+
avatar = Optional.of(new SignalServiceAttachmentStream(avatarStream, avatarContentType, avatarLength, Optional.<String>absent(), null));
4747
}
4848

4949
return new DeviceGroup(id, name, members, avatar, active);

0 commit comments

Comments
 (0)