private final Context context;
private ReceiveConfig receiveConfig = new ReceiveConfig(false, false, false);
- private boolean needsToRetryFailedMessages = false;
private boolean hasCaughtUpWithOldMessages = false;
private boolean isWaitingForMessage = false;
private boolean shouldStop = false;
dependencies.setAllowStories(!receiveConfig.ignoreStories());
}
- public void setNeedsToRetryFailedMessages(final boolean needsToRetryFailedMessages) {
- this.needsToRetryFailedMessages = needsToRetryFailedMessages;
- }
-
public void setAuthenticationFailureListener(final Callable authenticationFailureListener) {
this.authenticationFailureListener = authenticationFailureListener;
}
public void receiveMessages(
Duration timeout, boolean returnOnTimeout, Integer maxMessages, Manager.ReceiveMessageHandler handler
) throws IOException {
- needsToRetryFailedMessages = true;
+ account.setNeedsToRetryFailedMessages(true);
hasCaughtUpWithOldMessages = false;
// Use a Map here because java Set doesn't have a get method ...
isWaitingForMessage = false;
while (!shouldStop && remainingMessages != 0) {
- if (needsToRetryFailedMessages) {
+ if (account.getNeedsToRetryFailedMessages()) {
retryFailedReceivedMessages(handler);
- needsToRetryFailedMessages = false;
}
SignalServiceEnvelope envelope;
final CachedMessage[] cachedMessage = {null};
}
}
handleQueuedActions(queuedActions);
+ account.setNeedsToRetryFailedMessages(false);
}
private List<HandleAction> retryFailedReceivedMessage(
final var exception = result.second();
if (exception instanceof UntrustedIdentityException) {
- if (System.currentTimeMillis() - envelope.getServerDeliveredTimestamp() > 1000L * 60 * 60 * 24 * 30) {
- // Envelope is more than a month old, cleaning up.
+ if (System.currentTimeMillis() - envelope.getServerDeliveredTimestamp() > 1000L * 60 * 60 * 24 * 14) {
+ // Envelope is more than two weeks old, cleaning up.
cachedMessage.delete();
return null;
}
@Override
public void submitRateLimitRecaptchaChallenge(
- String challenge,
- String captcha
+ String challenge, String captcha
) throws IOException, CaptchaRejectedException {
captcha = captcha == null ? null : captcha.replace("signalcaptcha://", "");
final var recipientId = context.getRecipientHelper().resolveRecipient(recipient);
final var updated = trustMethod.apply(recipientId);
if (updated && this.isReceiving()) {
- context.getReceiveHelper().setNeedsToRetryFailedMessages(true);
+ account.setNeedsToRetryFailedMessages(true);
}
return updated;
}
private final KeyValueEntry<Long> lastReceiveTimestamp = new KeyValueEntry<>("last-receive-timestamp",
long.class,
0L);
+ private final KeyValueEntry<Boolean> needsToRetryFailedMessages = new KeyValueEntry<>("retry-failed-messages",
+ Boolean.class,
+ true);
private final KeyValueEntry<byte[]> cdsiToken = new KeyValueEntry<>("cdsi-token", byte[].class);
private final KeyValueEntry<Long> lastRecipientsRefresh = new KeyValueEntry<>("last-recipients-refresh",
long.class);
this.pniAccountData.setIdentityKeyPair(pniIdentity);
this.registered = false;
this.isMultiDevice = true;
- getKeyValueStore().storeEntry(lastReceiveTimestamp, 0L);
+ setLastReceiveTimestamp(0L);
this.pinMasterKey = masterKey;
getKeyValueStore().storeEntry(storageManifestVersion, -1L);
this.setStorageManifest(null);
this.pniAccountData.setServiceId(pni);
init();
this.registrationLockPin = pin;
- getKeyValueStore().storeEntry(lastReceiveTimestamp, 0L);
+ setLastReceiveTimestamp(0L);
save();
setPreKeys(ServiceIdType.ACI, aciPreKeys);
isMultiDevice = rootNode.get("isMultiDevice").asBoolean();
}
if (rootNode.hasNonNull("lastReceiveTimestamp")) {
- getKeyValueStore().storeEntry(lastReceiveTimestamp, rootNode.get("lastReceiveTimestamp").asLong());
+ setLastReceiveTimestamp(rootNode.get("lastReceiveTimestamp").asLong());
}
int registrationId = 0;
if (rootNode.hasNonNull("registrationId")) {
getKeyValueStore().storeEntry(lastReceiveTimestamp, value);
}
+ public void setNeedsToRetryFailedMessages(final boolean value) {
+ getKeyValueStore().storeEntry(needsToRetryFailedMessages, value);
+ }
+
+ public boolean getNeedsToRetryFailedMessages() {
+ return getKeyValueStore().getEntry(needsToRetryFailedMessages);
+ }
+
public boolean isUnrestrictedUnidentifiedAccess() {
return Boolean.TRUE.equals(getKeyValueStore().getEntry(unrestrictedUnidentifiedAccess));
}