mirror of
https://github.com/BlueWallet/BlueWallet.git
synced 2025-02-23 07:15:35 +01:00
FIX: If timeout is reached, reset wallet status label
This commit is contained in:
parent
cb52737c25
commit
2a6de8536c
3 changed files with 49 additions and 26 deletions
|
@ -128,37 +128,62 @@ export const StorageProvider = ({ children }: { children: React.ReactNode }) =>
|
||||||
|
|
||||||
const refreshAllWalletTransactions = useCallback(
|
const refreshAllWalletTransactions = useCallback(
|
||||||
async (lastSnappedTo?: number, showUpdateStatusIndicator: boolean = true) => {
|
async (lastSnappedTo?: number, showUpdateStatusIndicator: boolean = true) => {
|
||||||
InteractionManager.runAfterInteractions(async () => {
|
const TIMEOUT_DURATION = 30000;
|
||||||
let noErr = true;
|
|
||||||
|
const timeoutPromise = new Promise<never>((_resolve, reject) =>
|
||||||
|
setTimeout(() => {
|
||||||
|
reject(new Error('refreshAllWalletTransactions: Timeout reached'));
|
||||||
|
}, TIMEOUT_DURATION),
|
||||||
|
);
|
||||||
|
|
||||||
|
const mainLogicPromise = new Promise<void>((resolve, reject) => {
|
||||||
try {
|
try {
|
||||||
await BlueElectrum.waitTillConnected();
|
InteractionManager.runAfterInteractions(async () => {
|
||||||
if (showUpdateStatusIndicator) {
|
let noErr = true;
|
||||||
setWalletTransactionUpdateStatus(WalletTransactionsStatus.ALL);
|
try {
|
||||||
}
|
await BlueElectrum.waitTillConnected();
|
||||||
const paymentCodesStart = Date.now();
|
if (showUpdateStatusIndicator) {
|
||||||
await BlueApp.fetchSenderPaymentCodes(lastSnappedTo);
|
setWalletTransactionUpdateStatus(WalletTransactionsStatus.ALL);
|
||||||
const paymentCodesEnd = Date.now();
|
}
|
||||||
console.log('fetch payment codes took', (paymentCodesEnd - paymentCodesStart) / 1000, 'sec');
|
const paymentCodesStart = Date.now();
|
||||||
const balanceStart = +new Date();
|
await BlueApp.fetchSenderPaymentCodes(lastSnappedTo);
|
||||||
await fetchWalletBalances(lastSnappedTo);
|
const paymentCodesEnd = Date.now();
|
||||||
const balanceEnd = +new Date();
|
console.log('fetch payment codes took', (paymentCodesEnd - paymentCodesStart) / 1000, 'sec');
|
||||||
console.log('fetch balance took', (balanceEnd - balanceStart) / 1000, 'sec');
|
const balanceStart = +new Date();
|
||||||
const start = +new Date();
|
await fetchWalletBalances(lastSnappedTo);
|
||||||
await fetchWalletTransactions(lastSnappedTo);
|
const balanceEnd = +new Date();
|
||||||
const end = +new Date();
|
console.log('fetch balance took', (balanceEnd - balanceStart) / 1000, 'sec');
|
||||||
console.log('fetch tx took', (end - start) / 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);
|
||||||
|
reject(err);
|
||||||
|
} finally {
|
||||||
|
setWalletTransactionUpdateStatus(WalletTransactionsStatus.NONE);
|
||||||
|
}
|
||||||
|
if (noErr) await saveToDisk(); // caching
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
noErr = false;
|
reject(err);
|
||||||
console.warn(err);
|
|
||||||
} finally {
|
} finally {
|
||||||
setWalletTransactionUpdateStatus(WalletTransactionsStatus.NONE);
|
setWalletTransactionUpdateStatus(WalletTransactionsStatus.NONE);
|
||||||
}
|
}
|
||||||
if (noErr) await saveToDisk(); // caching
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
await Promise.race([mainLogicPromise, timeoutPromise]);
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error in refreshAllWalletTransactions:', err);
|
||||||
|
} finally {
|
||||||
|
setWalletTransactionUpdateStatus(WalletTransactionsStatus.NONE);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
[fetchWalletBalances, fetchWalletTransactions, saveToDisk],
|
[fetchWalletBalances, fetchWalletTransactions, saveToDisk],
|
||||||
);
|
);
|
||||||
|
|
||||||
const fetchAndSaveWalletTransactions = useCallback(
|
const fetchAndSaveWalletTransactions = useCallback(
|
||||||
async (walletID: string) => {
|
async (walletID: string) => {
|
||||||
InteractionManager.runAfterInteractions(async () => {
|
InteractionManager.runAfterInteractions(async () => {
|
||||||
|
|
|
@ -5,14 +5,13 @@ import loc from '../loc';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
handleDismiss: () => void;
|
handleDismiss: () => void;
|
||||||
disabled?: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const WatchOnlyWarning: React.FC<Props> = ({ handleDismiss, disabled }) => {
|
const WatchOnlyWarning: React.FC<Props> = ({ handleDismiss }) => {
|
||||||
return (
|
return (
|
||||||
<View style={styles.container}>
|
<View style={styles.container}>
|
||||||
<View style={styles.content}>
|
<View style={styles.content}>
|
||||||
<TouchableOpacity style={styles.dismissButton} onPress={handleDismiss} disabled={disabled}>
|
<TouchableOpacity style={styles.dismissButton} onPress={handleDismiss}>
|
||||||
<Icon name="close" color="white" size={20} />
|
<Icon name="close" color="white" size={20} />
|
||||||
</TouchableOpacity>
|
</TouchableOpacity>
|
||||||
<Icon name="warning" color="#FFFF" />
|
<Icon name="warning" color="#FFFF" />
|
||||||
|
|
|
@ -416,7 +416,6 @@ const WalletTransactions: React.FC<WalletTransactionsProps> = ({ route }) => {
|
||||||
<View style={[styles.list, stylesHook.list]}>
|
<View style={[styles.list, stylesHook.list]}>
|
||||||
{wallet?.type === WatchOnlyWallet.type && wallet.isWatchOnlyWarningVisible && (
|
{wallet?.type === WatchOnlyWallet.type && wallet.isWatchOnlyWarningVisible && (
|
||||||
<WatchOnlyWarning
|
<WatchOnlyWarning
|
||||||
disabled={isLoading}
|
|
||||||
handleDismiss={() => {
|
handleDismiss={() => {
|
||||||
wallet.isWatchOnlyWarningVisible = false;
|
wallet.isWatchOnlyWarningVisible = false;
|
||||||
LayoutAnimation.configureNext(LayoutAnimation.Presets.linear);
|
LayoutAnimation.configureNext(LayoutAnimation.Presets.linear);
|
||||||
|
|
Loading…
Add table
Reference in a new issue