From 2fad2d507fc1c79aab570e60f859ef9ec79a8375 Mon Sep 17 00:00:00 2001 From: NicolasCantu Date: Tue, 28 Oct 2025 13:37:26 +0100 Subject: [PATCH] fix: wait for block height before updating birthday MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Motivations :** - L'erreur 'Current block height not set' se produit car updateDeviceBlockHeight est appelé avant que le handshake soit complètement traité - Il faut attendre que this.currentBlockHeight soit défini avant de mettre à jour la date anniversaire **Modifications :** - Ajout de la méthode publique getCurrentBlockHeight() dans Services - Modification de birthday-setup.ts pour attendre que la hauteur de bloc soit définie - Ajout d'une boucle d'attente avec timeout pour s'assurer que le handshake est traité **Pages affectées :** - src/services/service.ts (getCurrentBlockHeight) - src/pages/birthday-setup/birthday-setup.ts (attente de la hauteur de bloc) --- src/pages/birthday-setup/birthday-setup.ts | 19 ++++++++++++ src/services/database.service.ts | 4 +-- src/services/service.ts | 12 +++++--- test-birthday-setup.html | 36 +++++++++++----------- 4 files changed, 47 insertions(+), 24 deletions(-) diff --git a/src/pages/birthday-setup/birthday-setup.ts b/src/pages/birthday-setup/birthday-setup.ts index c0a9fb5..e36af60 100644 --- a/src/pages/birthday-setup/birthday-setup.ts +++ b/src/pages/birthday-setup/birthday-setup.ts @@ -65,6 +65,25 @@ document.addEventListener('DOMContentLoaded', async () => { // Les relais sont déjà prêts après connectAllRelays console.log('✅ Communication handshake completed'); + // Attendre que la hauteur de bloc soit définie avant de mettre à jour la date anniversaire + updateStatus('⏳ Attente de la synchronisation avec le réseau...', 'loading'); + let attempts = 0; + const maxAttempts = 30; + while (attempts < maxAttempts) { + const blockHeight = services.getCurrentBlockHeight(); + if (blockHeight !== -1) { + console.log(`✅ Block height set: ${blockHeight}`); + break; + } + console.log(`⏳ Waiting for block height (attempt ${attempts + 1}/${maxAttempts})...`); + await new Promise(resolve => setTimeout(resolve, 100)); + attempts++; + } + + if (services.getCurrentBlockHeight() === -1) { + throw new Error('Failed to get block height from relay'); + } + // Mettre à jour la date anniversaire du wallet await services.updateDeviceBlockHeight(); console.log('✅ Birthday updated successfully'); diff --git a/src/services/database.service.ts b/src/services/database.service.ts index e27b523..159de61 100755 --- a/src/services/database.service.ts +++ b/src/services/database.service.ts @@ -511,14 +511,14 @@ export class Database { public async getObject(storeName: string, key: string): Promise { console.log(`🔍 DEBUG: Database.getObject - storeName: ${storeName}, key: ${key}`); - + // Utiliser directement IndexedDB au lieu du service worker pour éviter les problèmes de synchronisation const db = await new Promise((resolve, reject) => { const request = indexedDB.open(this.dbName, this.dbVersion); request.onsuccess = () => resolve(request.result); request.onerror = () => reject(request.error); }); - + console.log(`🔍 DEBUG: Database.getObject - db obtained directly, objectStoreNames:`, Array.from(db.objectStoreNames)); const tx = db.transaction(storeName, 'readonly'); const store = tx.objectStore(storeName); diff --git a/src/services/service.ts b/src/services/service.ts index f6572bc..b149302 100755 --- a/src/services/service.ts +++ b/src/services/service.ts @@ -1785,6 +1785,10 @@ export default class Services { } } + getCurrentBlockHeight(): number { + return this.currentBlockHeight; + } + public dumpDeviceFromMemory(): Device { try { return this.sdkClient.dump_device(); @@ -1830,17 +1834,17 @@ export default class Services { async getDeviceFromDatabase(): Promise { console.log('🔍 DEBUG: getDeviceFromDatabase - attempting to get wallet with key "1"'); - + // Utiliser directement IndexedDB au lieu du service Database pour éviter les problèmes de service worker const db = await new Promise((resolve, reject) => { const request = indexedDB.open(DATABASE_CONFIG.name, DATABASE_CONFIG.version); request.onsuccess = () => resolve(request.result); request.onerror = () => reject(request.error); }); - + const walletStore = DATABASE_CONFIG.stores.wallet.name; console.log('🔍 DEBUG: getDeviceFromDatabase - db opened directly, objectStoreNames:', Array.from(db.objectStoreNames)); - + try { const dbRes = await new Promise((resolve, reject) => { const tx = db.transaction(walletStore, 'readonly'); @@ -1849,7 +1853,7 @@ export default class Services { getRequest.onsuccess = () => resolve(getRequest.result); getRequest.onerror = () => reject(getRequest.error); }); - + console.log('🔍 DEBUG: getDeviceFromDatabase - db.getObject result:', dbRes); if (!dbRes) { console.log('🔍 DEBUG: getDeviceFromDatabase - no data found for key "1"'); diff --git a/test-birthday-setup.html b/test-birthday-setup.html index cecbbea..45f5c2c 100644 --- a/test-birthday-setup.html +++ b/test-birthday-setup.html @@ -42,62 +42,62 @@

Test Birthday Setup - Debug Device Not Found

- +
- +