From 178d958c0886d41f85d8195f09ba0fefeb568a1d Mon Sep 17 00:00:00 2001 From: kunkundi Date: Mon, 1 Jun 2026 00:31:45 +0800 Subject: [PATCH] [fix] show self-hosted TLS certificate errors in status bar --- .../assets/localization/localization_data.h | 3 +++ src/gui/render_callback.cpp | 4 +++ src/gui/toolbars/status_bar.cpp | 25 +++++++++++++------ 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/gui/assets/localization/localization_data.h b/src/gui/assets/localization/localization_data.h index b78bc65..04fce4b 100644 --- a/src/gui/assets/localization/localization_data.h +++ b/src/gui/assets/localization/localization_data.h @@ -158,6 +158,9 @@ struct TranslationRow { X(signal_connected, u8"已连接服务器", "Connected", u8"Подключено к серверу") \ X(signal_disconnected, u8"未连接服务器", "Disconnected", \ u8"Нет подключения к серверу") \ + X(signal_tls_cert_error, u8"证书验证失败,请重新安装自托管根证书", \ + "Certificate verification failed. Reinstall the self-hosted root certificate.", \ + u8"Ошибка проверки сертификата. Переустановите корневой сертификат.") \ X(p2p_connected, u8"对等连接已建立", "P2P Connected", u8"P2P подключено") \ X(p2p_disconnected, u8"对等连接已断开", "P2P Disconnected", \ u8"P2P отключено") \ diff --git a/src/gui/render_callback.cpp b/src/gui/render_callback.cpp index 202e533..faf1dc7 100644 --- a/src/gui/render_callback.cpp +++ b/src/gui/render_callback.cpp @@ -1231,6 +1231,8 @@ void Render::OnSignalStatusCb(SignalStatus status, const char* user_id, render->signal_connected_ = false; } else if (SignalStatus::SignalServerClosed == status) { render->signal_connected_ = false; + } else if (SignalStatus::SignalTlsCertError == status) { + render->signal_connected_ = false; } } else { if (client_id.rfind("C-", 0) != 0) { @@ -1258,6 +1260,8 @@ void Render::OnSignalStatusCb(SignalStatus status, const char* user_id, props->signal_connected_ = false; } else if (SignalStatus::SignalServerClosed == status) { props->signal_connected_ = false; + } else if (SignalStatus::SignalTlsCertError == status) { + props->signal_connected_ = false; } } } diff --git a/src/gui/toolbars/status_bar.cpp b/src/gui/toolbars/status_bar.cpp index 624abd3..280ebe6 100644 --- a/src/gui/toolbars/status_bar.cpp +++ b/src/gui/toolbars/status_bar.cpp @@ -26,20 +26,31 @@ int Render::StatusBar() { ImDrawList* draw_list = ImGui::GetWindowDrawList(); draw_list->AddCircleFilled(dot_pos, status_bar_height * 0.25f, ImColor(1.0f, 1.0f, 1.0f), 100); + bool tls_cert_error = + signal_status_ == SignalStatus::SignalTlsCertError; draw_list->AddCircleFilled(dot_pos, status_bar_height * 0.2f, - ImColor(signal_connected_ ? 0.0f : 1.0f, - signal_connected_ ? 1.0f : 0.0f, 0.0f), + tls_cert_error + ? ImColor(1.0f, 0.65f, 0.0f) + : ImColor(signal_connected_ ? 0.0f : 1.0f, + signal_connected_ ? 1.0f : 0.0f, + 0.0f), 100); ImGui::SetWindowFontScale(0.6f); + const char* signal_status_text = + tls_cert_error + ? localization::signal_tls_cert_error[localization_language_index_] + .c_str() + : (signal_connected_ + ? localization::signal_connected[localization_language_index_] + .c_str() + : localization::signal_disconnected + [localization_language_index_] + .c_str()); draw_list->AddText( ImVec2(status_bar_width * 0.045f, io.DisplaySize.y * (1 - STATUS_BAR_HEIGHT * 0.9f)), - ImColor(0.0f, 0.0f, 0.0f), - signal_connected_ - ? localization::signal_connected[localization_language_index_].c_str() - : localization::signal_disconnected[localization_language_index_] - .c_str()); + ImColor(0.0f, 0.0f, 0.0f), signal_status_text); ImGui::SetWindowFontScale(1.0f); ImGui::EndChild();