Cleanly exit on KeepAlive 409.

main
Alex Hart 2022-11-28 12:47:25 -04:00 zatwierdzone przez GitHub
rodzic d7404cf32f
commit 683247bf98
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
4 zmienionych plików z 26 dodań i 3 usunięć

Wyświetl plik

@ -430,6 +430,16 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter
findNavController().safeNavigate(InternalSettingsFragmentDirections.actionInternalSettingsFragmentToDonorErrorConfigurationFragment())
}
)
clickPref(
title = DSLSettingsText.from("Clear keep-alive timestamps"),
onClick = {
SignalStore.donationsValues().subscriptionEndOfPeriodRedemptionStarted = 0L
SignalStore.donationsValues().subscriptionEndOfPeriodConversionStarted = 0L
SignalStore.donationsValues().setLastEndOfPeriod(0L)
Toast.makeText(context, "Cleared", Toast.LENGTH_SHORT)
}
)
}
dividerPref()

Wyświetl plik

@ -20,7 +20,7 @@ class DonateToSignalActivity : FragmentWrapperActivity(), DonationPaymentCompone
override val googlePayResultPublisher: Subject<DonationPaymentComponent.GooglePayResult> = PublishSubject.create()
override fun getFragment(): Fragment {
return NavHostFragment.create(R.navigation.donate_to_signal, DonateToSignalFragmentArgs.Builder(DonateToSignalType.ONE_TIME).build().toBundle())
return NavHostFragment.create(R.navigation.donate_to_signal, DonateToSignalFragmentArgs.Builder(DonateToSignalType.ONE_TIME).build().toBundle())
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

Wyświetl plik

@ -39,6 +39,7 @@ public class DonationReceiptRedemptionJob extends BaseJob {
public static final String SUBSCRIPTION_QUEUE = "ReceiptRedemption";
public static final String KEY = "DonationReceiptRedemptionJob";
public static final String INPUT_RECEIPT_CREDENTIAL_PRESENTATION = "data.receipt.credential.presentation";
public static final String INPUT_KEEP_ALIVE_409 = "data.keep.alive.409";
public static final String DATA_ERROR_SOURCE = "data.error.source";
public static final String DATA_GIFT_MESSAGE_ID = "data.gift.message.id";
public static final String DATA_PRIMARY = "data.primary";
@ -160,6 +161,12 @@ public class DonationReceiptRedemptionJob extends BaseJob {
}
private void doRun() throws Exception {
boolean isKeepAlive409 = getInputData() != null && getInputData().getBooleanOrDefault(INPUT_KEEP_ALIVE_409, false);
if (isKeepAlive409) {
Log.d(TAG, "Keep-Alive redemption job hit a 409. Exiting.", true);
return;
}
ReceiptCredentialPresentation presentation = getPresentation();
if (presentation == null) {
Log.d(TAG, "No presentation available. Exiting.", true);

Wyświetl plik

@ -166,6 +166,7 @@ public class SubscriptionReceiptRequestResponseJob extends BaseJob {
Log.i(TAG, "Subscription is valid, proceeding with request for ReceiptCredentialResponse", true);
long storedEndOfPeriod = SignalStore.donationsValues().getLastEndOfPeriod();
if (storedEndOfPeriod < subscription.getEndOfCurrentPeriod()) {
Log.i(TAG, "Storing lastEndOfPeriod and syncing with linked devices", true);
SignalStore.donationsValues().setLastEndOfPeriod(subscription.getEndOfCurrentPeriod());
MultiDeviceSubscriptionSyncRequestJob.enqueue();
}
@ -264,7 +265,7 @@ public class SubscriptionReceiptRequestResponseJob extends BaseJob {
throw new Exception(response.getApplicationError().get());
case 409:
onAlreadyRedeemed(response);
throw new Exception(response.getApplicationError().get());
break;
default:
Log.w(TAG, "Encountered a server failure response: " + response.getStatus(), response.getApplicationError().get(), true);
throw new RetryableException();
@ -320,12 +321,17 @@ public class SubscriptionReceiptRequestResponseJob extends BaseJob {
}
}
private void onAlreadyRedeemed(ServiceResponse<ReceiptCredentialResponse> response) {
/**
* Handle 409 error code. This is a permanent failure for new subscriptions but an ignorable error for keep-alive messages.
*/
private void onAlreadyRedeemed(ServiceResponse<ReceiptCredentialResponse> response) throws Exception {
if (isForKeepAlive) {
Log.i(TAG, "KeepAlive: Latest paid receipt on subscription already redeemed with a different request credential, ignoring.", response.getApplicationError().get(), true);
setOutputData(new Data.Builder().putBoolean(DonationReceiptRedemptionJob.INPUT_KEEP_ALIVE_409, true).build());
} else {
Log.w(TAG, "Latest paid receipt on subscription already redeemed with a different request credential.", response.getApplicationError().get(), true);
DonationError.routeDonationError(context, DonationError.genericBadgeRedemptionFailure(getErrorSource()));
throw new Exception(response.getApplicationError().get());
}
}