aboutsummaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2024-06-20 18:41:46 -0600
committerFlorian Dold <florian@dold.me>2024-06-26 16:32:05 +0200
commitca86c0a3463a46605d41af27fb62606427c9a217 (patch)
tree91ce72f7a798f77ff547b331b7bd2555f5cafc1b /packages
parentad98de50f728f4e81fa99c8d184a24336c2bcd2b (diff)
downloadwallet-core-ca86c0a3463a46605d41af27fb62606427c9a217.tar.xz
handle network-required result
Diffstat (limited to 'packages')
-rw-r--r--packages/taler-wallet-core/src/common.ts10
-rw-r--r--packages/taler-wallet-core/src/shepherd.ts9
-rw-r--r--packages/taler-wallet-core/src/transactions.ts7
-rw-r--r--packages/taler-wallet-core/src/wallet.ts3
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!