commit ad98de50f728f4e81fa99c8d184a24336c2bcd2b
parent cd6e5c9cefb4cdfeb3095e24bbe987a825128a1c
Author: Iván Ávalos <avalos@disroot.org>
Date: Thu, 20 Jun 2024 18:03:44 -0600
add network-required task result and network status to wallet state
Diffstat:
2 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/packages/taler-wallet-core/src/common.ts b/packages/taler-wallet-core/src/common.ts
@@ -378,6 +378,7 @@ export enum TaskRunResultType {
Error = "error",
LongpollReturnedPending = "longpoll-returned-pending",
ScheduleLater = "schedule-later",
+ NetworkRequired = "network-required",
}
export type TaskRunResult =
@@ -386,7 +387,8 @@ export type TaskRunResult =
| TaskRunBackoffResult
| TaskRunProgressResult
| TaskRunLongpollReturnedPendingResult
- | TaskRunScheduleLaterResult;
+ | TaskRunScheduleLaterResult
+ | TaskRunNetworkRequired;
export namespace TaskRunResult {
/**
@@ -433,6 +435,15 @@ export namespace TaskRunResult {
type: TaskRunResultType.LongpollReturnedPending,
};
}
+ /**
+ * Network connection is required to complete the task.
+ * When network is back, the transaction will be retried.
+ */
+ export function networkRequired(): TaskRunResult {
+ return {
+ type: TaskRunResultType.NetworkRequired,
+ };
+ }
}
export interface TaskRunFinishedResult {
@@ -452,6 +463,10 @@ export interface TaskRunScheduleLaterResult {
runAt: AbsoluteTime;
}
+export interface TaskRunNetworkRequired {
+ type: TaskRunResultType.NetworkRequired;
+}
+
export interface TaskRunLongpollReturnedPendingResult {
type: TaskRunResultType.LongpollReturnedPending;
}
diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts
@@ -1246,6 +1246,7 @@ async function dispatchRequestInternal(
}
case WalletApiOperation.HintNetworkAvailability: {
const req = codecForHintNetworkAvailabilityRequest().decode(payload);
+ wex.ws.networkAvailable = req.isNetworkAvailable;
if (req.isNetworkAvailable) {
await retryAll(wex);
} else {
@@ -1995,6 +1996,16 @@ export class InternalWalletState {
return this._dbAccessHandle;
}
+ private _networkAvailable = false;
+
+ get networkAvailable(): boolean {
+ return this._networkAvailable;
+ }
+
+ set networkAvailable(status: boolean) {
+ this._networkAvailable = status;
+ }
+
/**
* Run a long-polling request, potentially queueing the request
* if too many other long-polling requests against the same hostname