diff options
author | Iván Ávalos <avalos@disroot.org> | 2024-06-20 18:41:46 -0600 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2024-06-26 16:32:05 +0200 |
commit | ca86c0a3463a46605d41af27fb62606427c9a217 (patch) | |
tree | 91ce72f7a798f77ff547b331b7bd2555f5cafc1b /packages | |
parent | ad98de50f728f4e81fa99c8d184a24336c2bcd2b (diff) | |
download | wallet-core-ca86c0a3463a46605d41af27fb62606427c9a217.tar.xz |
handle network-required result
Diffstat (limited to 'packages')
-rw-r--r-- | packages/taler-wallet-core/src/common.ts | 10 | ||||
-rw-r--r-- | packages/taler-wallet-core/src/shepherd.ts | 9 | ||||
-rw-r--r-- | packages/taler-wallet-core/src/transactions.ts | 7 | ||||
-rw-r--r-- | packages/taler-wallet-core/src/wallet.ts | 3 |
4 files changed, 23 insertions, 6 deletions
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<void> { } } +/** + * Restart all the running tasks. + */ +export async function restartAll(wex: WalletExecutionContext): Promise<void> { + 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! |