gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] branch master updated: transition when withdrawal op


From: gnunet
Subject: [taler-wallet-core] branch master updated: transition when withdrawal operation updated
Date: Wed, 06 Mar 2024 16:29:40 +0100

This is an automated email from the git hooks/post-receive script.

sebasjm pushed a commit to branch master
in repository wallet-core.

The following commit(s) were added to refs/heads/master by this push:
     new 2e3440933 transition when withdrawal operation updated
2e3440933 is described below

commit 2e344093305ddf72f97e099cba107356970bb1e4
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Wed Mar 6 12:29:33 2024 -0300

    transition when withdrawal operation updated
---
 packages/taler-util/src/notifications.ts           | 12 ++++
 packages/taler-wallet-core/src/pay-merchant.ts     |  6 +-
 packages/taler-wallet-core/src/withdraw.ts         | 18 +++---
 .../src/components/WalletActivity.tsx              | 66 ++++++++++++++++------
 .../src/cta/Withdraw/state.ts                      |  4 +-
 .../src/hooks/useSettings.ts                       |  2 +-
 .../src/wallet/AddBackupProvider/test.ts           |  1 +
 packages/taler-wallet-webextension/src/wxApi.ts    |  4 ++
 .../taler-wallet-webextension/src/wxBackend.ts     |  6 ++
 9 files changed, 86 insertions(+), 33 deletions(-)

