Request timeout fix (#1584)

* always handle RequestFailedTimeoutException * undo change that was for testing

Matthew Fosse committed Aug 8, 2024 at 03:27 UTC ba433ef6f30442e2ac69724fdcb4415699f3db8d
1 file changed +44 -25
cw_bitcoin/lib/electrum.dart
+44 -25
@@ -236,25 +236,37 @@ class ElectrumClient {
236 return [];
237 });
238
239 - Future<Map<String, dynamic>> getTransactionRaw({required String hash}) async =>
240 - callWithTimeout(method: 'blockchain.transaction.get', params: [hash, true], timeout: 10000)
241 - .then((dynamic result) {
242 - if (result is Map<String, dynamic>) {
243 - return result;
244 - }
245 -
246 - return <String, dynamic>{};
247 - });
248 -
249 - Future<String> getTransactionHex({required String hash}) async =>
250 - callWithTimeout(method: 'blockchain.transaction.get', params: [hash, false], timeout: 10000)
251 - .then((dynamic result) {
252 - if (result is String) {
253 - return result;
254 - }
239 + Future<Map<String, dynamic>> getTransactionRaw({required String hash}) async {
240 + try {
241 + final result = await callWithTimeout(
242 + method: 'blockchain.transaction.get', params: [hash, true], timeout: 10000);
243 + if (result is Map<String, dynamic>) {
244 + return result;
245 + }
246 + } on RequestFailedTimeoutException catch (_) {
247 + return <String, dynamic>{};
248 + } catch (e) {
249 + print("getTransactionRaw: ${e.toString()}");
250 + return <String, dynamic>{};
251 + }
252 + return <String, dynamic>{};
253 + }
254
256 - return '';
257 - });
255 + Future<String> getTransactionHex({required String hash}) async {
256 + try {
257 + final result = await callWithTimeout(
258 + method: 'blockchain.transaction.get', params: [hash, false], timeout: 10000);
259 + if (result is String) {
260 + return result;
261 + }
262 + } on RequestFailedTimeoutException catch (_) {
263 + return '';
264 + } catch (e) {
265 + print("getTransactionHex: ${e.toString()}");
266 + return '';
267 + }
268 + return '';
269 + }
270
271 Future<String> broadcastTransaction(
272 {required String transactionRaw,
@@ -353,14 +365,21 @@ class ElectrumClient {
365 // "height": 520481,
366 // "hex": "00000020890208a0ae3a3892aa047c5468725846577cfcd9b512b50000000000000000005dc2b02f2d297a9064ee103036c14d678f9afc7e3d9409cf53fd58b82e938e8ecbeca05a2d2103188ce804c4"
367 // }
356 - Future<int?> getCurrentBlockChainTip() =>
357 - callWithTimeout(method: 'blockchain.headers.subscribe').then((result) {
358 - if (result is Map<String, dynamic>) {
359 - return result["height"] as int;
360 - }
368
362 - return null;
363 - });
369 + Future<int?> getCurrentBlockChainTip() async {
370 + try {
371 + final result = await callWithTimeout(method: 'blockchain.headers.subscribe');
372 + if (result is Map<String, dynamic>) {
373 + return result["height"] as int;
374 + }
375 + return null;
376 + } on RequestFailedTimeoutException catch (_) {
377 + return null;
378 + } catch (e) {
379 + print("getCurrentBlockChainTip: ${e.toString()}");
380 + return null;
381 + }
382 + }
383
384 BehaviorSubject<Object>? chainTipSubscribe() {
385 _id += 1;