Merge remote-tracking branch 'upstream/master' into sort-favorites

This commit is contained in:
NicKoehler 2023-03-07 19:50:29 +01:00
commit d40aed6ac2
No known key found for this signature in database
GPG Key ID: BAE01394EB51AC58
50 changed files with 152 additions and 90 deletions

View File

@ -37,9 +37,9 @@ Below are the servers you are using for free, they may change over time. If you
| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM |
| Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM |
| Germany | Codext | 4 vCPU / 8GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM |
| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | Finland (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| Ukraine (Kyiv) | dc.volia (2VM) | 2 vCPU / 4GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
## Dev Container ## Dev Container

View File

@ -27,8 +27,9 @@ Malsupre estas la serviloj, kiuj vi uzas senpage, ĝi povas ŝanĝi laŭlonge de
| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM |
| Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM |
| Germany | Codext | 4 vCPU / 8GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM |
| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | Finland (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
## Dependantaĵoj ## Dependantaĵoj

View File

@ -34,8 +34,9 @@ A continuación se muestran los servidores gratuitos, pueden cambiar a medida qu
| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM |
| Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM |
| Germany | Codext | 4 vCPU / 8GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM |
| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | Finland (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
## Dependencias ## Dependencias

View File

@ -27,8 +27,9 @@ Alla on palvelimia, joita voit käyttää ilmaiseksi, ne saattavat muuttua ajan
| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM |
| Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM |
| Germany | Codext | 4 vCPU / 8GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM |
| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | Finland (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
## Riippuvuudet ## Riippuvuudet

View File

@ -35,8 +35,9 @@ Ezalatt az üzenet alatt találhatóak azok a publikus szerverek, amelyeket ingy
| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM |
| Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM |
| Germany | Codext | 4 vCPU / 8GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM |
| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | Finland (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
## Dependencies ## Dependencies

View File

@ -27,8 +27,9 @@ Di bawah ini adalah server yang bisa Anda gunakan secara gratis, dapat berubah s
| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM |
| Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM |
| Germany | Codext | 4 vCPU / 8GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM |
| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | Finland (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
## Dependencies ## Dependencies

View File

@ -27,8 +27,9 @@ Qui sotto trovate i server che possono essere usati gratuitamente, la lista potr
| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM |
| Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM |
| Germany | Codext | 4 vCPU / 8GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM |
| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | Finland (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
## Dipendenze ## Dipendenze

View File

@ -27,8 +27,9 @@ Onderstaande servers zijn de servers die je gratis kunt gebruiken, ze kunnen op
| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM |
| Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM |
| Germany | Codext | 4 vCPU / 8GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM |
| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | Finland (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
## Afhankelijkheden ## Afhankelijkheden

View File

@ -27,8 +27,9 @@ Poniżej znajdują się serwery, z których można korzystać za darmo, może si
| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM |
| Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM |
| Germany | Codext | 4 vCPU / 8GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM |
| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | Finland (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
## Zależności ## Zależności

View File

@ -35,8 +35,9 @@ RustDesk вітає внесок кожного. Дивіться [`docs/CONTRIB
| Даллас | Vultr | 1 vCPU / 1GB RAM | Даллас | Vultr | 1 vCPU / 1GB RAM
Німеччина | Hetzner | 2 vCPU / 4GB RAM | 2 VCPU / 4GB RAM | Німеччина | Hetzner | 2 VCPU / 4GB RAM | Німеччина | Hetzner | 2 vCPU / 4GB RAM | 2 VCPU / 4GB RAM | Німеччина | Hetzner | 2 VCPU / 4GB RAM |
| Germany | Codext | 4 vCPU / 8GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM |
| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | Finland (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | | USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM |
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
## Залежності ## Залежності

View File

@ -73,7 +73,7 @@ class ChatPage extends StatelessWidget implements PageShape {
? InputDecoration( ? InputDecoration(
isDense: true, isDense: true,
hintText: hintText:
"${translate('Write a message')}...", "${translate('Write a message')}",
filled: true, filled: true,
fillColor: fillColor:
Theme.of(context).colorScheme.background, Theme.of(context).colorScheme.background,
@ -88,7 +88,7 @@ class ChatPage extends StatelessWidget implements PageShape {
) )
: defaultInputDecoration( : defaultInputDecoration(
hintText: hintText:
"${translate('Write a message')}...", "${translate('Write a message')}",
fillColor: fillColor:
Theme.of(context).colorScheme.background), Theme.of(context).colorScheme.background),
sendButtonBuilder: defaultSendButton( sendButtonBuilder: defaultSendButton(

View File

@ -890,13 +890,10 @@ class DiscoveredPeerCard extends BasePeerCard {
menuItems.add(_createShortCutAction(peer.id)); menuItems.add(_createShortCutAction(peer.id));
} }
final inRecent = await bind.mainIsInRecentPeers(id: peer.id); if (!favs.contains(peer.id)) {
if (inRecent) { menuItems.add(_addFavAction(peer.id));
if (!favs.contains(peer.id)) { } else {
menuItems.add(_addFavAction(peer.id)); menuItems.add(_rmFavAction(peer.id, () async {}));
} else {
menuItems.add(_rmFavAction(peer.id, () async {}));
}
} }
if (gFFI.userModel.userName.isNotEmpty) { if (gFFI.userModel.userName.isNotEmpty) {

View File

@ -509,7 +509,10 @@ class _MonitorMenu extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (stateGlobal.displaysCount.value < 2) return Offstage(); if (PrivacyModeState.find(id).isTrue ||
stateGlobal.displaysCount.value < 2) {
return Offstage();
}
return _IconSubmenuButton( return _IconSubmenuButton(
icon: icon(), icon: icon(),
ffi: ffi, ffi: ffi,
@ -1546,6 +1549,16 @@ class _DisplayMenuState extends State<_DisplayMenu> {
value: rxValue.value, value: rxValue.value,
onChanged: (value) { onChanged: (value) {
if (value == null) return; if (value == null) return;
if (widget.ffi.ffiModel.pi.currentDisplay != 0) {
msgBox(
widget.id,
'custom-nook-nocancel-hasclose',
'info',
'Please switch to Display 1 first',
'',
widget.ffi.dialogManager);
return;
}
bind.sessionToggleOption(id: widget.id, value: option); bind.sessionToggleOption(id: widget.id, value: option);
}, },
ffi: widget.ffi, ffi: widget.ffi,

View File

@ -456,7 +456,8 @@ class ServerModel with ChangeNotifier {
Future.delayed(Duration.zero, () async { Future.delayed(Duration.zero, () async {
if (!hideCm) window_on_top(null); if (!hideCm) window_on_top(null);
}); });
if (client.authorized) { // Only do the hidden task when on Desktop.
if (client.authorized && isDesktop) {
cmHiddenTimer = Timer(const Duration(seconds: 3), () { cmHiddenTimer = Timer(const Duration(seconds: 3), () {
if (!hideCm) windowManager.minimize(); if (!hideCm) windowManager.minimize();
cmHiddenTimer = null; cmHiddenTimer = null;

View File

@ -127,15 +127,6 @@ impl MagInterface {
}; };
s.init_succeeded = false; s.init_succeeded = false;
unsafe { unsafe {
if GetSystemMetrics(SM_CMONITORS) != 1 {
// Do not try to use the magnifier in multi-screen setup (where the API
// crashes sometimes).
return Err(Error::new(
ErrorKind::Other,
"Magnifier capturer cannot work on multi-screen system.",
));
}
// load lib // load lib
let lib_file_name = "Magnification.dll"; let lib_file_name = "Magnification.dll";
let lib_file_name_c = CString::new(lib_file_name).unwrap(); let lib_file_name_c = CString::new(lib_file_name).unwrap();

View File

@ -11,6 +11,7 @@
<message>Authentication is required to change RustDesk options</message> <message>Authentication is required to change RustDesk options</message>
<message xml:lang="zh_CN">要更改RustDesk选项, 需要您先通过身份验证</message> <message xml:lang="zh_CN">要更改RustDesk选项, 需要您先通过身份验证</message>
<message xml:lang="zh_TW">要變更RustDesk選項, 需要您先通過身份驗證</message> <message xml:lang="zh_TW">要變更RustDesk選項, 需要您先通過身份驗證</message>
<message xml:lang="de">Authentifizierung zum Ändern der RustDesk-Optionen</message>
<annotate key="org.freedesktop.policykit.exec.path">/usr/share/rustdesk/files/polkit</annotate> <annotate key="org.freedesktop.policykit.exec.path">/usr/share/rustdesk/files/polkit</annotate>
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate> <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
<defaults> <defaults>

View File

@ -10,7 +10,7 @@ use crate::{
}; };
use flutter_rust_bridge::{StreamSink, SyncReturn}; use flutter_rust_bridge::{StreamSink, SyncReturn};
use hbb_common::{ use hbb_common::{
config::{self, LocalConfig, PeerConfig, ONLINE}, config::{self, LocalConfig, PeerConfig, PeerInfoSerde, ONLINE},
fs, log, fs, log,
message_proto::KeyboardMode, message_proto::KeyboardMode,
ResultType, ResultType,
@ -21,6 +21,7 @@ use std::{
ffi::{CStr, CString}, ffi::{CStr, CString},
os::raw::c_char, os::raw::c_char,
str::FromStr, str::FromStr,
time::SystemTime,
}; };
// use crate::hbbs_http::account::AuthResult; // use crate::hbbs_http::account::AuthResult;
@ -726,10 +727,6 @@ pub fn main_peer_has_password(id: String) -> bool {
peer_has_password(id) peer_has_password(id)
} }
pub fn main_is_in_recent_peers(id: String) -> bool {
PeerConfig::peers().iter().any(|e| e.0 == id)
}
pub fn main_load_recent_peers() { pub fn main_load_recent_peers() {
if !config::APP_DIR.read().unwrap().is_empty() { if !config::APP_DIR.read().unwrap().is_empty() {
let peers: Vec<HashMap<&str, String>> = PeerConfig::peers() let peers: Vec<HashMap<&str, String>> = PeerConfig::peers()
@ -756,7 +753,28 @@ pub fn main_load_recent_peers() {
pub fn main_load_fav_peers() { pub fn main_load_fav_peers() {
if !config::APP_DIR.read().unwrap().is_empty() { if !config::APP_DIR.read().unwrap().is_empty() {
let favs = get_fav(); let favs = get_fav();
let peers: Vec<HashMap<&str, String>> = PeerConfig::peers() let mut recent = PeerConfig::peers();
let mut lan = config::LanPeers::load()
.peers
.iter()
.filter(|d| recent.iter().all(|r| r.0 != d.id))
.map(|d| {
(
d.id.clone(),
SystemTime::UNIX_EPOCH,
PeerConfig {
info: PeerInfoSerde {
username: d.username.clone(),
hostname: d.hostname.clone(),
platform: d.platform.clone(),
},
..Default::default()
},
)
})
.collect();
recent.append(&mut lan);
let peers: Vec<HashMap<&str, String>> = recent
.into_iter() .into_iter()
.filter_map(|(id, _, p)| { .filter_map(|(id, _, p)| {
if favs.contains(&id) { if favs.contains(&id) {
@ -1361,7 +1379,7 @@ pub fn send_url_scheme(_url: String) {
#[cfg(target_os = "android")] #[cfg(target_os = "android")]
pub mod server_side { pub mod server_side {
use hbb_common::{log, config}; use hbb_common::{config, log};
use jni::{ use jni::{
objects::{JClass, JString}, objects::{JClass, JString},
sys::jstring, sys::jstring,

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", "编解码"), ("Codec", "编解码"),
("Resolution", "分辨率"), ("Resolution", "分辨率"),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -125,7 +125,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Good image quality", "Hohe Bildqualität"), ("Good image quality", "Hohe Bildqualität"),
("Balanced", "Ausgeglichen"), ("Balanced", "Ausgeglichen"),
("Optimize reaction time", "Geschwindigkeit"), ("Optimize reaction time", "Geschwindigkeit"),
("Custom", "Individuell"), ("Custom", "Benutzerdefiniert"),
("Show remote cursor", "Entfernten Cursor anzeigen"), ("Show remote cursor", "Entfernten Cursor anzeigen"),
("Show quality monitor", "Qualitätsüberwachung anzeigen"), ("Show quality monitor", "Qualitätsüberwachung anzeigen"),
("Disable clipboard", "Zwischenablage deaktivieren"), ("Disable clipboard", "Zwischenablage deaktivieren"),
@ -152,7 +152,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Configure", "Konfigurieren"), ("Configure", "Konfigurieren"),
("config_acc", "Um Ihren PC aus der Ferne zu steuern, müssen Sie RustDesk Zugriffsrechte erteilen."), ("config_acc", "Um Ihren PC aus der Ferne zu steuern, müssen Sie RustDesk Zugriffsrechte erteilen."),
("config_screen", "Um aus der Ferne auf Ihren PC zugreifen zu können, müssen Sie RustDesk die Berechtigung \"Bildschirmaufnahme\" erteilen."), ("config_screen", "Um aus der Ferne auf Ihren PC zugreifen zu können, müssen Sie RustDesk die Berechtigung \"Bildschirmaufnahme\" erteilen."),
("Installing ...", "Installiere"), ("Installing ...", " Wird installiert"),
("Install", "Installieren"), ("Install", "Installieren"),
("Installation", "Installation"), ("Installation", "Installation"),
("Installation Path", "Installationspfad"), ("Installation Path", "Installationspfad"),
@ -230,8 +230,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Add Tag", "Stichwort hinzufügen"), ("Add Tag", "Stichwort hinzufügen"),
("Unselect all tags", "Alle Stichworte abwählen"), ("Unselect all tags", "Alle Stichworte abwählen"),
("Network error", "Netzwerkfehler"), ("Network error", "Netzwerkfehler"),
("Username missed", "Benutzernamen vergessen"), ("Username missed", "Benutzername fehlt"),
("Password missed", "Passwort vergessen"), ("Password missed", "Passwort fehlt"),
("Wrong credentials", "Falsche Anmeldedaten"), ("Wrong credentials", "Falsche Anmeldedaten"),
("Edit Tag", "Schlagwort bearbeiten"), ("Edit Tag", "Schlagwort bearbeiten"),
("Unremember Password", "Gespeichertes Passwort löschen"), ("Unremember Password", "Gespeichertes Passwort löschen"),
@ -299,7 +299,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Help", "Hilfe"), ("Help", "Hilfe"),
("Failed", "Fehlgeschlagen"), ("Failed", "Fehlgeschlagen"),
("Succeeded", "Erfolgreich"), ("Succeeded", "Erfolgreich"),
("Someone turns on privacy mode, exit", "Jemand hat den Datenschutzmodus aktiviert, beende …"), ("Someone turns on privacy mode, exit", "Jemand hat den Datenschutzmodus aktiviert, wird beendet"),
("Unsupported", "Nicht unterstützt"), ("Unsupported", "Nicht unterstützt"),
("Peer denied", "Die Gegenstelle hat die Verbindung abgelehnt."), ("Peer denied", "Die Gegenstelle hat die Verbindung abgelehnt."),
("Please install plugins", "Bitte installieren Sie Plugins"), ("Please install plugins", "Bitte installieren Sie Plugins"),
@ -407,7 +407,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("One-time Password", "Einmalpasswort"), ("One-time Password", "Einmalpasswort"),
("Use one-time password", "Einmalpasswort verwenden"), ("Use one-time password", "Einmalpasswort verwenden"),
("One-time password length", "Länge des Einmalpassworts"), ("One-time password length", "Länge des Einmalpassworts"),
("Request access to your device", "Zugriff zu Ihrem Gerät erbitten"), ("Request access to your device", "Zugriff auf Ihr Gerät anfordern"),
("Hide connection management window", "Fenster zur Verwaltung der Verbindung verstecken"), ("Hide connection management window", "Fenster zur Verwaltung der Verbindung verstecken"),
("hide_cm_tip", "Dies ist nur möglich, wenn der Zugriff über ein permanentes Passwort erfolgt."), ("hide_cm_tip", "Dies ist nur möglich, wenn der Zugriff über ein permanentes Passwort erfolgt."),
("wayland_experiment_tip", "Die Unterstützung von Wayland ist nur experimentell. Bitte nutzen Sie X11, wenn Sie einen unbeaufsichtigten Zugriff benötigen."), ("wayland_experiment_tip", "Die Unterstützung von Wayland ist nur experimentell. Bitte nutzen Sie X11, wenn Sie einen unbeaufsichtigten Zugriff benötigen."),
@ -442,7 +442,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Medium", "Mittel"), ("Medium", "Mittel"),
("Strong", "Stark"), ("Strong", "Stark"),
("Switch Sides", "Seiten wechseln"), ("Switch Sides", "Seiten wechseln"),
("Please confirm if you want to share your desktop?", "Bitte bestätigen Sie, ob Sie Ihren Desktop freigeben möchten."), ("Please confirm if you want to share your desktop?", "Bitte bestätigen Sie, wenn Sie Ihren Desktop freigeben möchten."),
("Display", "Anzeige"), ("Display", "Anzeige"),
("Default View Style", "Standard-Ansichtsstil"), ("Default View Style", "Standard-Ansichtsstil"),
("Default Scroll Style", "Standard-Scroll-Stil"), ("Default Scroll Style", "Standard-Scroll-Stil"),
@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", "Codec"), ("Codec", "Codec"),
("Resolution", "Auflösung"), ("Resolution", "Auflösung"),
("No transfers in progress", "Keine Übertragungen im Gange"), ("No transfers in progress", "Keine Übertragungen im Gange"),
].iter().cloned().collect(); ("Set one-time password length", "Länge des Einmalpassworts festlegen"),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", "Códec"), ("Codec", "Códec"),
("Resolution", "Resolución"), ("Resolution", "Resolución"),
("No transfers in progress", "No hay transferencias en curso"), ("No transfers in progress", "No hay transferencias en curso"),
].iter().cloned().collect(); ("Set one-time password length", "Establecer contraseña de un solo uso"),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", "کدک"), ("Codec", "کدک"),
("Resolution", "وضوح"), ("Resolution", "وضوح"),
("No transfers in progress", "هیچ انتقالی در حال انجام نیست"), ("No transfers in progress", "هیچ انتقالی در حال انجام نیست"),
].iter().cloned().collect(); ("Set one-time password length", "طول رمز یکبار مصرف را تعیین کنید"),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", "Κωδικοποίηση"), ("Codec", "Κωδικοποίηση"),
("Resolution", "Ανάλυση"), ("Resolution", "Ανάλυση"),
("No transfers in progress", "Δεν υπάρχει μεταφορά σε εξέλιξη"), ("No transfers in progress", "Δεν υπάρχει μεταφορά σε εξέλιξη"),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", "Codec"), ("Codec", "Codec"),
("Resolution", "Risoluzione"), ("Resolution", "Risoluzione"),
("No transfers in progress", "Nessun trasferimento in corso"), ("No transfers in progress", "Nessun trasferimento in corso"),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", "Codec"), ("Codec", "Codec"),
("Resolution", "Resolutie"), ("Resolution", "Resolutie"),
("No transfers in progress", "Geen overdrachten in uitvoering"), ("No transfers in progress", "Geen overdrachten in uitvoering"),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -459,7 +459,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Reconnect", "Połącz ponownie"), ("Reconnect", "Połącz ponownie"),
("Codec", "Kodek"), ("Codec", "Kodek"),
("Resolution", "Rozdzielczość"), ("Resolution", "Rozdzielczość"),
("Key", "Klucz"),
("No transfers in progress", "Brak transferów w toku"), ("No transfers in progress", "Brak transferów w toku"),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -349,7 +349,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Security", "Безопасность"), ("Security", "Безопасность"),
("Theme", "Тема"), ("Theme", "Тема"),
("Dark Theme", "Тёмная тема"), ("Dark Theme", "Тёмная тема"),
("Light Theme", ""), ("Light Theme", "Светлая тема"),
("Dark", "Тёмная"), ("Dark", "Тёмная"),
("Light", "Светлая"), ("Light", "Светлая"),
("Follow System", "Системная"), ("Follow System", "Системная"),
@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", "Кодек"), ("Codec", "Кодек"),
("Resolution", "Разрешение"), ("Resolution", "Разрешение"),
("No transfers in progress", "Передача не осуществляется"), ("No transfers in progress", "Передача не осуществляется"),
].iter().cloned().collect(); ("Set one-time password length", "Установить длину одноразового пароля"),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", "編解碼"), ("Codec", "編解碼"),
("Resolution", "分辨率"), ("Resolution", "分辨率"),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }

View File

@ -460,5 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Codec", ""), ("Codec", ""),
("Resolution", ""), ("Resolution", ""),
("No transfers in progress", ""), ("No transfers in progress", ""),
].iter().cloned().collect(); ("Set one-time password length", ""),
].iter().cloned().collect();
} }