From 3603a6866977600e9cb16f5e94488fde9cfb02a5 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Wed, 23 Jun 2021 13:06:32 +0200 Subject: sync: handle HTTP 304 correctly --- .../src/operations/backup/index.ts | 23 ++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'packages/taler-wallet-core/src/operations/backup/index.ts') diff --git a/packages/taler-wallet-core/src/operations/backup/index.ts b/packages/taler-wallet-core/src/operations/backup/index.ts index 0d3cf5786..d367cf66a 100644 --- a/packages/taler-wallet-core/src/operations/backup/index.ts +++ b/packages/taler-wallet-core/src/operations/backup/index.ts @@ -296,6 +296,21 @@ async function runBackupCycleForProvider( logger.trace(`sync response status: ${resp.status}`); + if (resp.status === HttpResponseStatus.NotModified) { + await ws.db + .mktx((x) => ({ backupProvider: x.backupProviders })) + .runReadWrite(async (tx) => { + const prov = await tx.backupProvider.get(provider.baseUrl); + if (!prov) { + return; + } + delete prov.lastError; + prov.lastBackupCycleTimestamp = getTimestampNow(); + await tx.backupProvider.put(prov); + }); + return; + } + if (resp.status === HttpResponseStatus.PaymentRequired) { logger.trace("payment required for backup"); logger.trace(`headers: ${j2s(resp.headers)}`); @@ -360,7 +375,7 @@ async function runBackupCycleForProvider( return; } prov.lastBackupHash = encodeCrock(currentBackupHash); - prov.lastBackupTimestamp = getTimestampNow(); + prov.lastBackupCycleTimestamp = getTimestampNow(); prov.lastError = undefined; await tx.backupProviders.put(prov); }); @@ -382,7 +397,7 @@ async function runBackupCycleForProvider( return; } prov.lastBackupHash = encodeCrock(hash(backupEnc)); - prov.lastBackupTimestamp = getTimestampNow(); + prov.lastBackupCycleTimestamp = getTimestampNow(); prov.lastError = undefined; await tx.backupProvider.put(prov); }); @@ -684,7 +699,7 @@ export async function getBackupInfo( providers.push({ active: x.active, syncProviderBaseUrl: x.baseUrl, - lastSuccessfulBackupTimestamp: x.lastBackupTimestamp, + lastSuccessfulBackupTimestamp: x.lastBackupCycleTimestamp, paymentProposalIds: x.paymentProposalIds, lastError: x.lastError, paymentStatus: await getProviderPaymentInfo(ws, x), @@ -759,7 +774,7 @@ async function backupRecoveryTheirs( } const providers = await tx.backupProviders.iter().toArray(); for (const prov of providers) { - prov.lastBackupTimestamp = undefined; + prov.lastBackupCycleTimestamp = undefined; prov.lastBackupHash = undefined; await tx.backupProviders.put(prov); } -- cgit v1.2.3