Merge pull request #6548 from BlueWallet/im

REF: Place network calls in InteractionManager
This commit is contained in:
GLaDOS 2024-05-14 21:24:53 +00:00 committed by GitHub
commit 552fb95776
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -106,61 +106,65 @@ export const BlueStorageProvider = ({ children }: { children: React.ReactNode })
}; };
const refreshAllWalletTransactions = async (lastSnappedTo?: number, showUpdateStatusIndicator: boolean = true) => { const refreshAllWalletTransactions = async (lastSnappedTo?: number, showUpdateStatusIndicator: boolean = true) => {
let noErr = true; InteractionManager.runAfterInteractions(async () => {
try { let noErr = true;
await BlueElectrum.waitTillConnected(); try {
if (showUpdateStatusIndicator) { await BlueElectrum.waitTillConnected();
setWalletTransactionUpdateStatus(WalletTransactionsStatus.ALL); if (showUpdateStatusIndicator) {
setWalletTransactionUpdateStatus(WalletTransactionsStatus.ALL);
}
const paymentCodesStart = Date.now();
await BlueApp.fetchSenderPaymentCodes(lastSnappedTo);
const paymentCodesEnd = Date.now();
console.log('fetch payment codes took', (paymentCodesEnd - paymentCodesStart) / 1000, 'sec');
const balanceStart = +new Date();
await fetchWalletBalances(lastSnappedTo);
const balanceEnd = +new Date();
console.log('fetch balance took', (balanceEnd - balanceStart) / 1000, 'sec');
const start = +new Date();
await fetchWalletTransactions(lastSnappedTo);
const end = +new Date();
console.log('fetch tx took', (end - start) / 1000, 'sec');
} catch (err) {
noErr = false;
console.warn(err);
} finally {
setWalletTransactionUpdateStatus(WalletTransactionsStatus.NONE);
} }
const paymentCodesStart = Date.now(); if (noErr) await saveToDisk(); // caching
await BlueApp.fetchSenderPaymentCodes(lastSnappedTo); });
const paymentCodesEnd = Date.now();
console.log('fetch payment codes took', (paymentCodesEnd - paymentCodesStart) / 1000, 'sec');
const balanceStart = +new Date();
await fetchWalletBalances(lastSnappedTo);
const balanceEnd = +new Date();
console.log('fetch balance took', (balanceEnd - balanceStart) / 1000, 'sec');
const start = +new Date();
await fetchWalletTransactions(lastSnappedTo);
const end = +new Date();
console.log('fetch tx took', (end - start) / 1000, 'sec');
} catch (err) {
noErr = false;
console.warn(err);
} finally {
setWalletTransactionUpdateStatus(WalletTransactionsStatus.NONE);
}
if (noErr) await saveToDisk(); // caching
}; };
const fetchAndSaveWalletTransactions = async (walletID: string) => { const fetchAndSaveWalletTransactions = async (walletID: string) => {
const index = wallets.findIndex(wallet => wallet.getID() === walletID); InteractionManager.runAfterInteractions(async () => {
let noErr = true; const index = wallets.findIndex(wallet => wallet.getID() === walletID);
try { let noErr = true;
// 5sec debounce: try {
if (+new Date() - _lastTimeTriedToRefetchWallet[walletID] < 5000) { // 5sec debounce:
console.log('re-fetch wallet happens too fast; NOP'); if (+new Date() - _lastTimeTriedToRefetchWallet[walletID] < 5000) {
return; console.log('re-fetch wallet happens too fast; NOP');
} return;
_lastTimeTriedToRefetchWallet[walletID] = +new Date(); }
_lastTimeTriedToRefetchWallet[walletID] = +new Date();
await BlueElectrum.waitTillConnected(); await BlueElectrum.waitTillConnected();
setWalletTransactionUpdateStatus(walletID); setWalletTransactionUpdateStatus(walletID);
const balanceStart = +new Date(); const balanceStart = +new Date();
await fetchWalletBalances(index); await fetchWalletBalances(index);
const balanceEnd = +new Date(); const balanceEnd = +new Date();
console.log('fetch balance took', (balanceEnd - balanceStart) / 1000, 'sec'); console.log('fetch balance took', (balanceEnd - balanceStart) / 1000, 'sec');
const start = +new Date(); const start = +new Date();
await fetchWalletTransactions(index); await fetchWalletTransactions(index);
const end = +new Date(); const end = +new Date();
console.log('fetch tx took', (end - start) / 1000, 'sec'); console.log('fetch tx took', (end - start) / 1000, 'sec');
} catch (err) { } catch (err) {
noErr = false; noErr = false;
console.warn(err); console.warn(err);
} finally { } finally {
setWalletTransactionUpdateStatus(WalletTransactionsStatus.NONE); setWalletTransactionUpdateStatus(WalletTransactionsStatus.NONE);
} }
if (noErr) await saveToDisk(); // caching if (noErr) await saveToDisk(); // caching
});
}; };
const addWallet = (wallet: TWallet) => { const addWallet = (wallet: TWallet) => {