diff --git a/apps/desktop/src/gui/application/gui_application.cpp b/apps/desktop/src/gui/application/gui_application.cpp index a3f18e8b..29928ae2 100644 --- a/apps/desktop/src/gui/application/gui_application.cpp +++ b/apps/desktop/src/gui/application/gui_application.cpp @@ -2652,6 +2652,8 @@ void GuiApplication::SyncStreamWindow() { (*ui_->stream)->set_selected_display(props->selected_display_); const auto& net = props->net_traffic_stats_; + (*ui_->stream)->set_stats_encryption_enabled( + status == ConnectionStatus::Connected && net.srtp_active); std::vector stats_rows; stats_rows.reserve(4); const auto append_stats_row = [&](const std::string& label, diff --git a/apps/desktop/src/gui/assets/localization/localization_data.h b/apps/desktop/src/gui/assets/localization/localization_data.h index a269ca59..491508b7 100644 --- a/apps/desktop/src/gui/assets/localization/localization_data.h +++ b/apps/desktop/src/gui/assets/localization/localization_data.h @@ -233,6 +233,9 @@ struct TranslationRow { X(connection_mode, u8"连接模式", "Mode", u8"Режим") \ X(connection_mode_direct, u8"直连", "Direct", u8"Прямой") \ X(connection_mode_relay, u8"中继", "Relay", u8"Релейный") \ + X(transport_encryption, u8"加密传输", "Encryption", u8"Шифрование") \ + X(transport_encryption_enabled, u8"已开启", "Enabled", u8"Включено") \ + X(transport_encryption_disabled, u8"未开启", "Disabled", u8"Выключено") \ X(online, u8"在线", "Online", u8"Онлайн") \ X(offline, u8"离线", "Offline", u8"Офлайн") \ X(device_offline, u8"设备离线", "Device Offline", u8"Устройство офлайн") \ diff --git a/apps/desktop/src/gui/ui/stream_window.slint b/apps/desktop/src/gui/ui/stream_window.slint index 79debe6f..69afb251 100644 --- a/apps/desktop/src/gui/ui/stream_window.slint +++ b/apps/desktop/src/gui/ui/stream_window.slint @@ -45,6 +45,9 @@ export global StreamStrings { in-out property stats-loss-rate: "Loss Rate"; in-out property stats-resolution: "Res"; in-out property stats-connection-mode: "Mode"; + in-out property stats-encryption: "Encryption"; + in-out property stats-encryption-enabled: "Enabled"; + in-out property stats-encryption-disabled: "Disabled"; } struct ControlBarTooltip { @@ -166,6 +169,7 @@ export component StreamWindow inherits Window { in property stats-fps: "0"; in property stats-resolution: ""; in property stats-connection-mode: ""; + in property stats-encryption-enabled: false; in property file-transfer-visible: false; in property <[FileTransferEntry]> file-transfers; @@ -684,7 +688,7 @@ export component StreamWindow inherits Window { x: root.control-dragging ? root.control-drag-x : root.control-docked-left ? 0px : parent.width - self.width; y: min(max(0px, root.control-pos-y), parent.height - self.height); width: root.control-expanded ? min(332px, parent.width) : 20px; - height: root.stats-visible && root.control-expanded ? min(180px, parent.height) : root.control-toolbar-height; + height: root.stats-visible && root.control-expanded ? min(196px, parent.height) : root.control-toolbar-height; background: white; border-width: 1px; border-color: ImGuiLineStyle.border; @@ -803,14 +807,23 @@ export component StreamWindow inherits Window { x: 14px; y: root.control-toolbar-height; width: parent.width - 28px; - height: 128px; + height: 144px; background: transparent; private property row-height: 16px; - private property label-column-width: 60px; + private property label-column-width: + max(60px, stats-label-width-probe.preferred-width + 8px); private property loss-column-width: 66px; private property value-column-width: (self.width - self.label-column-width - self.loss-column-width) / 2; + stats-label-width-probe := Text { + visible: false; + text: StreamStrings.stats-resolution + "\n" + + StreamStrings.stats-connection-mode + "\n" + + StreamStrings.stats-encryption; + font-size: ImGuiFontStyle.small; + } + Rectangle { y: 0px; height: 1px; @@ -898,9 +911,11 @@ export component StreamWindow inherits Window { } for metric[index] in [ - { label: "FPS:", value: root.stats-fps }, - { label: StreamStrings.stats-resolution + ":", value: root.stats-resolution }, - { label: StreamStrings.stats-connection-mode + ":", value: root.stats-connection-mode }, + { label: "FPS", value: root.stats-fps }, + { label: StreamStrings.stats-resolution, value: root.stats-resolution }, + { label: StreamStrings.stats-connection-mode, value: root.stats-connection-mode }, + { label: StreamStrings.stats-encryption, value: root.stats-encryption-enabled + ? StreamStrings.stats-encryption-enabled : StreamStrings.stats-encryption-disabled }, ]: Rectangle { y: (index + 5) * stats-table.row-height; height: stats-table.row-height; @@ -914,7 +929,7 @@ export component StreamWindow inherits Window { } Text { x: stats-table.label-column-width + 4px; - width: stats-table.value-column-width - 8px; + width: parent.width - self.x - 4px; text: metric.value; color: #30343b; font-size: ImGuiFontStyle.small; diff --git a/apps/desktop/src/gui/ui/ui_localization.h b/apps/desktop/src/gui/ui/ui_localization.h index 1ee4a127..8b8deca5 100644 --- a/apps/desktop/src/gui/ui/ui_localization.h +++ b/apps/desktop/src/gui/ui/ui_localization.h @@ -166,6 +166,12 @@ inline int ApplyStreamWindowStrings( strings.set_stats_resolution(Text(localization::resolution[language])); strings.set_stats_connection_mode( Text(localization::connection_mode[language])); + strings.set_stats_encryption( + Text(localization::transport_encryption[language])); + strings.set_stats_encryption_enabled( + Text(localization::transport_encryption_enabled[language])); + strings.set_stats_encryption_disabled( + Text(localization::transport_encryption_disabled[language])); return language; } diff --git a/deps/submodules/minirtc b/deps/submodules/minirtc index 5b0ce343..96b765f8 160000 --- a/deps/submodules/minirtc +++ b/deps/submodules/minirtc @@ -1 +1 @@ -Subproject commit 5b0ce34383f95ae97a01af9e0985c0628b25ad04 +Subproject commit 96b765f81844210679d52e5a8b7d8af40fd4bb11