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;