From 13e21c0e7e503522a823e71ffd8342f98ece4672 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Fri, 23 Feb 2024 22:31:15 +0400 Subject: [PATCH] quick fix for UI being to early on rpc calls --- src/gui/qt-daemon/application/mainwindow.cpp | 12 +++++++++++- src/wallet/wallets_manager.cpp | 2 +- src/wallet/wallets_manager.h | 2 ++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/gui/qt-daemon/application/mainwindow.cpp b/src/gui/qt-daemon/application/mainwindow.cpp index 3afb4e5a..d2cc787c 100644 --- a/src/gui/qt-daemon/application/mainwindow.cpp +++ b/src/gui/qt-daemon/application/mainwindow.cpp @@ -272,13 +272,23 @@ QString MainWindow::request_dummy() QString MainWindow::call_rpc(const QString& params) { TRY_ENTRY(); + + if (!m_backend.is_core_initialized()) + { + epee::json_rpc::error_response rsp; + rsp.jsonrpc = "2.0"; + rsp.error.code = -1; + rsp.error.message = API_RETURN_CODE_CORE_BUSY; + return QString::fromStdString(epee::serialization::store_t_to_json(static_cast(rsp))); + } + 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); currency::core_rpc_server::connection_context dummy_context = AUTO_VAL_INIT(dummy_context); query_info.m_URI = "/json_rpc"; query_info.m_body = params.toStdString(); - + m_backend.get_rpc_server().handle_http_request(query_info, response_info, dummy_context); if (response_info.m_response_code != 200) { diff --git a/src/wallet/wallets_manager.cpp b/src/wallet/wallets_manager.cpp index aeed9669..e0e70588 100644 --- a/src/wallet/wallets_manager.cpp +++ b/src/wallet/wallets_manager.cpp @@ -506,7 +506,6 @@ bool wallets_manager::init_local_daemon() CHECK_AND_ASSERT_AND_SET_GUI(res, "Failed to initialize core"); LOG_PRINT_L0("Core initialized OK"); - //check if offers module synchronized with blockchaine storage auto& bcs = m_ccore.get_blockchain_storage(); if (!m_offers_service.is_disabled() && bcs.get_current_blockchain_size() > 1 && bcs.get_top_block_id() != m_offers_service.get_last_seen_block_id()) @@ -562,6 +561,7 @@ bool wallets_manager::init_local_daemon() CHECK_AND_ASSERT_AND_SET_GUI(res, "Failed to initialize core rpc server."); LOG_PRINT_L0("Core rpc server started ok"); + m_core_initialized = true; LOG_PRINT_L0("Starting p2p net loop..."); //dsi.text_state = "Starting network loop"; m_pview->update_daemon_status(dsi); diff --git a/src/wallet/wallets_manager.h b/src/wallet/wallets_manager.h index 9f940fed..a19e8138 100644 --- a/src/wallet/wallets_manager.h +++ b/src/wallet/wallets_manager.h @@ -173,6 +173,7 @@ public: bool set_use_tor(bool use_tor); std::string add_custom_asset_id(uint64_t wallet_id, const crypto::public_key& asset_id, currency::asset_descriptor_base& asset_descriptor); std::string delete_custom_asset_id(uint64_t wallet_id, const crypto::public_key& asset_id); + bool is_core_initialized() { return m_core_initialized;} private: void main_worker(const po::variables_map& vm); @@ -244,6 +245,7 @@ private: // std::atomic m_last_wallet_synch_height; std::atomic m_wallet_id_counter; std::atomic m_dont_save_wallet_at_stop; + std::atomic m_core_initialized = false; std::string m_data_dir; view::gui_options m_ui_opt;