This commit is contained in:
Moxie Marlinspike
2018-02-07 14:01:37 -08:00
parent 8bec5a96f5
commit d567534609
72 changed files with 1164 additions and 505 deletions

View File

@@ -35,10 +35,12 @@ public abstract class Attachment {
private final int width;
private final int height;
private final boolean quote;
public Attachment(@NonNull String contentType, int transferState, long size, @Nullable String fileName,
@Nullable String location, @Nullable String key, @Nullable String relay,
@Nullable byte[] digest, @Nullable String fastPreflightId, boolean voiceNote,
int width, int height)
int width, int height, boolean quote)
{
this.contentType = contentType;
this.transferState = transferState;
@@ -52,6 +54,7 @@ public abstract class Attachment {
this.voiceNote = voiceNote;
this.width = width;
this.height = height;
this.quote = quote;
}
@Nullable
@@ -119,4 +122,8 @@ public abstract class Attachment {
public int getHeight() {
return height;
}
public boolean isQuote() {
return quote;
}
}

View File

@@ -17,9 +17,9 @@ public class DatabaseAttachment extends Attachment {
String contentType, int transferProgress, long size,
String fileName, String location, String key, String relay,
byte[] digest, String fastPreflightId, boolean voiceNote,
int width, int height)
int width, int height, boolean quote)
{
super(contentType, transferProgress, size, fileName, location, key, relay, digest, fastPreflightId, voiceNote, width, height);
super(contentType, transferProgress, size, fileName, location, key, relay, digest, fastPreflightId, voiceNote, width, height, quote);
this.attachmentId = attachmentId;
this.hasData = hasData;
this.hasThumbnail = hasThumbnail;

View File

@@ -10,7 +10,7 @@ import org.thoughtcrime.securesms.database.MmsDatabase;
public class MmsNotificationAttachment extends Attachment {
public MmsNotificationAttachment(int status, long size) {
super("application/mms", getTransferStateFromStatus(status), size, null, null, null, null, null, null, false, 0, 0);
super("application/mms", getTransferStateFromStatus(status), size, null, null, null, null, null, null, false, 0, 0, false);
}
@Nullable

View File

@@ -15,12 +15,12 @@ import java.util.List;
public class PointerAttachment extends Attachment {
private PointerAttachment(@NonNull String contentType, int transferState, long size,
@Nullable String fileName, @NonNull String location,
@NonNull String key, @NonNull String relay,
@Nullable byte[] digest, boolean voiceNote,
@Nullable String fileName, @NonNull String location,
@Nullable String key, @NonNull String relay,
@Nullable byte[] digest, boolean voiceNote,
int width, int height)
{
super(contentType, transferState, size, fileName, location, key, relay, digest, null, voiceNote, width, height);
super(contentType, transferState, size, fileName, location, key, relay, digest, null, voiceNote, width, height, false);
}
@Nullable
@@ -41,23 +41,36 @@ public class PointerAttachment extends Attachment {
if (pointers.isPresent()) {
for (SignalServiceAttachment pointer : pointers.get()) {
if (pointer.isPointer()) {
String encodedKey = Base64.encodeBytes(pointer.asPointer().getKey());
Optional<Attachment> result = forPointer(Optional.of(pointer));
results.add(new PointerAttachment(pointer.getContentType(),
AttachmentDatabase.TRANSFER_PROGRESS_PENDING,
pointer.asPointer().getSize().or(0),
pointer.asPointer().getFileName().orNull(),
String.valueOf(pointer.asPointer().getId()),
encodedKey, pointer.asPointer().getRelay().orNull(),
pointer.asPointer().getDigest().orNull(),
pointer.asPointer().getVoiceNote(),
pointer.asPointer().getWidth(),
pointer.asPointer().getHeight()));
if (result.isPresent()) {
results.add(result.get());
}
}
}
return results;
}
public static Optional<Attachment> forPointer(Optional<SignalServiceAttachment> pointer) {
if (!pointer.isPresent() || !pointer.get().isPointer()) return Optional.absent();
String encodedKey = null;
if (pointer.get().asPointer().getKey() != null) {
encodedKey = Base64.encodeBytes(pointer.get().asPointer().getKey());
}
return Optional.of(new PointerAttachment(pointer.get().getContentType(),
AttachmentDatabase.TRANSFER_PROGRESS_PENDING,
pointer.get().asPointer().getSize().or(0),
pointer.get().asPointer().getFileName().orNull(),
String.valueOf(pointer.get().asPointer().getId()),
encodedKey, pointer.get().asPointer().getRelay().orNull(),
pointer.get().asPointer().getDigest().orNull(),
pointer.get().asPointer().getVoiceNote(),
pointer.get().asPointer().getWidth(),
pointer.get().asPointer().getHeight()));
}
}

View File

@@ -10,17 +10,17 @@ public class UriAttachment extends Attachment {
private final @Nullable Uri thumbnailUri;
public UriAttachment(@NonNull Uri uri, @NonNull String contentType, int transferState, long size,
@Nullable String fileName, boolean voiceNote)
@Nullable String fileName, boolean voiceNote, boolean quote)
{
this(uri, uri, contentType, transferState, size, 0, 0, fileName, null, voiceNote);
this(uri, uri, contentType, transferState, size, 0, 0, fileName, null, voiceNote, quote);
}
public UriAttachment(@NonNull Uri dataUri, @Nullable Uri thumbnailUri,
@NonNull String contentType, int transferState, long size, int width, int height,
@Nullable String fileName, @Nullable String fastPreflightId,
boolean voiceNote)
boolean voiceNote, boolean quote)
{
super(contentType, transferState, size, fileName, null, null, null, null, fastPreflightId, voiceNote, width, height);
super(contentType, transferState, size, fileName, null, null, null, null, fastPreflightId, voiceNote, width, height, quote);
this.dataUri = dataUri;
this.thumbnailUri = thumbnailUri;
}