138 lines
3.8 KiB
Java
138 lines
3.8 KiB
Java
/*
|
|
* Copyright (C) 2014-2016 Open Whisper Systems
|
|
*
|
|
* Licensed according to the LICENSE file in this repository.
|
|
*/
|
|
|
|
package org.whispersystems.signalservice.api.messages;
|
|
|
|
import org.whispersystems.libsignal.util.guava.Optional;
|
|
|
|
import java.io.InputStream;
|
|
|
|
public abstract class SignalServiceAttachment {
|
|
|
|
private final String contentType;
|
|
|
|
protected SignalServiceAttachment(String contentType) {
|
|
this.contentType = contentType;
|
|
}
|
|
|
|
public String getContentType() {
|
|
return contentType;
|
|
}
|
|
|
|
public abstract boolean isStream();
|
|
public abstract boolean isPointer();
|
|
|
|
public SignalServiceAttachmentStream asStream() {
|
|
return (SignalServiceAttachmentStream)this;
|
|
}
|
|
|
|
public SignalServiceAttachmentPointer asPointer() {
|
|
return (SignalServiceAttachmentPointer)this;
|
|
}
|
|
|
|
public static Builder newStreamBuilder() {
|
|
return new Builder();
|
|
}
|
|
|
|
public static class Builder {
|
|
|
|
private InputStream inputStream;
|
|
private String contentType;
|
|
private String fileName;
|
|
private long length;
|
|
private ProgressListener listener;
|
|
private boolean voiceNote;
|
|
private int width;
|
|
private int height;
|
|
private String caption;
|
|
private String blurHash;
|
|
|
|
private Builder() {}
|
|
|
|
public Builder withStream(InputStream inputStream) {
|
|
this.inputStream = inputStream;
|
|
return this;
|
|
}
|
|
|
|
public Builder withContentType(String contentType) {
|
|
this.contentType = contentType;
|
|
return this;
|
|
}
|
|
|
|
public Builder withLength(long length) {
|
|
this.length = length;
|
|
return this;
|
|
}
|
|
|
|
public Builder withFileName(String fileName) {
|
|
this.fileName = fileName;
|
|
return this;
|
|
}
|
|
|
|
public Builder withListener(ProgressListener listener) {
|
|
this.listener = listener;
|
|
return this;
|
|
}
|
|
|
|
public Builder withVoiceNote(boolean voiceNote) {
|
|
this.voiceNote = voiceNote;
|
|
return this;
|
|
}
|
|
|
|
public Builder withWidth(int width) {
|
|
this.width = width;
|
|
return this;
|
|
}
|
|
|
|
public Builder withHeight(int height) {
|
|
this.height = height;
|
|
return this;
|
|
}
|
|
|
|
public Builder withCaption(String caption) {
|
|
this.caption = caption;
|
|
return this;
|
|
}
|
|
|
|
public Builder withBlurHash(String blurHash) {
|
|
this.blurHash = blurHash;
|
|
return this;
|
|
}
|
|
|
|
public SignalServiceAttachmentStream build() {
|
|
if (inputStream == null) throw new IllegalArgumentException("Must specify stream!");
|
|
if (contentType == null) throw new IllegalArgumentException("No content type specified!");
|
|
if (length == 0) throw new IllegalArgumentException("No length specified!");
|
|
|
|
return new SignalServiceAttachmentStream(inputStream,
|
|
contentType,
|
|
length,
|
|
Optional.fromNullable(fileName),
|
|
voiceNote,
|
|
Optional.<byte[]>absent(),
|
|
width,
|
|
height,
|
|
Optional.fromNullable(caption),
|
|
Optional.fromNullable(blurHash),
|
|
listener);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* An interface to receive progress information on upload/download of
|
|
* an attachment.
|
|
*/
|
|
public interface ProgressListener {
|
|
/**
|
|
* Called on a progress change event.
|
|
*
|
|
* @param total The total amount to transmit/receive in bytes.
|
|
* @param progress The amount that has been transmitted/received in bytes thus far
|
|
*/
|
|
public void onAttachmentProgress(long total, long progress);
|
|
}
|
|
}
|