19
super(pairList: supportedPairs(_notSupported));
20
21
bool useTorOnly;
22
- final Map<String, bool> providerStates;
22
+ Map<String, bool> providerStates;
23
24
static const List<String> availableProviders = [
25
'Swapter',
59
static const createTradePath = '/new_trade';
60
static const tradePath = '/trade';
61
static const coinPath = '/coin';
62
+ static const providersListPath = '/exchanges';
63
+
64
65
String _lastUsedRateId;
66
List<dynamic> _provider;
149
final rateId = responseJSON['trade_id'] as String? ?? '';
150
151
var quotes = responseJSON['quotes']['quotes'] as List;
150
- _provider = quotes.map((quote) => quote['provider']).toList();
152
+ _provider = quotes
153
+ .where((quote) => providerStates[quote['provider']] != false)
154
+ .map((quote) => quote['provider'])
155
+ .toList();
156
+
157
+ if (_provider.isEmpty) {
158
+ throw Exception('No enabled providers found for the selected trade.');
159
+ }
160
161
if (rateId.isNotEmpty) _lastUsedRateId = rateId;
162
199
params['id'] = _lastUsedRateId;
200
}
201
193
- String firstAvailableProvider = '';
194
-
195
- for (var provider in _provider) {
196
- if (providerStates.containsKey(provider) && providerStates[provider] == true) {
197
- firstAvailableProvider = provider as String;
198
- break;
199
- }
200
- }
201
-
202
- if (firstAvailableProvider.isEmpty) {
202
+ if (_provider.isEmpty) {
203
throw Exception('No available provider is enabled');
204
}
205
206
- params['provider'] = firstAvailableProvider;
206
+ params['provider'] = _provider.first as String;
207
208
final uri = await _getUri(createTradePath, params);
209
final response = await get(uri, headers: {'API-Key': apiKey});
288
});
289
}
290
291
+ Future<List<TrocadorPartners>> fetchProviders() async {
292
+ final uri = await _getUri(providersListPath, {'api_key': apiKey});
293
+ final response = await get(uri);
294
+
295
+ if (response.statusCode != 200)
296
+ throw Exception('Unexpected http status: ${response.statusCode}');
297
+
298
+ final responseJSON = json.decode(response.body) as Map<String, dynamic>;
299
+
300
+ final providersJsonList = responseJSON['list'] as List<dynamic>;
301
+ final filteredProvidersList = providersJsonList
302
+ .map((providerJson) => TrocadorPartners.fromJson(providerJson as Map<String, dynamic>))
303
+ .where((provider) => provider.rating != 'D')
304
+ .toList();
305
+ filteredProvidersList.sort((a, b) => a.rating.compareTo(b.rating));
306
+ return filteredProvidersList;
307
+ }
308
+
309
String _networkFor(CryptoCurrency currency) {
310
switch (currency) {
311
case CryptoCurrency.eth:
361
}
362
}
363
}
364
+
365
+class TrocadorPartners {
366
+ final String name;
367
+ final String rating;
368
+ final double? insurance;
369
+ final bool? enabledMarkup;
370
+ final double? eta;
371
+
372
+ TrocadorPartners({
373
+ required this.name,
374
+ required this.rating,
375
+ required this.insurance,
376
+ required this.enabledMarkup,
377
+ required this.eta,
378
+ });
379
+
380
+ factory TrocadorPartners.fromJson(Map<String, dynamic> json) {
381
+ return TrocadorPartners(
382
+ name: json['name'] as String? ?? '',
383
+ rating: json['rating'] as String? ?? 'N/A',
384
+ insurance: json['insurance'] as double?,
385
+ enabledMarkup: json['enabledmarkup'] as bool?,
386
+ eta: json['eta'] as double?,
387
+ );
388
+ }
389
+}