From ca86c0a3463a46605d41af27fb62606427c9a217 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20=C3=81valos?= Date: Thu, 20 Jun 2024 18:41:46 -0600 Subject: handle network-required result --- packages/taler-wallet-core/src/common.ts | 10 +++++----- packages/taler-wallet-core/src/shepherd.ts | 9 +++++++++ packages/taler-wallet-core/src/transactions.ts | 7 +++++++ packages/taler-wallet-core/src/wallet.ts | 3 ++- 4 files changed, 23 insertions(+), 6 deletions(-) (limited to 'packages') diff --git a/packages/taler-wallet-core/src/common.ts b/packages/taler-wallet-core/src/common.ts index a6d4a2245..c37d0e21a 100644 --- a/packages/taler-wallet-core/src/common.ts +++ b/packages/taler-wallet-core/src/common.ts @@ -388,7 +388,7 @@ export type TaskRunResult = | TaskRunProgressResult | TaskRunLongpollReturnedPendingResult | TaskRunScheduleLaterResult - | TaskRunNetworkRequired; + | TaskRunNetworkRequiredResult; export namespace TaskRunResult { /** @@ -463,14 +463,14 @@ export interface TaskRunScheduleLaterResult { runAt: AbsoluteTime; } -export interface TaskRunNetworkRequired { - type: TaskRunResultType.NetworkRequired; -} - export interface TaskRunLongpollReturnedPendingResult { type: TaskRunResultType.LongpollReturnedPending; } +export interface TaskRunNetworkRequiredResult { + type: TaskRunResultType.NetworkRequired; +} + export interface TaskRunErrorResult { type: TaskRunResultType.Error; errorDetail: TalerErrorDetail; diff --git a/packages/taler-wallet-core/src/shepherd.ts b/packages/taler-wallet-core/src/shepherd.ts index 2b529fb4b..b7d6475d0 100644 --- a/packages/taler-wallet-core/src/shepherd.ts +++ b/packages/taler-wallet-core/src/shepherd.ts @@ -476,6 +476,15 @@ export class TaskSchedulerImpl implements TaskScheduler { } break; } + case TaskRunResultType.NetworkRequired: { + logger.trace(`Shepherd for ${taskId} got network-required result.`); + const retryRecord = await storePendingTaskPending(this.ws, taskId); + const t = timestampAbsoluteFromDb(retryRecord.retryInfo.nextRetry); + const delay = Duration.getForever(); + logger.trace(`Not retrying task until network is restored.`); + await this.wait(taskId, info, delay); + break; + } default: assertUnreachable(res); } diff --git a/packages/taler-wallet-core/src/transactions.ts b/packages/taler-wallet-core/src/transactions.ts index 7f766f1b0..8268828be 100644 --- a/packages/taler-wallet-core/src/transactions.ts +++ b/packages/taler-wallet-core/src/transactions.ts @@ -1815,6 +1815,13 @@ export async function retryAll(wex: WalletExecutionContext): Promise { } } +/** + * Restart all the running tasks. + */ +export async function restartAll(wex: WalletExecutionContext): Promise { + await wex.taskScheduler.reload(); +} + async function getContextForTransaction( wex: WalletExecutionContext, transactionId: string, diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts index a77f91016..963dfdfe9 100644 --- a/packages/taler-wallet-core/src/wallet.ts +++ b/packages/taler-wallet-core/src/wallet.ts @@ -292,6 +292,7 @@ import { getTransactions, getWithdrawalTransactionByUri, parseTransactionIdentifier, + restartAll, resumeTransaction, retryAll, retryTransaction, @@ -1248,7 +1249,7 @@ async function dispatchRequestInternal( const req = codecForHintNetworkAvailabilityRequest().decode(payload); wex.ws.networkAvailable = req.isNetworkAvailable; if (req.isNetworkAvailable) { - await retryAll(wex); + await restartAll(wex); } else { // We're not doing anything right now, but we could stop showing // certain errors! -- cgit v1.2.3