Search in sources :

Example 31 with Data

use of org.thoughtcrime.securesms.jobmanager.Data in project Signal-Android by WhisperSystems.

the class RateLimitUtil method retryAllRateLimitedMessages.

/**
 * Forces a retry of all rate limited messages by editing jobs that are in the queue.
 */
@WorkerThread
public static void retryAllRateLimitedMessages(@NonNull Context context) {
    Set<Long> sms = SignalDatabase.sms().getAllRateLimitedMessageIds();
    Set<Long> mms = SignalDatabase.mms().getAllRateLimitedMessageIds();
    if (sms.isEmpty() && mms.isEmpty()) {
        return;
    }
    Log.i(TAG, "Retrying " + sms.size() + " sms records and " + mms.size() + " mms records.");
    SignalDatabase.sms().clearRateLimitStatus(sms);
    SignalDatabase.mms().clearRateLimitStatus(mms);
    ApplicationDependencies.getJobManager().update((job, serializer) -> {
        Data data = serializer.deserialize(job.getSerializedData());
        if (job.getFactoryKey().equals(PushTextSendJob.KEY) && sms.contains(PushTextSendJob.getMessageId(data))) {
            return job.withNextRunAttemptTime(System.currentTimeMillis());
        } else if (job.getFactoryKey().equals(PushMediaSendJob.KEY) && mms.contains(PushMediaSendJob.getMessageId(data))) {
            return job.withNextRunAttemptTime(System.currentTimeMillis());
        } else if (job.getFactoryKey().equals(PushGroupSendJob.KEY) && mms.contains(PushGroupSendJob.getMessageId(data))) {
            return job.withNextRunAttemptTime(System.currentTimeMillis());
        } else {
            return job;
        }
    });
}
Also used : Data(org.thoughtcrime.securesms.jobmanager.Data) WorkerThread(androidx.annotation.WorkerThread)

Example 32 with Data

use of org.thoughtcrime.securesms.jobmanager.Data in project Signal-Android by signalapp.

the class RateLimitUtil method retryAllRateLimitedMessages.

/**
 * Forces a retry of all rate limited messages by editing jobs that are in the queue.
 */
@WorkerThread
public static void retryAllRateLimitedMessages(@NonNull Context context) {
    Set<Long> sms = SignalDatabase.sms().getAllRateLimitedMessageIds();
    Set<Long> mms = SignalDatabase.mms().getAllRateLimitedMessageIds();
    if (sms.isEmpty() && mms.isEmpty()) {
        return;
    }
    Log.i(TAG, "Retrying " + sms.size() + " sms records and " + mms.size() + " mms records.");
    SignalDatabase.sms().clearRateLimitStatus(sms);
    SignalDatabase.mms().clearRateLimitStatus(mms);
    ApplicationDependencies.getJobManager().update((job, serializer) -> {
        Data data = serializer.deserialize(job.getSerializedData());
        if (job.getFactoryKey().equals(PushTextSendJob.KEY) && sms.contains(PushTextSendJob.getMessageId(data))) {
            return job.withNextRunAttemptTime(System.currentTimeMillis());
        } else if (job.getFactoryKey().equals(PushMediaSendJob.KEY) && mms.contains(PushMediaSendJob.getMessageId(data))) {
            return job.withNextRunAttemptTime(System.currentTimeMillis());
        } else if (job.getFactoryKey().equals(PushGroupSendJob.KEY) && mms.contains(PushGroupSendJob.getMessageId(data))) {
            return job.withNextRunAttemptTime(System.currentTimeMillis());
        } else {
            return job;
        }
    });
}
Also used : Data(org.thoughtcrime.securesms.jobmanager.Data) WorkerThread(androidx.annotation.WorkerThread)

Example 33 with Data

use of org.thoughtcrime.securesms.jobmanager.Data in project Signal-Android by signalapp.

the class DownloadLatestEmojiDataJob method clearOldEmojiData.

