Do not poll printers when window is not active.

This commit is contained in:
David Kocik 2024-05-20 15:35:35 +02:00
parent 835e6d4805
commit 3e1baf0a61
6 changed files with 22 additions and 5 deletions

View File

@ -272,8 +272,8 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S
//FIXME it seems this method is not called on application start-up, at least not on Windows. Why? //FIXME it seems this method is not called on application start-up, at least not on Windows. Why?
// The same applies to wxEVT_CREATE, it is not being called on startup on Windows. // The same applies to wxEVT_CREATE, it is not being called on startup on Windows.
Bind(wxEVT_ACTIVATE, [this](wxActivateEvent& event) { Bind(wxEVT_ACTIVATE, [this](wxActivateEvent& event) {
if (m_plater != nullptr && event.GetActive()) if (m_plater != nullptr)
m_plater->on_activate(); m_plater->on_activate(event.GetActive());
event.Skip(); event.Skip();
}); });

View File

@ -6300,9 +6300,12 @@ void Plater::force_print_bed_update()
p->config->opt_string("printer_model", true) = "\x01\x00\x01"; p->config->opt_string("printer_model", true) = "\x01\x00\x01";
} }
void Plater::on_activate() void Plater::on_activate(bool active)
{ {
this->p->user_account->on_activate_window(active);
if (active) {
this->p->show_delayed_error_message(); this->p->show_delayed_error_message();
}
} }
// Get vector of extruder colors considering filament color, if extruder color is undefined. // Get vector of extruder colors considering filament color, if extruder color is undefined.

View File

@ -253,7 +253,7 @@ public:
void force_filament_cb_update(); void force_filament_cb_update();
void force_print_bed_update(); void force_print_bed_update();
// On activating the parent window. // On activating the parent window.
void on_activate(); void on_activate(bool active);
std::vector<std::string> get_extruder_colors_from_plater_config(const GCodeProcessorResult* const result = nullptr) const; std::vector<std::string> get_extruder_colors_from_plater_config(const GCodeProcessorResult* const result = nullptr) const;
std::vector<std::string> get_colors_for_color_print(const GCodeProcessorResult* const result = nullptr) const; std::vector<std::string> get_colors_for_color_print(const GCodeProcessorResult* const result = nullptr) const;

View File

@ -58,6 +58,8 @@ public:
bool on_connect_printers_success(const std::string& data, AppConfig* app_config, bool& out_printers_changed); bool on_connect_printers_success(const std::string& data, AppConfig* app_config, bool& out_printers_changed);
bool on_connect_uiid_map_success(const std::string& data, AppConfig* app_config, bool& out_printers_changed); bool on_connect_uiid_map_success(const std::string& data, AppConfig* app_config, bool& out_printers_changed);
void on_activate_window(bool active) { m_communication->on_activate_window(active); }
std::string get_username() const { return m_username; } std::string get_username() const { return m_username; }
std::string get_access_token(); std::string get_access_token();
std::string get_shared_session_key(); std::string get_shared_session_key();

View File

@ -360,6 +360,10 @@ void UserAccountCommunication::init_session_thread()
if (m_thread_stop) if (m_thread_stop)
// Stop the worker thread. // Stop the worker thread.
break; break;
// Do not process_action_queue if window is not active and thread was not forced to wakeup
if (!m_window_is_active && !m_thread_wakeup) {
continue;
}
m_thread_wakeup = false; m_thread_wakeup = false;
{ {
std::lock_guard<std::mutex> lock(m_session_mutex); std::lock_guard<std::mutex> lock(m_session_mutex);
@ -369,6 +373,12 @@ void UserAccountCommunication::init_session_thread()
}); });
} }
void UserAccountCommunication::on_activate_window(bool active)
{
std::lock_guard<std::mutex> lck(m_thread_stop_mutex);
m_window_is_active = active;
}
void UserAccountCommunication::wakeup_session_thread() void UserAccountCommunication::wakeup_session_thread()
{ {
{ {

View File

@ -51,6 +51,7 @@ public:
// Exchanges code for tokens and shared_session_key // Exchanges code for tokens and shared_session_key
void on_login_code_recieved(const std::string& url_message); void on_login_code_recieved(const std::string& url_message);
void on_activate_window(bool active);
void set_username(const std::string& username); void set_username(const std::string& username);
void set_remember_session(bool b); void set_remember_session(bool b);
@ -71,6 +72,7 @@ private:
std::condition_variable m_thread_stop_condition; std::condition_variable m_thread_stop_condition;
bool m_thread_stop { false }; bool m_thread_stop { false };
bool m_thread_wakeup{ false }; bool m_thread_wakeup{ false };
bool m_window_is_active{ true };
std::string m_code_verifier; std::string m_code_verifier;
wxEvtHandler* m_evt_handler; wxEvtHandler* m_evt_handler;
AppConfig* m_app_config; AppConfig* m_app_config;