mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-12-31 16:09:49 +00:00
several attempts to close wallet
This commit is contained in:
parent
54a522ac0b
commit
9f93cb3f92
3 changed files with 18 additions and 19 deletions
|
@ -304,9 +304,9 @@ extern "C"
|
|||
return plain_wallet::is_wallet_exist(path);
|
||||
}
|
||||
|
||||
void close_wallet(uint64_t hwallet)
|
||||
char *close_wallet(uint64_t hwallet)
|
||||
{
|
||||
plain_wallet::close_wallet(hwallet);
|
||||
return strdup(plain_wallet::close_wallet(hwallet).c_str());
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -22,8 +22,9 @@ typedef _is_wallet_exist = Int8 Function(Pointer<Utf8>);
|
|||
typedef _IsWalletExist = int Function(Pointer<Utf8>);
|
||||
|
||||
// void close_wallet(uint64_t hwallet)
|
||||
typedef _close_wallet = Void Function(Int64);
|
||||
typedef _closeWallet = void Function(int hWallet);
|
||||
// char *close_wallet(uint64_t hwallet)
|
||||
typedef _close_wallet = Pointer<Utf8> Function(Int64);
|
||||
typedef _closeWallet = Pointer<Utf8> Function(int hWallet);
|
||||
|
||||
// uint64_t get_current_tx_fee(uint64_t priority)
|
||||
typedef _get_current_tx_fee = Int64 Function(Int64);
|
||||
|
@ -166,7 +167,7 @@ class ApiCalls {
|
|||
|
||||
static final _closeWalletNative = zanoApi.lookup<NativeFunction<_close_wallet>>('close_wallet').asFunction<_closeWallet>();
|
||||
|
||||
static void closeWallet({required int hWallet}) => _closeWalletNative(hWallet);
|
||||
static String closeWallet({required int hWallet}) => _performApiCall(() => _closeWalletNative(hWallet));
|
||||
|
||||
static final _getWalletInfoNative = zanoApi.lookup<NativeFunction<_stringFunctionWithInt64>>('get_wallet_info').asFunction<_StringFunctionWithIntHWallet>();
|
||||
|
||||
|
|
|
@ -24,16 +24,14 @@ import 'package:path_provider/path_provider.dart';
|
|||
|
||||
import 'api/model/store_result.dart';
|
||||
|
||||
//enum _LogType { none, simple, json }
|
||||
|
||||
mixin ZanoWalletApi {
|
||||
static const _defaultNodeUri = '195.201.107.230:33336';
|
||||
static const _statusDelivered = 'delivered';
|
||||
static const _maxAttempts = 10;
|
||||
//static const _logType = _LogType.json;
|
||||
static const _logInfo = true;
|
||||
static const _logError = true;
|
||||
static const _logJson = true;
|
||||
static const _logJson = false;
|
||||
static const int _zanoMixinValue = 10;
|
||||
|
||||
int _hWallet = 0;
|
||||
|
@ -48,9 +46,10 @@ mixin ZanoWalletApi {
|
|||
|
||||
void setPassword(String password) => ApiCalls.setPassword(hWallet: hWallet, password: password);
|
||||
|
||||
void closeWallet() {
|
||||
_info('close_wallet $hWallet');
|
||||
ApiCalls.closeWallet(hWallet: hWallet);
|
||||
void closeWallet([int? walletToClose]) {
|
||||
_info('close_wallet ${walletToClose ?? hWallet}');
|
||||
final result = ApiCalls.closeWallet(hWallet: walletToClose ?? hWallet);
|
||||
_info('close_wallet result $result');
|
||||
}
|
||||
|
||||
Future<bool> setupNode() async {
|
||||
|
@ -301,7 +300,7 @@ mixin ZanoWalletApi {
|
|||
return result;
|
||||
}
|
||||
|
||||
Future<CreateWalletResult> loadWallet(String path, String password, [bool secondAttempt = false]) async {
|
||||
Future<CreateWalletResult> loadWallet(String path, String password, [int attempt = 0]) async {
|
||||
_info('load_wallet path $path password ${_shorten(password)}');
|
||||
await _writeLog('load_wallet', 'load_wallet path $path password ${_shorten(password)}');
|
||||
final json = ApiCalls.loadWallet(path: path, password: password);
|
||||
|
@ -311,13 +310,12 @@ mixin ZanoWalletApi {
|
|||
if (map?['error'] != null) {
|
||||
final code = map?['error']!['code'] ?? '';
|
||||
final message = map?['error']!['message'] ?? '';
|
||||
if (code == Consts.errorAlreadyExists && !secondAttempt) {
|
||||
// TODO: that's not the best solution!
|
||||
// already connected to this wallet. closing and attempting to reopen
|
||||
debugPrint('already connected. closing and reopen wallet');
|
||||
closeWallet();
|
||||
await Future.delayed(const Duration(milliseconds: 2000));
|
||||
return await loadWallet(path, password, true);
|
||||
if (code == Consts.errorAlreadyExists && attempt < 5) {
|
||||
// already connected to this wallet. closing and trying to reopen
|
||||
_info('already connected. closing and reopen wallet (attempt $attempt)');
|
||||
closeWallet(attempt);
|
||||
await Future.delayed(const Duration(milliseconds: 500));
|
||||
return await loadWallet(path, password, attempt + 1);
|
||||
}
|
||||
throw ZanoWalletException('Error loading wallet, $message ($code)');
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue