session-android/src/org/thoughtcrime/securesms/jobs/SendJob.java

103 lines
3.7 KiB
Java
Raw Normal View History

package org.thoughtcrime.securesms.jobs;
import android.support.annotation.NonNull;
2018-12-06 21:14:20 +01:00
import android.support.annotation.Nullable;
2019-07-24 04:30:23 +02:00
import network.loki.messenger.BuildConfig;
import org.thoughtcrime.securesms.TextSecureExpiredException;
import org.thoughtcrime.securesms.attachments.Attachment;
import org.thoughtcrime.securesms.database.AttachmentDatabase;
import org.thoughtcrime.securesms.database.DatabaseFactory;
2019-03-28 16:56:35 +01:00
import org.thoughtcrime.securesms.jobmanager.Job;
import org.thoughtcrime.securesms.jobmanager.JobLogger;
import org.thoughtcrime.securesms.logging.Log;
2015-01-03 00:43:28 +01:00
import org.thoughtcrime.securesms.mms.MediaConstraints;
import org.thoughtcrime.securesms.mms.MediaStream;
import org.thoughtcrime.securesms.mms.MmsException;
2015-01-03 00:43:28 +01:00
import org.thoughtcrime.securesms.transport.UndeliverableMessageException;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.Util;
2015-01-03 00:43:28 +01:00
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
2015-01-03 00:43:28 +01:00
2019-03-28 16:56:35 +01:00
public abstract class SendJob extends BaseJob {
@SuppressWarnings("unused")
2015-01-03 00:43:28 +01:00
private final static String TAG = SendJob.class.getSimpleName();
2019-03-28 16:56:35 +01:00
public SendJob(Job.Parameters parameters) {
super(parameters);
}
@Override
public final void onRun() throws Exception {
if (Util.getDaysTillBuildExpiry() <= 0) {
throw new TextSecureExpiredException(String.format("TextSecure expired (build %d, now %d)",
BuildConfig.BUILD_TIMESTAMP,
System.currentTimeMillis()));
}
Log.i(TAG, "Starting message send attempt");
onSend();
Log.i(TAG, "Message send completed");
}
protected abstract void onSend() throws Exception;
2015-01-03 00:43:28 +01: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-03 00:43:28 +01:00
}
}
protected List<Attachment> scaleAndStripExifFromAttachments(@NonNull MediaConstraints constraints,
@NonNull List<Attachment> attachments)
throws UndeliverableMessageException
2015-01-03 00:43:28 +01:00
{
AttachmentDatabase attachmentDatabase = DatabaseFactory.getAttachmentDatabase(context);
List<Attachment> results = new LinkedList<>();
for (Attachment attachment : attachments) {
try {
if (constraints.isSatisfied(context, attachment)) {
if (MediaUtil.isJpeg(attachment)) {
MediaStream stripped = constraints.getResizedMedia(context, attachment);
results.add(attachmentDatabase.updateAttachmentData(attachment, stripped));
} else {
results.add(attachment);
}
} else if (constraints.canResize(attachment)) {
MediaStream resized = constraints.getResizedMedia(context, attachment);
results.add(attachmentDatabase.updateAttachmentData(attachment, resized));
} else {
throw new UndeliverableMessageException("Size constraints could not be met!");
}
} catch (IOException | MmsException e) {
throw new UndeliverableMessageException(e);
2015-01-03 00:43:28 +01:00
}
}
return results;
2015-01-03 00:43:28 +01:00
}
2018-12-06 21:14:20 +01:00
protected void log(@NonNull String tag, @NonNull String message) {
2019-03-28 16:56:35 +01:00
Log.i(tag, JobLogger.format(this, message));
2018-12-06 21:14:20 +01:00
}
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) {
2019-03-28 16:56:35 +01:00
Log.w(tag, JobLogger.format(this, message), t);
2018-12-06 21:14:20 +01:00
}
}