@ -372,6 +372,7 @@ WalletImpl::WalletImpl(NetworkType nettype)
, m_trustedDaemon ( false )
, m_wallet2Callback ( nullptr )
, m_recoveringFromSeed ( false )
, m_recoveringFromDevice ( false )
, m_synchronized ( false )
, m_rebuildWalletCache ( false )
, m_is_connected ( false )
@ -419,6 +420,7 @@ bool WalletImpl::create(const std::string &path, const std::string &password, co
clearStatus ( ) ;
m_recoveringFromSeed = false ;
m_recoveringFromDevice = false ;
bool keys_file_exists ;
bool wallet_file_exists ;
tools : : wallet2 : : wallet_exists ( path , keys_file_exists , wallet_file_exists ) ;
@ -621,11 +623,28 @@ bool WalletImpl::recoverFromKeysWithPassword(const std::string &path,
return true ;
}
bool WalletImpl : : recoverFromDevice ( const std : : string & path , const std : : string & password , const std : : string & device_name )
{
clearStatus ( ) ;
m_recoveringFromSeed = false ;
m_recoveringFromDevice = true ;
try
{
m_wallet - > restore ( path , password , device_name ) ;
LOG_PRINT_L1 ( " Generated new wallet from device: " + device_name ) ;
}
catch ( const std : : exception & e ) {
setStatusError ( string ( tr ( " failed to generate new wallet: " ) ) + e . what ( ) ) ;
return false ;
}
return true ;
}
bool WalletImpl : : open ( const std : : string & path , const std : : string & password )
{
clearStatus ( ) ;
m_recoveringFromSeed = false ;
m_recoveringFromDevice = false ;
try {
// TODO: handle "deprecated"
// Check if wallet cache exists
@ -663,6 +682,7 @@ bool WalletImpl::recover(const std::string &path, const std::string &password, c
}
m_recoveringFromSeed = true ;
m_recoveringFromDevice = false ;
crypto : : secret_key recovery_key ;
std : : string old_language ;
if ( ! crypto : : ElectrumWords : : words_to_bytes ( seed , recovery_key , old_language ) ) {
@ -884,6 +904,16 @@ void WalletImpl::setRecoveringFromSeed(bool recoveringFromSeed)
m_recoveringFromSeed = recoveringFromSeed ;
}
void WalletImpl : : setRecoveringFromDevice ( bool recoveringFromDevice )
{
m_recoveringFromDevice = recoveringFromDevice ;
}
void WalletImpl : : setSubaddressLookahead ( uint32_t major , uint32_t minor )
{
m_wallet - > set_subaddress_lookahead ( major , minor ) ;
}
uint64_t WalletImpl : : balance ( uint32_t accountIndex ) const
{
return m_wallet - > balance ( accountIndex ) ;
@ -1996,7 +2026,7 @@ bool WalletImpl::isNewWallet() const
// with the daemon (pull hashes instead of pull blocks).
// If wallet cache is rebuilt, creation height stored in .keys is used.
// Watch only wallet is a copy of an existing wallet.
return ! ( blockChainHeight ( ) > 1 | | m_recoveringFromSeed | | m_re buildWalletCache) & & ! watchOnly ( ) ;
return ! ( blockChainHeight ( ) > 1 | | m_recoveringFromSeed | | m_re coveringFromDevice | | m_re buildWalletCache) & & ! watchOnly ( ) ;
}
bool WalletImpl : : doInit ( const string & daemon_address , uint64_t upper_transaction_size_limit , bool ssl )