2015-01-12 04:27:34 +00:00
|
|
|
package org.thoughtcrime.securesms.jobs;
|
|
|
|
|
|
|
|
import android.content.Context;
|
2015-10-13 01:25:05 +00:00
|
|
|
import android.support.annotation.NonNull;
|
2018-12-06 20:14:20 +00:00
|
|
|
import android.support.annotation.Nullable;
|
2015-01-12 04:27:34 +00:00
|
|
|
|
|
|
|
import org.thoughtcrime.securesms.BuildConfig;
|
2018-10-03 16:42:35 +00:00
|
|
|
import org.thoughtcrime.securesms.R;
|
2015-01-12 04:27:34 +00:00
|
|
|
import org.thoughtcrime.securesms.TextSecureExpiredException;
|
2015-10-13 01:25:05 +00:00
|
|
|
import org.thoughtcrime.securesms.attachments.Attachment;
|
2015-01-12 04:27:34 +00:00
|
|
|
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
2015-10-13 01:25:05 +00:00
|
|
|
import org.thoughtcrime.securesms.database.AttachmentDatabase;
|
2017-05-08 22:32:59 +00:00
|
|
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
2018-06-18 19:27:04 +00:00
|
|
|
import org.thoughtcrime.securesms.jobmanager.JobParameters;
|
2018-08-02 13:50:36 +00:00
|
|
|
import org.thoughtcrime.securesms.logging.Log;
|
2015-01-02 23:43:28 +00:00
|
|
|
import org.thoughtcrime.securesms.mms.MediaConstraints;
|
2015-11-23 04:18:54 +00:00
|
|
|
import org.thoughtcrime.securesms.mms.MediaStream;
|
2017-05-08 22:32:59 +00:00
|
|
|
import org.thoughtcrime.securesms.mms.MmsException;
|
2015-01-02 23:43:28 +00:00
|
|
|
import org.thoughtcrime.securesms.transport.UndeliverableMessageException;
|
2018-03-19 18:22:39 +00:00
|
|
|
import org.thoughtcrime.securesms.util.MediaUtil;
|
2015-01-12 04:27:34 +00:00
|
|
|
import org.thoughtcrime.securesms.util.Util;
|
|
|
|
|
2015-01-02 23:43:28 +00:00
|
|
|
import java.io.IOException;
|
2015-10-13 01:25:05 +00:00
|
|
|
import java.util.LinkedList;
|
|
|
|
import java.util.List;
|
2015-01-02 23:43:28 +00:00
|
|
|
|
2018-11-27 20:34:42 +00:00
|
|
|
import androidx.work.WorkerParameters;
|
|
|
|
|
2018-11-15 20:05:08 +00:00
|
|
|
public abstract class SendJob extends ContextJob {
|
2015-10-13 01:25:05 +00:00
|
|
|
|
2018-01-25 03:17:44 +00:00
|
|
|
@SuppressWarnings("unused")
|
2015-01-02 23:43:28 +00:00
|
|
|
private final static String TAG = SendJob.class.getSimpleName();
|
2015-01-12 04:27:34 +00:00
|
|
|
|
2019-01-14 23:15:53 +00:00
|
|
|
public SendJob(@NonNull Context context, @NonNull WorkerParameters workerParameters) {
|
2018-11-27 20:34:42 +00:00
|
|
|
super(context, workerParameters);
|
|
|
|
}
|
|
|
|
|
2015-01-12 04:27:34 +00:00
|
|
|
public SendJob(Context context, JobParameters parameters) {
|
|
|
|
super(context, parameters);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-11-15 20:05:08 +00:00
|
|
|
public final void onRun() throws Exception {
|
2015-10-28 14:46:47 +00:00
|
|
|
if (Util.getDaysTillBuildExpiry() <= 0) {
|
2015-01-12 04:27:34 +00:00
|
|
|
throw new TextSecureExpiredException(String.format("TextSecure expired (build %d, now %d)",
|
|
|
|
BuildConfig.BUILD_TIMESTAMP,
|
|
|
|
System.currentTimeMillis()));
|
|
|
|
}
|
|
|
|
|
2018-08-02 13:50:36 +00:00
|
|
|
Log.i(TAG, "Starting message send attempt");
|
2018-11-15 20:05:08 +00:00
|
|
|
onSend();
|
2018-08-02 13:50:36 +00:00
|
|
|
Log.i(TAG, "Message send completed");
|
2015-01-12 04:27:34 +00:00
|
|
|
}
|
|
|
|
|
2018-11-15 20:05:08 +00:00
|
|
|
protected abstract void onSend() throws Exception;
|
2015-01-02 23:43:28 +00:00
|
|
|
|
2015-10-13 01:25:05 +00:00
|
|
|
protected void markAttachmentsUploaded(long messageId, @NonNull List<Attachment> attachments) {
|
|
|
|
AttachmentDatabase database = DatabaseFactory.getAttachmentDatabase(context);
|
|
|
|
|
|
|
|
for (Attachment attachment : attachments) {
|
|
|
|
database.markAttachmentUploaded(messageId, attachment);
|
2015-01-02 23:43:28 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-03-19 18:22:39 +00:00
|
|
|
protected List<Attachment> scaleAndStripExifFromAttachments(@NonNull MediaConstraints constraints,
|
|
|
|
@NonNull List<Attachment> attachments)
|
2015-10-13 01:25:05 +00:00
|
|
|
throws UndeliverableMessageException
|
2015-01-02 23:43:28 +00:00
|
|
|
{
|
2015-10-13 01:25:05 +00:00
|
|
|
AttachmentDatabase attachmentDatabase = DatabaseFactory.getAttachmentDatabase(context);
|
|
|
|
List<Attachment> results = new LinkedList<>();
|
|
|
|
|
|
|
|
for (Attachment attachment : attachments) {
|
|
|
|
try {
|
2018-01-25 03:17:44 +00:00
|
|
|
if (constraints.isSatisfied(context, attachment)) {
|
2018-03-19 18:22:39 +00:00
|
|
|
if (MediaUtil.isJpeg(attachment)) {
|
|
|
|
MediaStream stripped = constraints.getResizedMedia(context, attachment);
|
|
|
|
results.add(attachmentDatabase.updateAttachmentData(attachment, stripped));
|
|
|
|
} else {
|
|
|
|
results.add(attachment);
|
|
|
|
}
|
2015-10-13 01:25:05 +00:00
|
|
|
} else if (constraints.canResize(attachment)) {
|
2018-01-25 03:17:44 +00:00
|
|
|
MediaStream resized = constraints.getResizedMedia(context, attachment);
|
|
|
|
results.add(attachmentDatabase.updateAttachmentData(attachment, resized));
|
2015-10-13 01:25:05 +00:00
|
|
|
} else {
|
|
|
|
throw new UndeliverableMessageException("Size constraints could not be met!");
|
|
|
|
}
|
|
|
|
} catch (IOException | MmsException e) {
|
|
|
|
throw new UndeliverableMessageException(e);
|
2015-01-02 23:43:28 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-10-13 01:25:05 +00:00
|
|
|
return results;
|
2015-01-02 23:43:28 +00:00
|
|
|
}
|
2018-12-06 20:14:20 +00:00
|
|
|
|
|
|
|
protected void log(@NonNull String tag, @NonNull String message) {
|
|
|
|
Log.i(tag, "[" + getId().toString() + "] " + message + logSuffix());
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void warn(@NonNull String tag, @NonNull String message) {
|
|
|
|
warn(tag, message, null);
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void warn(@NonNull String tag, @Nullable Throwable t) {
|
|
|
|
warn(tag, "", t);
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void warn(@NonNull String tag, @NonNull String message, @Nullable Throwable t) {
|
|
|
|
Log.w(tag, "[" + getId().toString() + "] " + message + logSuffix(), t);
|
|
|
|
}
|
2015-01-12 04:27:34 +00:00
|
|
|
}
|