private static void clearOldEmojiData(@NonNull Context context, @Nullable EmojiFiles.Version newVersion) {
    EmojiFiles.Version version = EmojiFiles.Version.readVersion(context);
    final String currentDirectoryName;
    final String newVersionDirectoryName;
    if (version != null) {
        currentDirectoryName = version.getUuid().toString();
    } else {
        currentDirectoryName = "";
    }
    if (newVersion != null) {
        newVersionDirectoryName = newVersion.getUuid().toString();
    } else {
        newVersionDirectoryName = "";
    }
    File emojiDirectory = EmojiFiles.getBaseDirectory(context);
    File[] files = emojiDirectory.listFiles();
    if (files == null) {
        Log.d(TAG, "No emoji data to delete.");
        return;
    }
    Log.d(TAG, "Deleting old folders of emoji data");
    Stream.of(files).filter(File::isDirectory).filterNot(file -> file.getName().equals(currentDirectoryName)).filterNot(file -> file.getName().equals(newVersionDirectoryName)).forEach(FileUtils::deleteDirectory);
    EmojiPageCache.INSTANCE.clear();
    if (version != null) {
        SignalStore.emojiValues().clearJumboEmojiSheets(version.getVersion());
    }
}
Also used : SignalStore(org.thoughtcrime.securesms.keyvalue.SignalStore) Context(android.content.Context) Okio(okio.Okio) Arrays(java.util.Arrays) Hex(com.mobilecoin.lib.util.Hex) Stream(com.annimon.stream.Stream) Source(okio.Source) ScreenDensity(org.thoughtcrime.securesms.util.ScreenDensity) NonNull(androidx.annotation.NonNull) Data(org.thoughtcrime.securesms.jobmanager.Data) Uri(android.net.Uri) AutoDownloadEmojiConstraint(org.thoughtcrime.securesms.jobmanager.impl.AutoDownloadEmojiConstraint) EmojiFiles(org.thoughtcrime.securesms.emoji.EmojiFiles) Sink(okio.Sink) Matcher(java.util.regex.Matcher) EmojiPageCache(org.thoughtcrime.securesms.emoji.EmojiPageCache) Response(okhttp3.Response) IntPair(com.annimon.stream.IntPair) FileUtils(org.thoughtcrime.securesms.util.FileUtils) EmojiJsonRequest(org.thoughtcrime.securesms.emoji.EmojiJsonRequest) EmojiSource(org.thoughtcrime.securesms.emoji.EmojiSource) ResponseBody(okhttp3.ResponseBody) JumboEmoji(org.thoughtcrime.securesms.emoji.JumboEmoji) OutputStream(java.io.OutputStream) EmojiData(org.thoughtcrime.securesms.emoji.EmojiData) EmojiImageRequest(org.thoughtcrime.securesms.emoji.EmojiImageRequest) ApplicationDependencies(org.thoughtcrime.securesms.dependencies.ApplicationDependencies) NetworkConstraint(org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint) IOException(java.io.IOException) UUID(java.util.UUID) File(java.io.File) EmojiDownloader(org.thoughtcrime.securesms.emoji.EmojiDownloader) EmojiPageModel(org.thoughtcrime.securesms.components.emoji.EmojiPageModel) TimeUnit(java.util.concurrent.TimeUnit) Log(org.signal.core.util.logging.Log) List(java.util.List) Nullable(androidx.annotation.Nullable) Job(org.thoughtcrime.securesms.jobmanager.Job) EmojiRemote(org.thoughtcrime.securesms.emoji.EmojiRemote) Pattern(java.util.regex.Pattern) FileUtils(org.thoughtcrime.securesms.util.FileUtils) File(java.io.File) EmojiFiles(org.thoughtcrime.securesms.emoji.EmojiFiles)

Example 34 with Data

use of org.thoughtcrime.securesms.jobmanager.Data in project Signal-Android by signalapp.

the class DonationReceiptRedemptionJob method onRun.