diff --git a/packages/taler-util/src/notifications.ts 
b/packages/taler-util/src/notifications.ts
index 023eb8ef4..ab28cc2ee 100644
--- a/packages/taler-util/src/notifications.ts
+++ b/packages/taler-util/src/notifications.ts
@@ -29,6 +29,7 @@ export enum NotificationType {
   BalanceChange = "balance-change",
   BackupOperationError = "backup-error",
   TransactionStateTransition = "transaction-state-transition",
+  WithdrawalOperationTransition = "withdrawal-operation-transition",
   ExchangeStateTransition = "exchange-state-transition",
   TaskObservabilityEvent = "task-observability-event",
   RequestObservabilityEvent = "request-observability-event",
@@ -205,9 +206,20 @@ export interface BackupOperationErrorNotification {
   type: NotificationType.BackupOperationError;
   error: TalerErrorDetail;
 }
+/**
+ * This notification is required to signal UI that 
+ * the withdrawal operation changed the state.
+ * 
+ * https://bugs.gnunet.org/view.php?id=8099
+ */
+export interface WithdrawalOperationTransitionNotification {
+  type: NotificationType.WithdrawalOperationTransition;
+  uri: string;
+}
 
 export type WalletNotification =
   | BalanceChangeNotification
+  | WithdrawalOperationTransitionNotification
   | BackupOperationErrorNotification
   | ExchangeStateTransitionNotification
   | TransactionStateTransitionNotification
diff --git a/packages/taler-wallet-core/src/pay-merchant.ts 
b/packages/taler-wallet-core/src/pay-merchant.ts
index c5af25307..a3623e6d2 100644
--- a/packages/taler-wallet-core/src/pay-merchant.ts
+++ b/packages/taler-wallet-core/src/pay-merchant.ts
@@ -617,8 +617,7 @@ async function processDownloadProposal(
 
   if (proposal.purchaseStatus != PurchaseStatus.PendingDownloadingProposal) {
     logger.error(
-      `unexpected state ${proposal.purchaseStatus}/${
-        PurchaseStatus[proposal.purchaseStatus]
+      `unexpected state 
${proposal.purchaseStatus}/${PurchaseStatus[proposal.purchaseStatus]
       } for ${ctx.transactionId} in processDownloadProposal`,
     );
     return TaskRunResult.finished();
@@ -874,8 +873,7 @@ async function createOrReusePurchase(
     oldProposal.claimToken === claimToken
   ) {
     logger.info(
-      `Found old proposal (status=${
-        PurchaseStatus[oldProposal.purchaseStatus]
+      `Found old proposal (status=${PurchaseStatus[oldProposal.purchaseStatus]
       }) for order ${orderId} at ${merchantBaseUrl}`,
     );
     if (oldProposal.purchaseStatus === PurchaseStatus.DialogShared) {
diff --git a/packages/taler-wallet-core/src/withdraw.ts 
b/packages/taler-wallet-core/src/withdraw.ts
index e3c4e66a2..853a5e0df 100644
--- a/packages/taler-wallet-core/src/withdraw.ts
+++ b/packages/taler-wallet-core/src/withdraw.ts
@@ -1922,22 +1922,20 @@ export async function getWithdrawalDetailsForUri(
       info.apiBaseUrl,
       wex.http,
     );
-    console.log(
-      `waiting operation (${info.operationId}) to change from pending`,
-    );
+
     bankApi
       .getWithdrawalOperationById(info.operationId, {
         old_state: "pending",
         timeoutMs: opts.notifyChangeFromPendingTimeoutMs,
       })
       .then((resp) => {
-        console.log(
-          `operation (${info.operationId}) to change to ${JSON.stringify(
-            resp,
-            undefined,
-            2,
-          )}`,
-        );
+        if (resp.type === "ok" && resp.body.status !== "pending") {
+          wex.ws.notify({
+            type: NotificationType.WithdrawalOperationTransition,
+            uri: talerWithdrawUri,
+          });
+        }
+      }).finally(() => {
         ongoingChecks[talerWithdrawUri] = false;
       });
   }
diff --git 
a/packages/taler-wallet-webextension/src/components/WalletActivity.tsx 
b/packages/taler-wallet-webextension/src/components/WalletActivity.tsx
index 48a562098..316596fb4 100644
--- a/packages/taler-wallet-webextension/src/components/WalletActivity.tsx
+++ b/packages/taler-wallet-webextension/src/components/WalletActivity.tsx
@@ -35,7 +35,7 @@ import { useSettings } from "../hooks/useSettings.js";
 import { Button } from "../mui/Button.js";
 import { Modal } from "./Modal.js";
 import { Time } from "./Time.js";
-import { WalletEvent } from "../wxApi.js";
+import { WalletEvent, WxApiType } from "../wxApi.js";
 
 interface Props extends JSX.HTMLAttributes {
 }
@@ -587,6 +587,27 @@ function getNotificationFor(id: string, event: 
WalletNotification, start: Absolu
         MoreInfo: ShowObservabilityEvent
       })
     }
+    case NotificationType.WithdrawalOperationTransition: {
+      const found = list.find(a => a.reference?.eventType === event.type && 
a.reference.id === event.uri)
+      if (found) {
+        found.end = start;
+        found.events.unshift(eventWithTime)
+        return undefined
+      }
+      return ({
+        id,
+        events: [eventWithTime],
+        reference: {
+          eventType: event.type,
+          referenceType: "task",
+          id: event.uri,
+        },
+        description: `Withdrawal operation updated`,
+        start,
+        end: AbsoluteTime.never(),
+        MoreInfo: ShowObservabilityEvent
+      })
+    }
     case NotificationType.RequestObservabilityEvent: {
       const found = list.find(a => a.reference?.eventType === event.type && 
a.reference.id === event.requestId)
       if (found) {
@@ -614,6 +635,29 @@ function getNotificationFor(id: string, event: 
WalletNotification, start: Absolu
   }
 }
 
+
+function refresh(api: WxApiType, onUpdate: (list: Notif[]) => void) {
+  api.background.call("getNotifications", undefined).then(notif => {
+
+    const list: Notif[] = []
+    for (const n of notif) {
+      if (n.notification.type === NotificationType.RequestObservabilityEvent &&
+        n.notification.operation === "getActiveTasks") {
+        //ignore monitor request
+        continue;
+      }
+      const event = getNotificationFor(String(list.length), n.notification, 
n.when, list)
+      // pepe.
+      if (event) {
+        list.unshift(event)
+      }
+    }
+    onUpdate(list);
+  }).catch(error => {
+    console.log(error)
+  })
+}
+
 export function ObservabilityEventsTable({ }: {}): VNode {
   const { i18n } = useTranslationContext()
   const api = useBackendContext();
@@ -624,20 +668,8 @@ export function ObservabilityEventsTable({ }: {}): VNode {
   useEffect(() => {
     let lastTimeout: ReturnType<typeof setTimeout>;
     function periodicRefresh() {
-      api.background.call("getNotifications", undefined).then(notif => {
-
-        const list: Notif[] = []
-        for (const pepe of notif) {
-          const event = getNotificationFor(String(list.length), 
pepe.notification, pepe.when, list)
-          // pepe.
-          if (event) {
-            list.unshift(event)
-          }
-        }
-        setNotifications(list);
-      }).catch(error => {
-        console.log(error)
-      })
+
+      refresh(api, setNotifications)
 
       lastTimeout = setTimeout(() => {
         periodicRefresh();
@@ -653,7 +685,9 @@ export function ObservabilityEventsTable({ }: {}): VNode {
     <div style={{ display: "flex", justifyContent: "space-between" }}>
 
       <div style={{ padding: 4, margin: 2, border: "solid 1px black" }} 
onClick={() => {
-        setNotifications([])
+        api.background.call("clearNotifications", undefined).then(d => {
+          refresh(api, setNotifications)
+        })
       }}>
         clear
       </div>
diff --git a/packages/taler-wallet-webextension/src/cta/Withdraw/state.ts 
b/packages/taler-wallet-webextension/src/cta/Withdraw/state.ts
index e52b9faec..05aef690e 100644
--- a/packages/taler-wallet-webextension/src/cta/Withdraw/state.ts
+++ b/packages/taler-wallet-webextension/src/cta/Withdraw/state.ts
@@ -243,8 +243,8 @@ export function useComponentStateFromURI({
       return;
     }
     return api.listener.onUpdateNotification(
-      [NotificationType.TransactionStateTransition],
-      () => {
+      [NotificationType.WithdrawalOperationTransition],
+      (asd) => {
         uriInfoHook.retry();
       },
     );
diff --git a/packages/taler-wallet-webextension/src/hooks/useSettings.ts 
b/packages/taler-wallet-webextension/src/hooks/useSettings.ts
index 37d2f13d7..a79a71087 100644
--- a/packages/taler-wallet-webextension/src/hooks/useSettings.ts
+++ b/packages/taler-wallet-webextension/src/hooks/useSettings.ts
@@ -59,6 +59,6 @@ export function useSettings(): [
   function updateField<T extends keyof Settings>(k: T, v: Settings[T]) {
     update({ ...value, [k]: v });
   }
-  console.log("ASDeeeeASD")
+
   return [value, updateField];
 }
diff --git 
a/packages/taler-wallet-webextension/src/wallet/AddBackupProvider/test.ts 
b/packages/taler-wallet-webextension/src/wallet/AddBackupProvider/test.ts
index 66f64d82e..9c68b28cf 100644
--- a/packages/taler-wallet-webextension/src/wallet/AddBackupProvider/test.ts
+++ b/packages/taler-wallet-webextension/src/wallet/AddBackupProvider/test.ts
@@ -45,6 +45,7 @@ describe("AddBackupProvider states", () => {
           expect(state.name.value).eq("");
           expect(state.url.value).eq("");
         },
+        //FIXME: this shouldn't take 2 updates, just
         (state) => {
           expect(state.status).equal("select-provider");
           if (state.status !== "select-provider") return;
diff --git a/packages/taler-wallet-webextension/src/wxApi.ts 
b/packages/taler-wallet-webextension/src/wxApi.ts
index 90522f662..495f015ff 100644
--- a/packages/taler-wallet-webextension/src/wxApi.ts
+++ b/packages/taler-wallet-webextension/src/wxApi.ts
@@ -78,6 +78,10 @@ export interface BackgroundOperations {
     request: void;
     response: WalletEvent[];
   };
+  clearNotifications: {
+    request: void;
+    response: void;
+  };
   setLoggingLevel: {
     request: {
       tag?: string;
diff --git a/packages/taler-wallet-webextension/src/wxBackend.ts 
b/packages/taler-wallet-webextension/src/wxBackend.ts
index c7408ed87..195e05687 100644
--- a/packages/taler-wallet-webextension/src/wxBackend.ts
+++ b/packages/taler-wallet-webextension/src/wxBackend.ts
@@ -100,6 +100,11 @@ async function getNotifications(): Promise<WalletEvent[]> {
   return notifications
 }
 
+async function clearNotifications(): Promise<void> {
+  notifications.splice(0,notifications.length)
+}
+
+
 async function runGarbageCollector(): Promise<void> {
   const dbBeforeGc = currentDatabase;
   if (!dbBeforeGc) {
@@ -139,6 +144,7 @@ const backendHandlers: BackendHandlerType = {
   resetDb,
   runGarbageCollector,
   getNotifications,
+  clearNotifications,
   reinitWallet,
   setLoggingLevel,
 };

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]