diff --git a/src/gui/qt-daemon/application/view_iface.h b/src/gui/qt-daemon/application/view_iface.h index 52591e8e..2b814adc 100644 --- a/src/gui/qt-daemon/application/view_iface.h +++ b/src/gui/qt-daemon/application/view_iface.h @@ -6,9 +6,9 @@ #pragma once -#include -#include -#ifndef Q_MOC_RUN +// #include +// #include +// #ifndef Q_MOC_RUN #include "warnings.h" PUSH_VS_WARNINGS @@ -22,7 +22,7 @@ DISABLE_VS_WARNINGS(4503) #include "currency_core/basic_api_response_codes.h" POP_VS_WARNINGS -#endif +//#endif namespace view { diff --git a/src/wallet/plain_wallet_api_defs.h b/src/wallet/plain_wallet_api_defs.h index afe733dc..1ad93c56 100644 --- a/src/wallet/plain_wallet_api_defs.h +++ b/src/wallet/plain_wallet_api_defs.h @@ -24,9 +24,27 @@ namespace plain_wallet view::transfers_array recent_history; view::wallet_info wi; BEGIN_KV_SERIALIZE_MAP() - KV_SERIALIZE(wallet_id) KV_SERIALIZE(recent_history) KV_SERIALIZE(wi) END_KV_SERIALIZE_MAP() - } + }; + + struct sync_status_response + { + bool finished; + uint64_t progress; + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE(finished) + KV_SERIALIZE(progress) + END_KV_SERIALIZE_MAP() + }; + + struct basic_status_response + { + std::string status; + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE(status) + END_KV_SERIALIZE_MAP() + }; + } // namespace tools diff --git a/src/wallet/plain_wallet_api_impl.cpp b/src/wallet/plain_wallet_api_impl.cpp index 5b4b83b9..5476efc9 100644 --- a/src/wallet/plain_wallet_api_impl.cpp +++ b/src/wallet/plain_wallet_api_impl.cpp @@ -3,6 +3,7 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "plain_wallet_api_impl.h" +#include "wallet/wallet_helpers.h" namespace plain_wallet { @@ -95,32 +96,71 @@ namespace plain_wallet return epee::serialization::store_t_to_json(ok_response); } - bool plain_wallet_api_impl::start_sync_thread() + std::string plain_wallet_api_impl::start_sync_thread() { m_sync_thread = std::thread([&]() { - m_wallet->refresh(m_stop); + + try + { + m_wallet->refresh(m_stop); + } + catch (const std::exception& e) + { + LOG_ERROR("Wallet refresh failed: " << e.what()); + return; + } + m_sync_finished = true; }); + basic_status_response bsr = AUTO_VAL_INIT(bsr); + bsr.status = API_RETURN_CODE_OK; + return epee::serialization::store_t_to_json(bsr); } - bool plain_wallet_api_impl::cancel_sync_thread() + std::string plain_wallet_api_impl::cancel_sync_thread() { m_stop = true; + if (m_sync_thread.joinable()) + m_sync_thread.join(); + basic_status_response bsr = AUTO_VAL_INIT(bsr); + bsr.status = API_RETURN_CODE_OK; + return epee::serialization::store_t_to_json(bsr); + } std::string plain_wallet_api_impl::get_sync_status() { - m_wallet->get_sync_progress(); + sync_status_response ssr = AUTO_VAL_INIT(ssr); + ssr.finished = m_sync_finished; + ssr.progress = m_wallet->get_sync_progress(); + return epee::serialization::store_t_to_json(ssr); } std::string plain_wallet_api_impl::sync() { - m_wallet->refresh(m_stop); + basic_status_response bsr = AUTO_VAL_INIT(bsr); + try + { + m_wallet->refresh(m_stop); + } + catch (const std::exception& e) + { + LOG_ERROR("Wallet refresh failed: " << e.what()); + bsr.status = API_RETURN_CODE_FAIL; + return epee::serialization::store_t_to_json(bsr); + } + bsr.status = API_RETURN_CODE_OK; + return epee::serialization::store_t_to_json(bsr); } std::string plain_wallet_api_impl::invoke(const std::string& params) { - m_rpc_wrapper->handle_http_request_map() + epee::net_utils::http::http_request_info query_info = AUTO_VAL_INIT(query_info); + epee::net_utils::http::http_response_info response_info = AUTO_VAL_INIT(response_info); + epee::net_utils::connection_context_base stub_conn_context = AUTO_VAL_INIT(stub_conn_context); + std::string reference_stub; + bool call_found = false; + query_info.m_body = params; + m_rpc_wrapper->handle_http_request_map(query_info, response_info, stub_conn_context, call_found, reference_stub); + return response_info.m_body; } - - } \ No newline at end of file diff --git a/src/wallet/plain_wallet_api_impl.h b/src/wallet/plain_wallet_api_impl.h index ff1f5473..dba03a77 100644 --- a/src/wallet/plain_wallet_api_impl.h +++ b/src/wallet/plain_wallet_api_impl.h @@ -16,12 +16,13 @@ namespace plain_wallet { public: plain_wallet_api_impl(const std::string ip, const std::string port); + ~plain_wallet_api_impl(); std::string open(const std::string& path, const std::string password); std::string restore(const std::string& seed, const std::string& path, const std::string password); std::string generate(const std::string& path, const std::string password); - bool start_sync_thread(); - bool cancel_sync_thread(); + std::string start_sync_thread(); + std::string cancel_sync_thread(); std::string get_sync_status(); std::string sync(); diff --git a/src/wallet/wallet_helpers.h b/src/wallet/wallet_helpers.h index 22fc59c7..e3a5ccb3 100644 --- a/src/wallet/wallet_helpers.h +++ b/src/wallet/wallet_helpers.h @@ -15,7 +15,7 @@ namespace tools { wi = AUTO_VAL_INIT_T(view::wallet_info); wi.address = w.get_account().get_public_address_str(); - wi.tracking_hey = string_tools::pod_to_hex(w.get_account().get_keys().m_view_secret_key); + wi.tracking_hey = epee::string_tools::pod_to_hex(w.get_account().get_keys().m_view_secret_key); uint64_t fake = 0; wi.balance = w.balance(wi.unlocked_balance, fake, fake, wi.mined_total); wi.path = epee::string_encoding::wstring_to_utf8(w.get_wallet_path());