@Override
protected void onRun() throws Exception {
    Data inputData = getInputData();
    if (inputData == null) {
        Log.w(TAG, "No input data. Exiting.", null, true);
        return;
    }
    byte[] presentationBytes = inputData.getStringAsBlob(INPUT_RECEIPT_CREDENTIAL_PRESENTATION);
    if (presentationBytes == null) {
        Log.d(TAG, "No response data. Exiting.", null, true);
        return;
    }
    ReceiptCredentialPresentation presentation = new ReceiptCredentialPresentation(presentationBytes);
    Log.d(TAG, "Attempting to redeem token... isForSubscription: " + isForSubscription(), true);
    ServiceResponse<EmptyResponse> response = ApplicationDependencies.getDonationsService().redeemReceipt(presentation, SignalStore.donationsValues().getDisplayBadgesOnProfile(), false).blockingGet();
    if (response.getApplicationError().isPresent()) {
        if (response.getStatus() >= 500) {
            Log.w(TAG, "Encountered a server exception " + response.getStatus(), response.getApplicationError().get(), true);
            throw new RetryableException();
        } else {
            Log.w(TAG, "Encountered a non-recoverable exception " + response.getStatus(), response.getApplicationError().get(), true);
            DonationError.routeDonationError(context, DonationError.genericBadgeRedemptionFailure(errorSource));
            throw new IOException(response.getApplicationError().get());
        }
    } else if (response.getExecutionError().isPresent()) {
        Log.w(TAG, "Encountered a retryable exception", response.getExecutionError().get(), true);
        throw new RetryableException();
    }
    Log.i(TAG, "Successfully redeemed token with response code " + response.getStatus() + "... isForSubscription: " + isForSubscription(), true);
    if (isForSubscription()) {
        Log.d(TAG, "Clearing subscription failure", true);
        SignalStore.donationsValues().clearSubscriptionRedemptionFailed();
    }
}
Also used : ReceiptCredentialPresentation(org.signal.zkgroup.receipts.ReceiptCredentialPresentation) Data(org.thoughtcrime.securesms.jobmanager.Data) IOException(java.io.IOException) EmptyResponse(org.whispersystems.signalservice.internal.EmptyResponse)

Example 35 with Data

use of org.thoughtcrime.securesms.jobmanager.Data in project Signal-Android by signalapp.

the class SendReadReceiptsJobMigration method migrateSendReadReceiptJob.

@NonNull
private static JobData migrateSendReadReceiptJob(@NonNull MmsSmsDatabase mmsSmsDatabase, @NonNull JobData jobData) {
    Data data = jobData.getData();
    if (!data.hasLong("thread")) {
        long[] messageIds = jobData.getData().getLongArray("message_ids");
        SortedSet<Long> threadIds = new TreeSet<>();
        for (long id : messageIds) {
            long threadForMessageId = mmsSmsDatabase.getThreadForMessageId(id);
            if (id != -1) {
                threadIds.add(threadForMessageId);
            }
        }
        if (threadIds.size() != 1) {
            return new JobData("FailingJob", null, new Data.Builder().build());
        } else {
            return jobData.withData(data.buildUpon().putLong("thread", threadIds.first()).build());
        }
    } else {
        return jobData;
    }
}
Also used : TreeSet(java.util.TreeSet) Data(org.thoughtcrime.securesms.jobmanager.Data) NonNull(androidx.annotation.NonNull)

Aggregations

Data (org.thoughtcrime.securesms.jobmanager.Data)42 NonNull (androidx.annotation.NonNull)34 Recipient (org.thoughtcrime.securesms.recipients.Recipient)26 IOException (java.io.IOException)10 Stream (com.annimon.stream.Stream)6 List (java.util.List)6 ApplicationDependencies (org.thoughtcrime.securesms.dependencies.ApplicationDependencies)6 Job (org.thoughtcrime.securesms.jobmanager.Job)6 RecipientId (org.thoughtcrime.securesms.recipients.RecipientId)6 Context (android.content.Context)4 TimeUnit (java.util.concurrent.TimeUnit)4 Test (org.junit.Test)4 Log (org.signal.core.util.logging.Log)4 NetworkConstraint (org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint)4 SignalStore (org.thoughtcrime.securesms.keyvalue.SignalStore)4 WorkerThread (androidx.annotation.WorkerThread)2 HashSet (java.util.HashSet)2 LinkedList (java.util.LinkedList)2 Set (java.util.Set)2 Assert.assertEquals (org.junit.Assert.assertEquals)2