Re-use recently-acquired attachment pointers.

This commit is contained in:
Greyson Parrelli
2020-03-27 20:36:06 -04:00
parent 9b0954a898
commit d6000af843
21 changed files with 162 additions and 138 deletions

View File

@@ -381,7 +381,8 @@ public class SignalServiceMessageSender {
attachment.getFileName(),
attachment.getVoiceNote(),
attachment.getCaption(),
attachment.getBlurHash());
attachment.getBlurHash(),
attachment.getUploadTimestamp());
}

View File

@@ -51,6 +51,7 @@ public abstract class SignalServiceAttachment {
private int height;
private String caption;
private String blurHash;
private long uploadTimestamp;
private Builder() {}
@@ -109,6 +110,11 @@ public abstract class SignalServiceAttachment {
return this;
}
public Builder withUploadTimestamp(long uploadTimestamp) {
this.uploadTimestamp = uploadTimestamp;
return this;
}
public SignalServiceAttachmentStream build() {
if (inputStream == null) throw new IllegalArgumentException("Must specify stream!");
if (contentType == null) throw new IllegalArgumentException("No content type specified!");
@@ -122,6 +128,7 @@ public abstract class SignalServiceAttachment {
Optional.<byte[]>absent(),
width,
height,
uploadTimestamp,
Optional.fromNullable(caption),
Optional.fromNullable(blurHash),
listener,

View File

@@ -12,7 +12,7 @@ import org.whispersystems.signalservice.api.SignalServiceMessageReceiver;
/**
* Represents a received SignalServiceAttachment "handle." This
* is a pointer to the actual attachment content, which needs to be
* retrieved using {@link SignalServiceMessageReceiver#retrieveAttachment(SignalServiceAttachmentPointer, java.io.File, int)}
* retrieved using {@link SignalServiceMessageReceiver#retrieveAttachment(SignalServiceAttachmentPointer, java.io.File, long)}
*
* @author Moxie Marlinspike
*/
@@ -29,26 +29,28 @@ public class SignalServiceAttachmentPointer extends SignalServiceAttachment {
private final int height;
private final Optional<String> caption;
private final Optional<String> blurHash;
private final long uploadTimestamp;
public SignalServiceAttachmentPointer(long id, String contentType, byte[] key,
Optional<Integer> size, Optional<byte[]> preview,
int width, int height,
Optional<byte[]> digest, Optional<String> fileName,
boolean voiceNote, Optional<String> caption,
Optional<String> blurHash)
Optional<String> blurHash, long uploadTimestamp)
{
super(contentType);
this.id = id;
this.key = key;
this.size = size;
this.preview = preview;
this.width = width;
this.height = height;
this.digest = digest;
this.fileName = fileName;
this.voiceNote = voiceNote;
this.caption = caption;
this.blurHash = blurHash;
this.id = id;
this.key = key;
this.size = size;
this.preview = preview;
this.width = width;
this.height = height;
this.digest = digest;
this.fileName = fileName;
this.voiceNote = voiceNote;
this.caption = caption;
this.blurHash = blurHash;
this.uploadTimestamp = uploadTimestamp;
}
public long getId() {
@@ -104,4 +106,8 @@ public class SignalServiceAttachmentPointer extends SignalServiceAttachment {
public Optional<String> getBlurHash() {
return blurHash;
}
public long getUploadTimestamp() {
return uploadTimestamp;
}
}

View File

@@ -25,11 +25,12 @@ public class SignalServiceAttachmentStream extends SignalServiceAttachment {
private final boolean voiceNote;
private final int width;
private final int height;
private final long uploadTimestamp;
private final Optional<String> caption;
private final Optional<String> blurHash;
public SignalServiceAttachmentStream(InputStream inputStream, String contentType, long length, Optional<String> fileName, boolean voiceNote, ProgressListener listener, CancelationSignal cancelationSignal) {
this(inputStream, contentType, length, fileName, voiceNote, Optional.<byte[]>absent(), 0, 0, Optional.<String>absent(), Optional.<String>absent(), listener, cancelationSignal);
this(inputStream, contentType, length, fileName, voiceNote, Optional.<byte[]>absent(), 0, 0, System.currentTimeMillis(), Optional.<String>absent(), Optional.<String>absent(), listener, cancelationSignal);
}
public SignalServiceAttachmentStream(InputStream inputStream,
@@ -40,6 +41,7 @@ public class SignalServiceAttachmentStream extends SignalServiceAttachment {
Optional<byte[]> preview,
int width,
int height,
long uploadTimestamp,
Optional<String> caption,
Optional<String> blurHash,
ProgressListener listener,
@@ -54,6 +56,7 @@ public class SignalServiceAttachmentStream extends SignalServiceAttachment {
this.preview = preview;
this.width = width;
this.height = height;
this.uploadTimestamp = uploadTimestamp;
this.caption = caption;
this.blurHash = blurHash;
this.cancelationSignal = cancelationSignal;
@@ -112,4 +115,8 @@ public class SignalServiceAttachmentStream extends SignalServiceAttachment {
public Optional<String> getBlurHash() {
return blurHash;
}
public long getUploadTimestamp() {
return uploadTimestamp;
}
}

View File

@@ -747,7 +747,8 @@ public final class SignalServiceContent {
pointer.hasFileName() ? Optional.of(pointer.getFileName()) : Optional.<String>absent(),
(pointer.getFlags() & SignalServiceProtos.AttachmentPointer.Flags.VOICE_MESSAGE_VALUE) != 0,
pointer.hasCaption() ? Optional.of(pointer.getCaption()) : Optional.<String>absent(),
pointer.hasBlurHash() ? Optional.of(pointer.getBlurHash()) : Optional.<String>absent());
pointer.hasBlurHash() ? Optional.of(pointer.getBlurHash()) : Optional.<String>absent(),
pointer.hasUploadTimestamp() ? pointer.getUploadTimestamp() : 0);
}
@@ -803,7 +804,8 @@ public final class SignalServiceContent {
Optional.<String>absent(),
false,
Optional.<String>absent(),
Optional.<String>absent());
Optional.<String>absent(),
pointer.hasUploadTimestamp() ? pointer.getUploadTimestamp() : 0);
}
return new SignalServiceGroup(type, content.getGroup().getId().toByteArray(), name, members, avatar);

View File

@@ -377,18 +377,19 @@ message AttachmentPointer {
VOICE_MESSAGE = 1;
}
optional fixed64 id = 1;
optional string contentType = 2;
optional bytes key = 3;
optional uint32 size = 4;
optional bytes thumbnail = 5;
optional bytes digest = 6;
optional string fileName = 7;
optional uint32 flags = 8;
optional uint32 width = 9;
optional uint32 height = 10;
optional string caption = 11;
optional string blurHash = 12;
optional fixed64 id = 1;
optional string contentType = 2;
optional bytes key = 3;
optional uint32 size = 4;
optional bytes thumbnail = 5;
optional bytes digest = 6;
optional string fileName = 7;
optional uint32 flags = 8;
optional uint32 width = 9;
optional uint32 height = 10;
optional string caption = 11;
optional string blurHash = 12;
optional uint64 uploadTimestamp = 13;
}
message GroupContext {