mirror of
https://github.com/rustdesk/rustdesk.git
synced 2025-06-11 12:43:12 +08:00
refactor windows specific session, file transfer and waiting for image (#7184)
* refactor windows specific session, file transfer and waiting for image 1. File transfer doesn't show directory until correct session id is ensured 2. Fix file transfer, caused by `pi.username = self.lc.read().unwrap().get_username(&pi);` in `handle_peer_info` override empty username and `get_active_username` doesn't return currect session username * Fix home directory not change when session changed, or wrong home directory * Fix show empty remote directory rather than error messagbox when current session is in login screen 3. Show `Connected, waiting for image` after user choose the same session id Signed-off-by: 21pages <pages21@163.com> * update translations Signed-off-by: 21pages <pages21@163.com> * Update connection.rs --------- Signed-off-by: 21pages <pages21@163.com> Co-authored-by: RustDesk <71636191+rustdesk@users.noreply.github.com>
This commit is contained in:
parent
0f44de7dc3
commit
bf5abdb520
@ -494,9 +494,9 @@ class FfiModel with ChangeNotifier {
|
|||||||
Map<String, dynamic> evt, SessionID sessionId, String peerId) {
|
Map<String, dynamic> evt, SessionID sessionId, String peerId) {
|
||||||
if (parent.target == null) return;
|
if (parent.target == null) return;
|
||||||
final dialogManager = parent.target!.dialogManager;
|
final dialogManager = parent.target!.dialogManager;
|
||||||
final sessions = evt['user_sessions'];
|
final sessions = evt['windows_sessions'];
|
||||||
final title = translate('Multiple active user sessions found');
|
final title = translate('Multiple Windows sessions found');
|
||||||
final text = translate('Please select the user you want to connect to');
|
final text = translate('Please select the session you want to connect to');
|
||||||
final type = "";
|
final type = "";
|
||||||
|
|
||||||
showWindowsSessionsDialog(
|
showWindowsSessionsDialog(
|
||||||
|
@ -1150,6 +1150,7 @@ pub struct LoginConfigHandler {
|
|||||||
pub adapter_luid: Option<i64>,
|
pub adapter_luid: Option<i64>,
|
||||||
pub mark_unsupported: Vec<CodecFormat>,
|
pub mark_unsupported: Vec<CodecFormat>,
|
||||||
pub selected_windows_session_id: Option<u32>,
|
pub selected_windows_session_id: Option<u32>,
|
||||||
|
pub peer_info: Option<PeerInfo>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Deref for LoginConfigHandler {
|
impl Deref for LoginConfigHandler {
|
||||||
@ -1518,6 +1519,7 @@ impl LoginConfigHandler {
|
|||||||
}
|
}
|
||||||
let mut n = 0;
|
let mut n = 0;
|
||||||
let mut msg = OptionMessage::new();
|
let mut msg = OptionMessage::new();
|
||||||
|
// Version 1.2.5 can remove this, and OptionMessage is not needed for file transfer
|
||||||
msg.support_windows_specific_session = BoolOption::Yes.into();
|
msg.support_windows_specific_session = BoolOption::Yes.into();
|
||||||
n += 1;
|
n += 1;
|
||||||
|
|
||||||
|
@ -838,7 +838,7 @@ impl InvokeUiSession for FlutterHandler {
|
|||||||
self.push_event(
|
self.push_event(
|
||||||
"set_multiple_windows_session",
|
"set_multiple_windows_session",
|
||||||
vec![(
|
vec![(
|
||||||
"user_sessions",
|
"windows_sessions",
|
||||||
&serde_json::ser::to_string(&msg_vec).unwrap_or("".to_owned()),
|
&serde_json::ser::to_string(&msg_vec).unwrap_or("".to_owned()),
|
||||||
)],
|
)],
|
||||||
);
|
);
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
377
src/lang/bg.rs
377
src/lang/bg.rs
@ -1,67 +1,254 @@
|
|||||||
lazy_static::lazy_static! {
|
lazy_static::lazy_static! {
|
||||||
pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||||
[
|
[
|
||||||
|
("Status", ""),
|
||||||
|
("Your Desktop", ""),
|
||||||
("desk_tip", "Вашият работен плот може да бъде достъпен с този идентификационен код и парола."),
|
("desk_tip", "Вашият работен плот може да бъде достъпен с този идентификационен код и парола."),
|
||||||
|
("Password", ""),
|
||||||
|
("Ready", ""),
|
||||||
|
("Established", ""),
|
||||||
("connecting_status", "Свързване с RustDesk мрежата..."),
|
("connecting_status", "Свързване с RustDesk мрежата..."),
|
||||||
|
("Enable service", ""),
|
||||||
|
("Start service", ""),
|
||||||
|
("Service is running", ""),
|
||||||
|
("Service is not running", ""),
|
||||||
("not_ready_status", "Не е в готовност. Моля проверете мрежова връзка"),
|
("not_ready_status", "Не е в готовност. Моля проверете мрежова връзка"),
|
||||||
|
("Control Remote Desktop", ""),
|
||||||
|
("Transfer file", ""),
|
||||||
|
("Connect", ""),
|
||||||
|
("Recent sessions", ""),
|
||||||
|
("Address book", ""),
|
||||||
|
("Confirmation", ""),
|
||||||
|
("TCP tunneling", ""),
|
||||||
|
("Remove", ""),
|
||||||
|
("Refresh random password", ""),
|
||||||
|
("Set your own password", ""),
|
||||||
|
("Enable keyboard/mouse", ""),
|
||||||
|
("Enable clipboard", ""),
|
||||||
|
("Enable file transfer", ""),
|
||||||
|
("Enable TCP tunneling", ""),
|
||||||
|
("IP Whitelisting", ""),
|
||||||
("ID/Relay Server", "ID/Релейн сървър"),
|
("ID/Relay Server", "ID/Релейн сървър"),
|
||||||
|
("Import server config", ""),
|
||||||
|
("Export Server Config", ""),
|
||||||
|
("Import server configuration successfully", ""),
|
||||||
|
("Export server configuration successfully", ""),
|
||||||
|
("Invalid server configuration", ""),
|
||||||
|
("Clipboard is empty", ""),
|
||||||
|
("Stop service", ""),
|
||||||
|
("Change ID", ""),
|
||||||
|
("Your new ID", ""),
|
||||||
|
("length %min% to %max%", ""),
|
||||||
|
("starts with a letter", ""),
|
||||||
|
("allowed characters", ""),
|
||||||
("id_change_tip", "Само a-z, A-Z, 0-9 и _ (долна черта) символи са позволени. Първата буква трябва да е a-z, A-Z. С дължина мержу 6 и 16."),
|
("id_change_tip", "Само a-z, A-Z, 0-9 и _ (долна черта) символи са позволени. Първата буква трябва да е a-z, A-Z. С дължина мержу 6 и 16."),
|
||||||
|
("Website", ""),
|
||||||
|
("About", ""),
|
||||||
("Slogan_tip", "Направено от сърце в този хаотичен свят!"),
|
("Slogan_tip", "Направено от сърце в този хаотичен свят!"),
|
||||||
|
("Privacy Statement", ""),
|
||||||
|
("Mute", ""),
|
||||||
("Build Date", "Дата на изграждане"),
|
("Build Date", "Дата на изграждане"),
|
||||||
|
("Version", ""),
|
||||||
|
("Home", ""),
|
||||||
("Audio Input", "Аудио вход"),
|
("Audio Input", "Аудио вход"),
|
||||||
|
("Enhancements", ""),
|
||||||
("Hardware Codec", "Хардуерен кодек"),
|
("Hardware Codec", "Хардуерен кодек"),
|
||||||
|
("Adaptive bitrate", ""),
|
||||||
("ID Server", "ID сървър"),
|
("ID Server", "ID сървър"),
|
||||||
("Relay Server", "Релейн сървър"),
|
("Relay Server", "Релейн сървър"),
|
||||||
("API Server", "API сървър"),
|
("API Server", "API сървър"),
|
||||||
("invalid_http", "трябва да започва с http:// или https://"),
|
("invalid_http", "трябва да започва с http:// или https://"),
|
||||||
|
("Invalid IP", ""),
|
||||||
|
("Invalid format", ""),
|
||||||
("server_not_support", "Все още не се поддържа от сървъра"),
|
("server_not_support", "Все още не се поддържа от сървъра"),
|
||||||
|
("Not available", ""),
|
||||||
|
("Too frequent", ""),
|
||||||
|
("Cancel", ""),
|
||||||
|
("Skip", ""),
|
||||||
|
("Close", ""),
|
||||||
|
("Retry", ""),
|
||||||
|
("OK", ""),
|
||||||
("Password Required", "Изисква се парола"),
|
("Password Required", "Изисква се парола"),
|
||||||
|
("Please enter your password", ""),
|
||||||
|
("Remember password", ""),
|
||||||
("Wrong Password", "Грешна парола"),
|
("Wrong Password", "Грешна парола"),
|
||||||
|
("Do you want to enter again?", ""),
|
||||||
("Connection Error", "Грешка при свързване"),
|
("Connection Error", "Грешка при свързване"),
|
||||||
|
("Error", ""),
|
||||||
|
("Reset by the peer", ""),
|
||||||
|
("Connecting...", ""),
|
||||||
|
("Connection in progress. Please wait.", ""),
|
||||||
|
("Please try 1 minute later", ""),
|
||||||
("Login Error", "Грешка при вписване"),
|
("Login Error", "Грешка при вписване"),
|
||||||
|
("Successful", ""),
|
||||||
|
("Connected, waiting for image...", ""),
|
||||||
|
("Name", ""),
|
||||||
|
("Type", ""),
|
||||||
|
("Modified", ""),
|
||||||
|
("Size", ""),
|
||||||
("Show Hidden Files", "Показване на скрити файлове"),
|
("Show Hidden Files", "Показване на скрити файлове"),
|
||||||
|
("Receive", ""),
|
||||||
|
("Send", ""),
|
||||||
("Refresh File", "Опресняване на файла"),
|
("Refresh File", "Опресняване на файла"),
|
||||||
|
("Local", ""),
|
||||||
|
("Remote", ""),
|
||||||
("Remote Computer", "Отдалечен компютър"),
|
("Remote Computer", "Отдалечен компютър"),
|
||||||
("Local Computer", "Локален компютър"),
|
("Local Computer", "Локален компютър"),
|
||||||
("Confirm Delete", "Потвърдете изтриването"),
|
("Confirm Delete", "Потвърдете изтриването"),
|
||||||
|
("Delete", ""),
|
||||||
|
("Properties", ""),
|
||||||
("Multi Select", "Множествен избор"),
|
("Multi Select", "Множествен избор"),
|
||||||
("Select All", "Избери всички"),
|
("Select All", "Избери всички"),
|
||||||
("Unselect All", "Деселектирай всички"),
|
("Unselect All", "Деселектирай всички"),
|
||||||
("Empty Directory", "Празна директория"),
|
("Empty Directory", "Празна директория"),
|
||||||
|
("Not an empty directory", ""),
|
||||||
|
("Are you sure you want to delete this file?", ""),
|
||||||
|
("Are you sure you want to delete this empty directory?", ""),
|
||||||
|
("Are you sure you want to delete the file of this directory?", ""),
|
||||||
|
("Do this for all conflicts", ""),
|
||||||
|
("This is irreversible!", ""),
|
||||||
|
("Deleting", ""),
|
||||||
|
("files", ""),
|
||||||
|
("Waiting", ""),
|
||||||
|
("Finished", ""),
|
||||||
|
("Speed", ""),
|
||||||
("Custom Image Quality", "Персонализирано качество на изображението"),
|
("Custom Image Quality", "Персонализирано качество на изображението"),
|
||||||
|
("Privacy mode", ""),
|
||||||
|
("Block user input", ""),
|
||||||
|
("Unblock user input", ""),
|
||||||
("Adjust Window", "Регулирай прозореца"),
|
("Adjust Window", "Регулирай прозореца"),
|
||||||
|
("Original", ""),
|
||||||
|
("Shrink", ""),
|
||||||
|
("Stretch", ""),
|
||||||
|
("Scrollbar", ""),
|
||||||
|
("ScrollAuto", ""),
|
||||||
|
("Good image quality", ""),
|
||||||
|
("Balanced", ""),
|
||||||
|
("Optimize reaction time", ""),
|
||||||
|
("Custom", ""),
|
||||||
|
("Show remote cursor", ""),
|
||||||
|
("Show quality monitor", ""),
|
||||||
|
("Disable clipboard", ""),
|
||||||
|
("Lock after session end", ""),
|
||||||
|
("Insert", ""),
|
||||||
("Insert Lock", "Поставете ключ"),
|
("Insert Lock", "Поставете ключ"),
|
||||||
|
("Refresh", ""),
|
||||||
|
("ID does not exist", ""),
|
||||||
|
("Failed to connect to rendezvous server", ""),
|
||||||
|
("Please try later", ""),
|
||||||
|
("Remote desktop is offline", ""),
|
||||||
|
("Key mismatch", ""),
|
||||||
|
("Timeout", ""),
|
||||||
|
("Failed to connect to relay server", ""),
|
||||||
|
("Failed to connect via rendezvous server", ""),
|
||||||
|
("Failed to connect via relay server", ""),
|
||||||
|
("Failed to make direct connection to remote desktop", ""),
|
||||||
("Set Password", "Задайте парола"),
|
("Set Password", "Задайте парола"),
|
||||||
("OS Password", "Парола на Операционната система"),
|
("OS Password", "Парола на Операционната система"),
|
||||||
("install_tip", "Поради UAC, RustDesk в някои случай не може да работи правилно като отдалечена достъп. За да заобиколите UAC, моля, щракнете върху бутона по-долу, за да инсталирате RustDesk в системата."),
|
("install_tip", "Поради UAC, RustDesk в някои случай не може да работи правилно като отдалечена достъп. За да заобиколите UAC, моля, щракнете върху бутона по-долу, за да инсталирате RustDesk в системата."),
|
||||||
|
("Click to upgrade", ""),
|
||||||
|
("Click to download", ""),
|
||||||
|
("Click to update", ""),
|
||||||
|
("Configure", ""),
|
||||||
("config_acc", "За да управлявате вашия работен плот дистанционно, трябва да предоставите на RustDesk разрешения \"Достъпност\"."),
|
("config_acc", "За да управлявате вашия работен плот дистанционно, трябва да предоставите на RustDesk разрешения \"Достъпност\"."),
|
||||||
("config_screen", "In order to access your Desktop remotely, you need to grant RustDesk \"Screen Recording\" permissions."),
|
("config_screen", "In order to access your Desktop remotely, you need to grant RustDesk \"Screen Recording\" permissions."),
|
||||||
|
("Installing ...", ""),
|
||||||
|
("Install", ""),
|
||||||
|
("Installation", ""),
|
||||||
("Installation Path", "Инсталационен път"),
|
("Installation Path", "Инсталационен път"),
|
||||||
|
("Create start menu shortcuts", ""),
|
||||||
|
("Create desktop icon", ""),
|
||||||
("agreement_tip", "Стартирайки инсталацията, вие приемате лицензионното споразумение."),
|
("agreement_tip", "Стартирайки инсталацията, вие приемате лицензионното споразумение."),
|
||||||
("Accept and Install", "Приемете и инсталирайте"),
|
("Accept and Install", "Приемете и инсталирайте"),
|
||||||
|
("End-user license agreement", ""),
|
||||||
|
("Generating ...", ""),
|
||||||
|
("Your installation is lower version.", ""),
|
||||||
("not_close_tcp_tip", "Не затваряйте този прозорец, докато използвате тунела"),
|
("not_close_tcp_tip", "Не затваряйте този прозорец, докато използвате тунела"),
|
||||||
|
("Listening ...", ""),
|
||||||
("Remote Host", "Отдалечен хост"),
|
("Remote Host", "Отдалечен хост"),
|
||||||
("Remote Port", "Отдалечен порт"),
|
("Remote Port", "Отдалечен порт"),
|
||||||
|
("Action", ""),
|
||||||
|
("Add", ""),
|
||||||
("Local Port", "Локален порт"),
|
("Local Port", "Локален порт"),
|
||||||
("Local Address", "Локален адрес"),
|
("Local Address", "Локален адрес"),
|
||||||
("Change Local Port", "Промяна на локалният порт"),
|
("Change Local Port", "Промяна на локалният порт"),
|
||||||
("setup_server_tip", "За по-бърза връзка, моля направете свой собствен сървър"),
|
("setup_server_tip", "За по-бърза връзка, моля направете свой собствен сървър"),
|
||||||
|
("Too short, at least 6 characters.", ""),
|
||||||
|
("The confirmation is not identical.", ""),
|
||||||
|
("Permissions", ""),
|
||||||
|
("Accept", ""),
|
||||||
|
("Dismiss", ""),
|
||||||
|
("Disconnect", ""),
|
||||||
|
("Enable file copy and paste", ""),
|
||||||
|
("Connected", ""),
|
||||||
|
("Direct and encrypted connection", ""),
|
||||||
|
("Relayed and encrypted connection", ""),
|
||||||
|
("Direct and unencrypted connection", ""),
|
||||||
|
("Relayed and unencrypted connection", ""),
|
||||||
("Enter Remote ID", "Въведете дистанционно ID"),
|
("Enter Remote ID", "Въведете дистанционно ID"),
|
||||||
|
("Enter your password", ""),
|
||||||
|
("Logging in...", ""),
|
||||||
|
("Enable RDP session sharing", ""),
|
||||||
("Auto Login", "Автоматично вписване (Валидно само ако зададете \"Заключване след края на сесията\")"),
|
("Auto Login", "Автоматично вписване (Валидно само ако зададете \"Заключване след края на сесията\")"),
|
||||||
|
("Enable direct IP access", ""),
|
||||||
|
("Rename", ""),
|
||||||
|
("Space", ""),
|
||||||
|
("Create desktop shortcut", ""),
|
||||||
("Change Path", "Промяна на пътя"),
|
("Change Path", "Промяна на пътя"),
|
||||||
("Create Folder", "Създай папка"),
|
("Create Folder", "Създай папка"),
|
||||||
|
("Please enter the folder name", ""),
|
||||||
|
("Fix it", ""),
|
||||||
|
("Warning", ""),
|
||||||
|
("Login screen using Wayland is not supported", ""),
|
||||||
|
("Reboot required", ""),
|
||||||
|
("Unsupported display server", ""),
|
||||||
|
("x11 expected", ""),
|
||||||
|
("Port", ""),
|
||||||
|
("Settings", ""),
|
||||||
|
("Username", ""),
|
||||||
|
("Invalid port", ""),
|
||||||
|
("Closed manually by the peer", ""),
|
||||||
|
("Enable remote configuration modification", ""),
|
||||||
|
("Run without install", ""),
|
||||||
|
("Connect via relay", ""),
|
||||||
|
("Always connect via relay", ""),
|
||||||
("whitelist_tip", "Само IP от белия списък има достъп до мен"),
|
("whitelist_tip", "Само IP от белия списък има достъп до мен"),
|
||||||
|
("Login", ""),
|
||||||
|
("Verify", ""),
|
||||||
|
("Remember me", ""),
|
||||||
|
("Trust this device", ""),
|
||||||
|
("Verification code", ""),
|
||||||
("verification_tip", "На регистрирания имейл адрес е изпратен код за потвърждение, въведете кода за потвърждение, за да продължите да влизате."),
|
("verification_tip", "На регистрирания имейл адрес е изпратен код за потвърждение, въведете кода за потвърждение, за да продължите да влизате."),
|
||||||
|
("Logout", ""),
|
||||||
|
("Tags", ""),
|
||||||
|
("Search ID", ""),
|
||||||
("whitelist_sep", "Разделени със запетая, точка и запетая, интервали или нов ред"),
|
("whitelist_sep", "Разделени със запетая, точка и запетая, интервали или нов ред"),
|
||||||
|
("Add ID", ""),
|
||||||
("Add Tag", "Добавяне на етикет"),
|
("Add Tag", "Добавяне на етикет"),
|
||||||
|
("Unselect all tags", ""),
|
||||||
|
("Network error", ""),
|
||||||
|
("Username missed", ""),
|
||||||
|
("Password missed", ""),
|
||||||
("Wrong credentials", "Wrong username or password"),
|
("Wrong credentials", "Wrong username or password"),
|
||||||
|
("The verification code is incorrect or has expired", ""),
|
||||||
("Edit Tag", "Edit tag"),
|
("Edit Tag", "Edit tag"),
|
||||||
("Forget Password", "Забравена парола"),
|
("Forget Password", "Забравена парола"),
|
||||||
|
("Favorites", ""),
|
||||||
("Add to Favorites", "Добави към любими"),
|
("Add to Favorites", "Добави към любими"),
|
||||||
("Remove from Favorites", "Премахване от любими"),
|
("Remove from Favorites", "Премахване от любими"),
|
||||||
|
("Empty", ""),
|
||||||
|
("Invalid folder name", ""),
|
||||||
("Socks5 Proxy", "Socks5 прокси"),
|
("Socks5 Proxy", "Socks5 прокси"),
|
||||||
|
("Hostname", ""),
|
||||||
|
("Discovered", ""),
|
||||||
("install_daemon_tip", "За стартиране с компютъра трябва да инсталирате системна услуга."),
|
("install_daemon_tip", "За стартиране с компютъра трябва да инсталирате системна услуга."),
|
||||||
|
("Remote ID", ""),
|
||||||
|
("Paste", ""),
|
||||||
|
("Paste here?", ""),
|
||||||
("Are you sure to close the connection?", "Сигурни ли сте, че искате да затворите връзката?"),
|
("Are you sure to close the connection?", "Сигурни ли сте, че искате да затворите връзката?"),
|
||||||
|
("Download new version", ""),
|
||||||
|
("Touch mode", ""),
|
||||||
|
("Mouse mode", ""),
|
||||||
("One-Finger Tap", "Докосване с един пръст"),
|
("One-Finger Tap", "Докосване с един пръст"),
|
||||||
("Left Mouse", "Ляв бутон на мишката"),
|
("Left Mouse", "Ляв бутон на мишката"),
|
||||||
("One-Long Tap", "Едно дълго докосване"),
|
("One-Long Tap", "Едно дълго докосване"),
|
||||||
@ -76,13 +263,23 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Canvas Move", "Преместване на платното"),
|
("Canvas Move", "Преместване на платното"),
|
||||||
("Pinch to Zoom", "Щипнете, за да увеличите"),
|
("Pinch to Zoom", "Щипнете, за да увеличите"),
|
||||||
("Canvas Zoom", "Увеличение на платното"),
|
("Canvas Zoom", "Увеличение на платното"),
|
||||||
|
("Reset canvas", ""),
|
||||||
|
("No permission of file transfer", ""),
|
||||||
|
("Note", ""),
|
||||||
|
("Connection", ""),
|
||||||
("Share Screen", "Сподели екран"),
|
("Share Screen", "Сподели екран"),
|
||||||
|
("Chat", ""),
|
||||||
|
("Total", ""),
|
||||||
|
("items", ""),
|
||||||
|
("Selected", ""),
|
||||||
("Screen Capture", "Заснемане на екрана"),
|
("Screen Capture", "Заснемане на екрана"),
|
||||||
("Input Control", "Контрол на въвеждане"),
|
("Input Control", "Контрол на въвеждане"),
|
||||||
("Audio Capture", "Аудио записване"),
|
("Audio Capture", "Аудио записване"),
|
||||||
("File Connection", "Файлова връзка"),
|
("File Connection", "Файлова връзка"),
|
||||||
("Screen Connection", "Свързване на екрана"),
|
("Screen Connection", "Свързване на екрана"),
|
||||||
|
("Do you accept?", ""),
|
||||||
("Open System Setting", "Отворете системната настройка"),
|
("Open System Setting", "Отворете системната настройка"),
|
||||||
|
("How to get Android input permission?", ""),
|
||||||
("android_input_permission_tip1", "За да може отдалечено устройство да управлява вашето Android устройство чрез мишка или докосване, трябва да разрешите на RustDesk да използва услугата \"Достъпност\"."),
|
("android_input_permission_tip1", "За да може отдалечено устройство да управлява вашето Android устройство чрез мишка или докосване, трябва да разрешите на RustDesk да използва услугата \"Достъпност\"."),
|
||||||
("android_input_permission_tip2", "Моля, отидете на следващата страница с системни настройки, намерете и въведете [Installed Services], включете услугата [RustDesk Input]."),
|
("android_input_permission_tip2", "Моля, отидете на следващата страница с системни настройки, намерете и въведете [Installed Services], включете услугата [RustDesk Input]."),
|
||||||
("android_new_connection_tip", "Получена е нова заявка за контрол, която иска да контролира вашето текущо устройство."),
|
("android_new_connection_tip", "Получена е нова заявка за контрол, която иска да контролира вашето текущо устройство."),
|
||||||
@ -91,15 +288,46 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("android_version_audio_tip", "Текущата версия на Android не поддържа аудио заснемане, моля, актуализирайте устройството с Android 10 или по-нова версия."),
|
("android_version_audio_tip", "Текущата версия на Android не поддържа аудио заснемане, моля, актуализирайте устройството с Android 10 или по-нова версия."),
|
||||||
("android_start_service_tip", "Докоснете [Start service] или активирайте разрешение [Screen Capture], за да стартирате услугата за споделяне на екрана."),
|
("android_start_service_tip", "Докоснете [Start service] или активирайте разрешение [Screen Capture], за да стартирате услугата за споделяне на екрана."),
|
||||||
("android_permission_may_not_change_tip", "Разрешенията за установени връзки може да не се променят незабавно, докато не се свържете отново."),
|
("android_permission_may_not_change_tip", "Разрешенията за установени връзки може да не се променят незабавно, докато не се свържете отново."),
|
||||||
("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"),
|
("Account", ""),
|
||||||
|
("Overwrite", ""),
|
||||||
|
("This file exists, skip or overwrite this file?", ""),
|
||||||
|
("Quit", ""),
|
||||||
|
("Help", ""),
|
||||||
|
("Failed", ""),
|
||||||
|
("Succeeded", ""),
|
||||||
|
("Someone turns on privacy mode, exit", ""),
|
||||||
|
("Unsupported", ""),
|
||||||
|
("Peer denied", ""),
|
||||||
|
("Please install plugins", ""),
|
||||||
|
("Peer exit", ""),
|
||||||
|
("Failed to turn off", ""),
|
||||||
|
("Turned off", ""),
|
||||||
|
("Language", ""),
|
||||||
|
("Keep RustDesk background service", ""),
|
||||||
("Ignore Battery Optimizations", "Игнорирай оптимизациите на батерията"),
|
("Ignore Battery Optimizations", "Игнорирай оптимизациите на батерията"),
|
||||||
("android_open_battery_optimizations_tip", "Ако искате да деактивирате тази функция, моля, отидете на следващата страница с настройки на приложението RustDesk, намерете и въведете [Battery], премахнете отметката от [Unrestricted]"),
|
("android_open_battery_optimizations_tip", "Ако искате да деактивирате тази функция, моля, отидете на следващата страница с настройки на приложението RustDesk, намерете и въведете [Battery], премахнете отметката от [Unrestricted]"),
|
||||||
|
("Start on boot", ""),
|
||||||
|
("Start the screen sharing service on boot, requires special permissions", ""),
|
||||||
|
("Connection not allowed", ""),
|
||||||
|
("Legacy mode", ""),
|
||||||
|
("Map mode", ""),
|
||||||
|
("Translate mode", ""),
|
||||||
|
("Use permanent password", ""),
|
||||||
|
("Use both passwords", ""),
|
||||||
|
("Set permanent password", ""),
|
||||||
|
("Enable remote restart", ""),
|
||||||
|
("Restart remote device", ""),
|
||||||
|
("Are you sure you want to restart", ""),
|
||||||
|
("Restarting remote device", ""),
|
||||||
("remote_restarting_tip", "Отдалеченото устройство се рестартира, моля, затворете това съобщение и се свържете отново с постоянна парола след известно време"),
|
("remote_restarting_tip", "Отдалеченото устройство се рестартира, моля, затворете това съобщение и се свържете отново с постоянна парола след известно време"),
|
||||||
|
("Copied", ""),
|
||||||
("Exit Fullscreen", "Изход от цял екран"),
|
("Exit Fullscreen", "Изход от цял екран"),
|
||||||
|
("Fullscreen", ""),
|
||||||
("Mobile Actions", "Мобилни действия"),
|
("Mobile Actions", "Мобилни действия"),
|
||||||
("Select Monitor", "Изберете монитор"),
|
("Select Monitor", "Изберете монитор"),
|
||||||
("Control Actions", "Контролни действия"),
|
("Control Actions", "Контролни действия"),
|
||||||
("Display Settings", "Настройки на дисплея"),
|
("Display Settings", "Настройки на дисплея"),
|
||||||
|
("Ratio", ""),
|
||||||
("Image Quality", "Качество на изображението"),
|
("Image Quality", "Качество на изображението"),
|
||||||
("Scroll Style", "Стил на превъртане"),
|
("Scroll Style", "Стил на превъртане"),
|
||||||
("Show Toolbar", "Показване на лентата с инструменти"),
|
("Show Toolbar", "Показване на лентата с инструменти"),
|
||||||
@ -108,51 +336,138 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Relay Connection", "Релейна връзка"),
|
("Relay Connection", "Релейна връзка"),
|
||||||
("Secure Connection", "Защитена връзка"),
|
("Secure Connection", "Защитена връзка"),
|
||||||
("Insecure Connection", "Незащитена връзка"),
|
("Insecure Connection", "Незащитена връзка"),
|
||||||
|
("Scale original", ""),
|
||||||
|
("Scale adaptive", ""),
|
||||||
|
("General", ""),
|
||||||
|
("Security", ""),
|
||||||
|
("Theme", ""),
|
||||||
("Dark Theme", "Тъмна тема"),
|
("Dark Theme", "Тъмна тема"),
|
||||||
("Light Theme", "Светла тема"),
|
("Light Theme", "Светла тема"),
|
||||||
|
("Dark", ""),
|
||||||
|
("Light", ""),
|
||||||
("Follow System", "Следвай системата"),
|
("Follow System", "Следвай системата"),
|
||||||
|
("Enable hardware codec", ""),
|
||||||
("Unlock Security Settings", "Отключи настройките за сигурност"),
|
("Unlock Security Settings", "Отключи настройките за сигурност"),
|
||||||
|
("Enable audio", ""),
|
||||||
("Unlock Network Settings", "Отключи мрежовите настройки"),
|
("Unlock Network Settings", "Отключи мрежовите настройки"),
|
||||||
|
("Server", ""),
|
||||||
("Direct IP Access", "Директен IP достъп"),
|
("Direct IP Access", "Директен IP достъп"),
|
||||||
|
("Proxy", ""),
|
||||||
|
("Apply", ""),
|
||||||
|
("Disconnect all devices?", ""),
|
||||||
|
("Clear", ""),
|
||||||
("Audio Input Device", "Аудио входно устройство"),
|
("Audio Input Device", "Аудио входно устройство"),
|
||||||
("Use IP Whitelisting", "Използвайте бял списък с IP адреси"),
|
("Use IP Whitelisting", "Използвайте бял списък с IP адреси"),
|
||||||
|
("Network", ""),
|
||||||
("Pin Toolbar", "Фиксиране на лентата с инструменти"),
|
("Pin Toolbar", "Фиксиране на лентата с инструменти"),
|
||||||
("Unpin Toolbar", "Откачване на лентата с инструменти"),
|
("Unpin Toolbar", "Откачване на лентата с инструменти"),
|
||||||
|
("Recording", ""),
|
||||||
|
("Directory", ""),
|
||||||
|
("Automatically record incoming sessions", ""),
|
||||||
|
("Change", ""),
|
||||||
|
("Start session recording", ""),
|
||||||
|
("Stop session recording", ""),
|
||||||
|
("Enable recording session", ""),
|
||||||
|
("Enable LAN discovery", ""),
|
||||||
|
("Deny LAN discovery", ""),
|
||||||
|
("Write a message", ""),
|
||||||
|
("Prompt", ""),
|
||||||
|
("Please wait for confirmation of UAC...", ""),
|
||||||
("elevated_foreground_window_tip", "Текущият прозорец на отдалечения работен плот изисква по-високи привилегии за работа, така че временно не може да използва мишката и клавиатурата. Можете да поискате от отдалечения потребител да минимизира текущия прозорец или да щракнете върху бутона за повдигане в прозореца за управление на връзката. За да избегнете този проблем, се препоръчва да инсталирате софтуера на отдалеченото устройство."),
|
("elevated_foreground_window_tip", "Текущият прозорец на отдалечения работен плот изисква по-високи привилегии за работа, така че временно не може да използва мишката и клавиатурата. Можете да поискате от отдалечения потребител да минимизира текущия прозорец или да щракнете върху бутона за повдигане в прозореца за управление на връзката. За да избегнете този проблем, се препоръчва да инсталирате софтуера на отдалеченото устройство."),
|
||||||
|
("Disconnected", ""),
|
||||||
|
("Other", ""),
|
||||||
|
("Confirm before closing multiple tabs", ""),
|
||||||
("Keyboard Settings", "Настройки на клавиатурата"),
|
("Keyboard Settings", "Настройки на клавиатурата"),
|
||||||
("Full Access", "Пълен достъп"),
|
("Full Access", "Пълен достъп"),
|
||||||
("Screen Share", "Споделяне на екрана"),
|
("Screen Share", "Споделяне на екрана"),
|
||||||
|
("Wayland requires Ubuntu 21.04 or higher version.", ""),
|
||||||
|
("Wayland requires higher version of linux distro. Please try X11 desktop or change your OS.", ""),
|
||||||
("JumpLink", "Преглед"),
|
("JumpLink", "Преглед"),
|
||||||
("Please Select the screen to be shared(Operate on the peer side).", "Моля, изберете екрана, който да бъде споделен (Работете от страна на партньора)."),
|
("Please Select the screen to be shared(Operate on the peer side).", "Моля, изберете екрана, който да бъде споделен (Работете от страна на партньора)."),
|
||||||
|
("Show RustDesk", ""),
|
||||||
|
("This PC", ""),
|
||||||
|
("or", ""),
|
||||||
|
("Continue with", ""),
|
||||||
|
("Elevate", ""),
|
||||||
|
("Zoom cursor", ""),
|
||||||
|
("Accept sessions via password", ""),
|
||||||
|
("Accept sessions via click", ""),
|
||||||
|
("Accept sessions via both", ""),
|
||||||
|
("Please wait for the remote side to accept your session request...", ""),
|
||||||
("One-time Password", "Еднократна парола"),
|
("One-time Password", "Еднократна парола"),
|
||||||
|
("Use one-time password", ""),
|
||||||
|
("One-time password length", ""),
|
||||||
|
("Request access to your device", ""),
|
||||||
|
("Hide connection management window", ""),
|
||||||
("hide_cm_tip", "Разрешете скриването само ако приемате сесии чрез парола и използвате постоянна парола"),
|
("hide_cm_tip", "Разрешете скриването само ако приемате сесии чрез парола и използвате постоянна парола"),
|
||||||
("wayland_experiment_tip", "Wayland support is in experimental stage, please use X11 if you require unattended access."),
|
("wayland_experiment_tip", "Wayland support is in experimental stage, please use X11 if you require unattended access."),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
|
("Skipped", ""),
|
||||||
|
("Add to address book", ""),
|
||||||
|
("Group", ""),
|
||||||
|
("Search", ""),
|
||||||
|
("Closed manually by web console", ""),
|
||||||
|
("Local keyboard type", ""),
|
||||||
|
("Select local keyboard type", ""),
|
||||||
("software_render_tip", "Ако използвате графична карта Nvidia под Linux и отдалеченият прозорец се затваря веднага след свързване, превключването към драйвера Nouveau с отворен код и изборът да използвате софтуерно изобразяване може да помогне. Изисква се рестартиране на софтуера."),
|
("software_render_tip", "Ако използвате графична карта Nvidia под Linux и отдалеченият прозорец се затваря веднага след свързване, превключването към драйвера Nouveau с отворен код и изборът да използвате софтуерно изобразяване може да помогне. Изисква се рестартиране на софтуера."),
|
||||||
|
("Always use software rendering", ""),
|
||||||
("config_input", "За да контролирате отдалечен работен плот с клавиатура, трябва да предоставите на RustDesk разрешения \"Input Monitoring\"."),
|
("config_input", "За да контролирате отдалечен работен плот с клавиатура, трябва да предоставите на RustDesk разрешения \"Input Monitoring\"."),
|
||||||
("config_microphone", "За да говорите дистанционно, трябва да предоставите на RustDesk разрешения \"Запис на звук\"."),
|
("config_microphone", "За да говорите дистанционно, трябва да предоставите на RustDesk разрешения \"Запис на звук\"."),
|
||||||
("request_elevation_tip", "Можете също така да поискате повишаване на привилегии, ако има някой от отдалечената страна."),
|
("request_elevation_tip", "Можете също така да поискате повишаване на привилегии, ако има някой от отдалечената страна."),
|
||||||
|
("Wait", ""),
|
||||||
("Elevation Error", "Грешка при повишаване на привилегии"),
|
("Elevation Error", "Грешка при повишаване на привилегии"),
|
||||||
|
("Ask the remote user for authentication", ""),
|
||||||
|
("Choose this if the remote account is administrator", ""),
|
||||||
|
("Transmit the username and password of administrator", ""),
|
||||||
("still_click_uac_tip", "Все още изисква отдалеченият потребител да щракне върху OK в прозореца на UAC при стартиранят RustDesk."),
|
("still_click_uac_tip", "Все още изисква отдалеченият потребител да щракне върху OK в прозореца на UAC при стартиранят RustDesk."),
|
||||||
("Request Elevation", "Поискайте повишаване на привилегии"),
|
("Request Elevation", "Поискайте повишаване на привилегии"),
|
||||||
("wait_accept_uac_tip", "Моля, изчакайте отдалеченият потребител да приеме диалоговия прозорец на UAC."),
|
("wait_accept_uac_tip", "Моля, изчакайте отдалеченият потребител да приеме диалоговия прозорец на UAC."),
|
||||||
|
("Elevate successfully", ""),
|
||||||
|
("uppercase", ""),
|
||||||
|
("lowercase", ""),
|
||||||
|
("digit", ""),
|
||||||
|
("special character", ""),
|
||||||
|
("length>=8", ""),
|
||||||
|
("Weak", ""),
|
||||||
|
("Medium", ""),
|
||||||
|
("Strong", ""),
|
||||||
("Switch Sides", "Сменете страните"),
|
("Switch Sides", "Сменете страните"),
|
||||||
|
("Please confirm if you want to share your desktop?", ""),
|
||||||
|
("Display", ""),
|
||||||
("Default View Style", "Стил на изглед по подразбиране"),
|
("Default View Style", "Стил на изглед по подразбиране"),
|
||||||
("Default Scroll Style", "Стил на превъртане по подразбиране"),
|
("Default Scroll Style", "Стил на превъртане по подразбиране"),
|
||||||
("Default Image Quality", "Качество на изображението по подразбиране"),
|
("Default Image Quality", "Качество на изображението по подразбиране"),
|
||||||
("Default Codec", "Кодек по подразбиране"),
|
("Default Codec", "Кодек по подразбиране"),
|
||||||
|
("Bitrate", ""),
|
||||||
|
("FPS", ""),
|
||||||
|
("Auto", ""),
|
||||||
("Other Default Options", "Други опции по подразбиране"),
|
("Other Default Options", "Други опции по подразбиране"),
|
||||||
|
("Voice call", ""),
|
||||||
|
("Text chat", ""),
|
||||||
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", "Може да не е възможно да се свържете директно; можете да опитате да се свържете чрез реле. Освен това, ако искате да използвате реле при първия си опит, добавете наставка \"/r\" към идентификатора или да изберете опцията \"Винаги свързване чрез реле\" в картата на последните сесии, ако съществува."),
|
("relay_hint_tip", "Може да не е възможно да се свържете директно; можете да опитате да се свържете чрез реле. Освен това, ако искате да използвате реле при първия си опит, добавете наставка \"/r\" към идентификатора или да изберете опцията \"Винаги свързване чрез реле\" в картата на последните сесии, ако съществува."),
|
||||||
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
|
("No transfers in progress", ""),
|
||||||
|
("Set one-time password length", ""),
|
||||||
("install_cert_tip", "Инсталирайте сертификат на RustDesk"),
|
("install_cert_tip", "Инсталирайте сертификат на RustDesk"),
|
||||||
("confirm_install_cert_tip", "Това е сертификат за тестване на RustDesk, на който може да се вярва. Сертификатът ще се използва за доверие и инсталиране на драйвери на RustDesk, когато е необходимо."),
|
("confirm_install_cert_tip", "Това е сертификат за тестване на RustDesk, на който може да се вярва. Сертификатът ще се използва за доверие и инсталиране на драйвери на RustDesk, когато е необходимо."),
|
||||||
("RDP Settings", "RDP настройки"),
|
("RDP Settings", "RDP настройки"),
|
||||||
|
("Sort by", ""),
|
||||||
("New Connection", "Ново свързване"),
|
("New Connection", "Ново свързване"),
|
||||||
|
("Restore", ""),
|
||||||
|
("Minimize", ""),
|
||||||
|
("Maximize", ""),
|
||||||
("Your Device", "Вашето устройство"),
|
("Your Device", "Вашето устройство"),
|
||||||
("empty_recent_tip", "Ами сега, няма скорошни сесии!\nВреме е да планирате нова."),
|
("empty_recent_tip", "Ами сега, няма скорошни сесии!\nВреме е да планирате нова."),
|
||||||
("empty_favorite_tip", "Все още нямате любими връстници?\nНека намерим някой, с когото да се свържете, и да го добавим към вашите любими!"),
|
("empty_favorite_tip", "Все още нямате любими връстници?\nНека намерим някой, с когото да се свържете, и да го добавим към вашите любими!"),
|
||||||
("empty_lan_tip", "О, не, изглежда, че все още не сме открили връстници."),
|
("empty_lan_tip", "О, не, изглежда, че все още не сме открили връстници."),
|
||||||
("empty_address_book_tip", "Изглежда, че в момента няма изброени връстници във вашата адресна книга."),
|
("empty_address_book_tip", "Изглежда, че в момента няма изброени връстници във вашата адресна книга."),
|
||||||
|
("eg: admin", ""),
|
||||||
("Empty Username", "Празно потребителско име"),
|
("Empty Username", "Празно потребителско име"),
|
||||||
("Empty Password", "Празна парола"),
|
("Empty Password", "Празна парола"),
|
||||||
|
("Me", ""),
|
||||||
("identical_file_tip", "Този файл е идентичен с този на партньора."),
|
("identical_file_tip", "Този файл е идентичен с този на партньора."),
|
||||||
("show_monitors_tip", "Показване на мониторите в лентата с инструменти"),
|
("show_monitors_tip", "Показване на мониторите в лентата с инструменти"),
|
||||||
("View Mode", "Режим на преглед"),
|
("View Mode", "Режим на преглед"),
|
||||||
@ -167,21 +482,49 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("xorg_not_found_text_tip", "Моля, инсталирайте Xorg"),
|
("xorg_not_found_text_tip", "Моля, инсталирайте Xorg"),
|
||||||
("no_desktop_title_tip", "Няма наличен работен плот"),
|
("no_desktop_title_tip", "Няма наличен работен плот"),
|
||||||
("no_desktop_text_tip", "Моля, инсталирайте работен плот GNOME"),
|
("no_desktop_text_tip", "Моля, инсталирайте работен плот GNOME"),
|
||||||
|
("No need to elevate", ""),
|
||||||
("System Sound", "Системен звук"),
|
("System Sound", "Системен звук"),
|
||||||
|
("Default", ""),
|
||||||
|
("New RDP", ""),
|
||||||
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", "Копиране на пръстов отпечатък"),
|
("Copy Fingerprint", "Копиране на пръстов отпечатък"),
|
||||||
("no fingerprints", "Няма пръстови отпечатъци"),
|
("no fingerprints", "Няма пръстови отпечатъци"),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", ""),
|
||||||
|
("Plugins", ""),
|
||||||
|
("Uninstall", ""),
|
||||||
|
("Update", ""),
|
||||||
|
("Enable", ""),
|
||||||
|
("Disable", ""),
|
||||||
|
("Options", ""),
|
||||||
("resolution_original_tip", "Оригинална резолюция"),
|
("resolution_original_tip", "Оригинална резолюция"),
|
||||||
("resolution_fit_local_tip", "Напасване към локална разделителна способност"),
|
("resolution_fit_local_tip", "Напасване към локална разделителна способност"),
|
||||||
("resolution_custom_tip", "Персонализирана разделителна способност"),
|
("resolution_custom_tip", "Персонализирана разделителна способност"),
|
||||||
|
("Collapse toolbar", ""),
|
||||||
("Accept and Elevate", "Приемете и повишаване на привилегии"),
|
("Accept and Elevate", "Приемете и повишаване на привилегии"),
|
||||||
("accept_and_elevate_btn_tooltip", "Приемете връзката и повишете UAC разрешенията."),
|
("accept_and_elevate_btn_tooltip", "Приемете връзката и повишете UAC разрешенията."),
|
||||||
("clipboard_wait_response_timeout_tip", "Времето за изчакване на отговор за копиране изтече."),
|
("clipboard_wait_response_timeout_tip", "Времето за изчакване на отговор за копиране изтече."),
|
||||||
|
("Incoming connection", ""),
|
||||||
|
("Outgoing connection", ""),
|
||||||
|
("Exit", ""),
|
||||||
|
("Open", ""),
|
||||||
("logout_tip", "Сигурни ли сте, че искате да излезете?"),
|
("logout_tip", "Сигурни ли сте, че искате да излезете?"),
|
||||||
|
("Service", ""),
|
||||||
|
("Start", ""),
|
||||||
|
("Stop", ""),
|
||||||
("exceed_max_devices", "Достигнахте максималния брой управлявани устройства."),
|
("exceed_max_devices", "Достигнахте максималния брой управлявани устройства."),
|
||||||
|
("Sync with recent sessions", ""),
|
||||||
|
("Sort tags", ""),
|
||||||
|
("Open connection in new tab", ""),
|
||||||
|
("Move tab to new window", ""),
|
||||||
|
("Can not be empty", ""),
|
||||||
|
("Already exists", ""),
|
||||||
("Change Password", "Промяна на паролата"),
|
("Change Password", "Промяна на паролата"),
|
||||||
("Refresh Password", "Обнови паролата"),
|
("Refresh Password", "Обнови паролата"),
|
||||||
|
("ID", ""),
|
||||||
("Grid View", "Мрежов изглед"),
|
("Grid View", "Мрежов изглед"),
|
||||||
("List View", "Списъчен изглед"),
|
("List View", "Списъчен изглед"),
|
||||||
|
("Select", ""),
|
||||||
("Toggle Tags", "Превключване на етикети"),
|
("Toggle Tags", "Превключване на етикети"),
|
||||||
("pull_ab_failed_tip", "Неуспешно опресняване на адресната книга"),
|
("pull_ab_failed_tip", "Неуспешно опресняване на адресната книга"),
|
||||||
("push_ab_failed_tip", "Неуспешно синхронизиране на адресната книга със сървъра"),
|
("push_ab_failed_tip", "Неуспешно синхронизиране на адресната книга със сървъра"),
|
||||||
@ -190,30 +533,60 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Primary Color", "Основен цвят"),
|
("Primary Color", "Основен цвят"),
|
||||||
("HSV Color", "HSV цвят"),
|
("HSV Color", "HSV цвят"),
|
||||||
("Installation Successful!", "Успешна инсталация!"),
|
("Installation Successful!", "Успешна инсталация!"),
|
||||||
|
("Installation failed!", ""),
|
||||||
|
("Reverse mouse wheel", ""),
|
||||||
|
("{} sessions", ""),
|
||||||
("scam_title", "Възможно е да сте ИЗМАМЕНИ!"),
|
("scam_title", "Възможно е да сте ИЗМАМЕНИ!"),
|
||||||
("scam_text1", "Ако разговаряте по телефона с някой, когото НЕ ПОЗНАВАТЕ и НЯМАТЕ ДОВЕРИЕ, който ви е помолил да използвате RustDesk и да стартирате услугата, не продължавайте и затворете незабавно."),
|
("scam_text1", "Ако разговаряте по телефона с някой, когото НЕ ПОЗНАВАТЕ и НЯМАТЕ ДОВЕРИЕ, който ви е помолил да използвате RustDesk и да стартирате услугата, не продължавайте и затворете незабавно."),
|
||||||
("scam_text2", "Те вероятно са измамник, който се опитва да открадне вашите пари или друга лична информация."),
|
("scam_text2", "Те вероятно са измамник, който се опитва да открадне вашите пари или друга лична информация."),
|
||||||
|
("Don't show again", ""),
|
||||||
|
("I Agree", ""),
|
||||||
|
("Decline", ""),
|
||||||
|
("Timeout in minutes", ""),
|
||||||
("auto_disconnect_option_tip", "Автоматично затваряне на входящите сесии при неактивност на потребителя"),
|
("auto_disconnect_option_tip", "Автоматично затваряне на входящите сесии при неактивност на потребителя"),
|
||||||
("Connection failed due to inactivity", "Автоматично прекъсване на връзката поради неактивност"),
|
("Connection failed due to inactivity", "Автоматично прекъсване на връзката поради неактивност"),
|
||||||
|
("Check for software update on startup", ""),
|
||||||
("upgrade_rustdesk_server_pro_to_{}_tip", "Моля обновете RustDesk Server Pro на версия {} или по-нова!"),
|
("upgrade_rustdesk_server_pro_to_{}_tip", "Моля обновете RustDesk Server Pro на версия {} или по-нова!"),
|
||||||
("pull_group_failed_tip", "Неуспешно опресняване на групата"),
|
("pull_group_failed_tip", "Неуспешно опресняване на групата"),
|
||||||
("doc_fix_wayland", "https://rustdesk.com/docs/en/manual/linux/#x11-required"),
|
("Filter by intersection", ""),
|
||||||
|
("Remove wallpaper during incoming sessions", ""),
|
||||||
|
("Test", ""),
|
||||||
("display_is_plugged_out_msg", "Дисплеят е изключен, превключете на първия монитор."),
|
("display_is_plugged_out_msg", "Дисплеят е изключен, превключете на първия монитор."),
|
||||||
|
("No displays", ""),
|
||||||
("elevated_switch_display_msg", "Превключете към основния монитор, защото множество монитори не се поддържат в потребителски режим с повишени права."),
|
("elevated_switch_display_msg", "Превключете към основния монитор, защото множество монитори не се поддържат в потребителски режим с повишени права."),
|
||||||
|
("Open in new window", ""),
|
||||||
|
("Show displays as individual windows", ""),
|
||||||
|
("Use all my displays for the remote session", ""),
|
||||||
("selinux_tip", "SELinux е активиран на вашето устройство, което може да попречи на RustDesk да работи правилно като контролирана страна."),
|
("selinux_tip", "SELinux е активиран на вашето устройство, което може да попречи на RustDesk да работи правилно като контролирана страна."),
|
||||||
|
("Change view", ""),
|
||||||
|
("Big tiles", ""),
|
||||||
|
("Small tiles", ""),
|
||||||
|
("List", ""),
|
||||||
|
("Virtual display", ""),
|
||||||
|
("Plug out all", ""),
|
||||||
|
("True color (4:4:4)", ""),
|
||||||
|
("Enable blocking user input", ""),
|
||||||
("id_input_tip", "Можете да въведете ID, директен IP адрес или домейн с порт (<domain>:<port>).\nАко искате да получите достъп до устройство на друг сървър, моля, добавете адреса на сървъра (<id>@<server_address >?key=<key_value>), например\n9123456234@192.168.16.1:21117?key=5Qbwsde3unUcJBtrx9ZkvUmwFNoExHzpryHuPUdqlWM=.\nАко искате да получите достъп до устройство на обществен сървър, моля, въведете \"<id>@public\" , ключът не е необходим за публичен сървър"),
|
("id_input_tip", "Можете да въведете ID, директен IP адрес или домейн с порт (<domain>:<port>).\nАко искате да получите достъп до устройство на друг сървър, моля, добавете адреса на сървъра (<id>@<server_address >?key=<key_value>), например\n9123456234@192.168.16.1:21117?key=5Qbwsde3unUcJBtrx9ZkvUmwFNoExHzpryHuPUdqlWM=.\nАко искате да получите достъп до устройство на обществен сървър, моля, въведете \"<id>@public\" , ключът не е необходим за публичен сървър"),
|
||||||
("privacy_mode_impl_mag_tip", "Режим 1"),
|
("privacy_mode_impl_mag_tip", "Режим 1"),
|
||||||
("privacy_mode_impl_virtual_display_tip", "Режим 2"),
|
("privacy_mode_impl_virtual_display_tip", "Режим 2"),
|
||||||
|
("Enter privacy mode", ""),
|
||||||
|
("Exit privacy mode", ""),
|
||||||
("idd_not_support_under_win10_2004_tip", "Индиректен драйвер за дисплей не се поддържа. Изисква се Windows 10, версия 2004 или по-нова."),
|
("idd_not_support_under_win10_2004_tip", "Индиректен драйвер за дисплей не се поддържа. Изисква се Windows 10, версия 2004 или по-нова."),
|
||||||
("switch_display_elevated_connections_tip", "Превключването към неосновен дисплей не се поддържа в режим на потребител с повишени права, когато има множество връзки. Моля, опитайте отново след инсталация, ако искате да контролирате няколко дисплея."),
|
("switch_display_elevated_connections_tip", "Превключването към неосновен дисплей не се поддържа в режим на потребител с повишени права, когато има множество връзки. Моля, опитайте отново след инсталация, ако искате да контролирате няколко дисплея."),
|
||||||
("input_source_1_tip", "Входен източник 1"),
|
("input_source_1_tip", "Входен източник 1"),
|
||||||
("input_source_2_tip", "Входен източник 2"),
|
("input_source_2_tip", "Входен източник 2"),
|
||||||
("capture_display_elevated_connections_tip", "Заснемането на множество дисплеи не се поддържа в потребителския режим с повишени права. Моля, опитайте отново след инсталация, ако искате да контролирате няколко дисплея."),
|
("capture_display_elevated_connections_tip", "Заснемането на множество дисплеи не се поддържа в потребителския режим с повишени права. Моля, опитайте отново след инсталация, ако искате да контролирате няколко дисплея."),
|
||||||
|
("Swap control-command key", ""),
|
||||||
("swap-left-right-mouse", "Разменете левия и десния бутон на мишката"),
|
("swap-left-right-mouse", "Разменете левия и десния бутон на мишката"),
|
||||||
("2FA code", "Код за Двуфакторна удостоверяване"),
|
("2FA code", "Код за Двуфакторна удостоверяване"),
|
||||||
|
("More", ""),
|
||||||
("enable-2fa-title", "Активиране на двуфакторно удостоверяване"),
|
("enable-2fa-title", "Активиране на двуфакторно удостоверяване"),
|
||||||
("enable-2fa-desc", "Моля, настройте вашия удостоверител сега. Можете да използвате приложение за удостоверяване като Authy, Microsoft или Google Authenticator на вашия телефон или настолен компютър.\n\nСканирайте QR кода с вашето приложение и въведете кода, който приложението ви показва, за да активирате двуфакторно удостоверяване."),
|
("enable-2fa-desc", "Моля, настройте вашия удостоверител сега. Можете да използвате приложение за удостоверяване като Authy, Microsoft или Google Authenticator на вашия телефон или настолен компютър.\n\nСканирайте QR кода с вашето приложение и въведете кода, който приложението ви показва, за да активирате двуфакторно удостоверяване."),
|
||||||
("wrong-2fa-code", "е може да се потвърди кодът. Проверете дали настройките за код и локалното време са правилни"),
|
("wrong-2fa-code", "е може да се потвърди кодът. Проверете дали настройките за код и локалното време са правилни"),
|
||||||
("enter-2fa-title", "Двуфакторно удостоверяване"),
|
("enter-2fa-title", "Двуфакторно удостоверяване"),
|
||||||
|
("Email verification code must be 6 characters.", ""),
|
||||||
|
("2FA code must be 6 digits.", ""),
|
||||||
|
("Multiple Windows sessions found", ""),
|
||||||
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", "双重认证"),
|
("enter-2fa-title", "双重认证"),
|
||||||
("Email verification code must be 6 characters.", "Email 验证码必须是 6 个字符。"),
|
("Email verification code must be 6 characters.", "Email 验证码必须是 6 个字符。"),
|
||||||
("2FA code must be 6 digits.", "双重认证代码必须是 6 位数字。"),
|
("2FA code must be 6 digits.", "双重认证代码必须是 6 位数字。"),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", "发现多个 Windows 会话"),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", "请选择您要连接的会话"),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", "Dvoufaktorová autentizace"),
|
("enter-2fa-title", "Dvoufaktorová autentizace"),
|
||||||
("Email verification code must be 6 characters.", "E-mailový ověřovací kód musí mít 6 znaků."),
|
("Email verification code must be 6 characters.", "E-mailový ověřovací kód musí mít 6 znaků."),
|
||||||
("2FA code must be 6 digits.", "Kód 2FA musí mít 6 číslic."),
|
("2FA code must be 6 digits.", "Kód 2FA musí mít 6 číslic."),
|
||||||
("Multiple active user sessions found", "Bylo nalezeno několik aktivních uživatelských relací"),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", "Vyberte prosím uživatele, ke kterému se chcete připojit"),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", "Zwei-Faktor-Authentifizierung"),
|
("enter-2fa-title", "Zwei-Faktor-Authentifizierung"),
|
||||||
("Email verification code must be 6 characters.", "Der E-Mail-Verifizierungscode muss aus 6 Zeichen bestehen."),
|
("Email verification code must be 6 characters.", "Der E-Mail-Verifizierungscode muss aus 6 Zeichen bestehen."),
|
||||||
("2FA code must be 6 digits.", "Der 2FA-Code muss 6 Ziffern haben."),
|
("2FA code must be 6 digits.", "Der 2FA-Code muss 6 Ziffern haben."),
|
||||||
("Multiple active user sessions found", "Mehrere aktive Benutzersitzungen gefunden"),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", "Bitte wählen Sie den Benutzer, mit dem Sie sich verbinden möchten"),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", "Autenticación en dos pasos"),
|
("enter-2fa-title", "Autenticación en dos pasos"),
|
||||||
("Email verification code must be 6 characters.", "El código de verificación por mail debe tener 6 caracteres"),
|
("Email verification code must be 6 characters.", "El código de verificación por mail debe tener 6 caracteres"),
|
||||||
("2FA code must be 6 digits.", "El cóidigo 2FA debe tener 6 dígitos"),
|
("2FA code must be 6 digits.", "El cóidigo 2FA debe tener 6 dígitos"),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", "احراز هویت دو مرحله ای"),
|
("enter-2fa-title", "احراز هویت دو مرحله ای"),
|
||||||
("Email verification code must be 6 characters.", "کد تأیید ایمیل باید 6 کاراکتر باشد"),
|
("Email verification code must be 6 characters.", "کد تأیید ایمیل باید 6 کاراکتر باشد"),
|
||||||
("2FA code must be 6 digits.", "کد احراز هویت دو مرحله ای باید 6 رقم باشد"),
|
("2FA code must be 6 digits.", "کد احراز هویت دو مرحله ای باید 6 رقم باشد"),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", "Autenticazione a due fattori"),
|
("enter-2fa-title", "Autenticazione a due fattori"),
|
||||||
("Email verification code must be 6 characters.", "Il codice di verifica email deve contenere 6 caratteri."),
|
("Email verification code must be 6 characters.", "Il codice di verifica email deve contenere 6 caratteri."),
|
||||||
("2FA code must be 6 digits.", "Il codice 2FA deve essere composto da 6 cifre."),
|
("2FA code must be 6 digits.", "Il codice 2FA deve essere composto da 6 cifre."),
|
||||||
("Multiple active user sessions found", "Rilevate sessioni utente attive multiple"),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", "Seleziona l'utente a cui connetterti"),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", "Divu faktoru autentifikācija"),
|
("enter-2fa-title", "Divu faktoru autentifikācija"),
|
||||||
("Email verification code must be 6 characters.", "E-pasta verifikācijas kodam jābūt ar 6 rakstzīmēm."),
|
("Email verification code must be 6 characters.", "E-pasta verifikācijas kodam jābūt ar 6 rakstzīmēm."),
|
||||||
("2FA code must be 6 digits.", "2FA kodam ir jābūt ar 6 cipariem."),
|
("2FA code must be 6 digits.", "2FA kodam ir jābūt ar 6 cipariem."),
|
||||||
("Multiple active user sessions found", "Atrastas vairākas aktīvas lietotāju sesijas"),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", "Lūdzu, atlasiet lietotāju, ar kuru vēlaties izveidot savienojumu"),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -292,6 +292,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Overwrite", "Overschrijven"),
|
("Overwrite", "Overschrijven"),
|
||||||
("This file exists, skip or overwrite this file?", "Dit bestand bestaat reeds, overslaan of overschrijven?"),
|
("This file exists, skip or overwrite this file?", "Dit bestand bestaat reeds, overslaan of overschrijven?"),
|
||||||
("Quit", "Afsluiten"),
|
("Quit", "Afsluiten"),
|
||||||
|
("Help", ""),
|
||||||
("Failed", "Mislukt"),
|
("Failed", "Mislukt"),
|
||||||
("Succeeded", "Geslaagd"),
|
("Succeeded", "Geslaagd"),
|
||||||
("Someone turns on privacy mode, exit", "Iemand schakelt privacymodus in, afsluiten"),
|
("Someone turns on privacy mode, exit", "Iemand schakelt privacymodus in, afsluiten"),
|
||||||
@ -585,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", "geef-2fa-titel in"),
|
("enter-2fa-title", "geef-2fa-titel in"),
|
||||||
("Email verification code must be 6 characters.", "E-mailverificatiecode moet 6 tekens lang zijn."),
|
("Email verification code must be 6 characters.", "E-mailverificatiecode moet 6 tekens lang zijn."),
|
||||||
("2FA code must be 6 digits.", "2FA-code moet 6 cijfers lang zijn."),
|
("2FA code must be 6 digits.", "2FA-code moet 6 cijfers lang zijn."),
|
||||||
("Multiple active user sessions found", "Meerdere actieve gebruikerssessies gevonden"),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", "Selecteer de gebruiker waarmee je verbinding wilt maken"),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", "Autoryzacja dwuskładnikowa"),
|
("enter-2fa-title", "Autoryzacja dwuskładnikowa"),
|
||||||
("Email verification code must be 6 characters.", "Kod weryfikacyjny wysłany e-mailem musi mieć 6 znaków."),
|
("Email verification code must be 6 characters.", "Kod weryfikacyjny wysłany e-mailem musi mieć 6 znaków."),
|
||||||
("2FA code must be 6 digits.", "Kod 2FA musi zawierać 6 cyfr."),
|
("2FA code must be 6 digits.", "Kod 2FA musi zawierać 6 cyfr."),
|
||||||
("Multiple active user sessions found", "Znaleziono wiele aktywnych sesji użytkownika"),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", "Wybierz użytkownika, z którym chcesz się połączyć"),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", "Двухфакторная аутентификация"),
|
("enter-2fa-title", "Двухфакторная аутентификация"),
|
||||||
("Email verification code must be 6 characters.", "Код подтверждения электронной почты должен состоять из 6 символов."),
|
("Email verification code must be 6 characters.", "Код подтверждения электронной почты должен состоять из 6 символов."),
|
||||||
("2FA code must be 6 digits.", "Код двухфакторной аутентификации должен состоять из 6 цифр."),
|
("2FA code must be 6 digits.", "Код двухфакторной аутентификации должен состоять из 6 цифр."),
|
||||||
("Multiple active user sessions found", "Обнаружено несколько активных пользовательских сеансов"),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", "Выберите пользователя, к которому хотите подключиться"),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", "Dvojfaktorové overenie"),
|
("enter-2fa-title", "Dvojfaktorové overenie"),
|
||||||
("Email verification code must be 6 characters.", "Overovací kód e-mailu musí mať 6 znakov."),
|
("Email verification code must be 6 characters.", "Overovací kód e-mailu musí mať 6 znakov."),
|
||||||
("2FA code must be 6 digits.", "Kód 2FA musí obsahovať 6 číslic."),
|
("2FA code must be 6 digits.", "Kód 2FA musí obsahovať 6 číslic."),
|
||||||
("Multiple active user sessions found", "Našlo sa viacero aktívnych používateľských relácií"),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", "Vyberte používateľa ku ktorému sa chcete pripojiť"),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", "二步驟驗證"),
|
("enter-2fa-title", "二步驟驗證"),
|
||||||
("Email verification code must be 6 characters.", "Email 驗證碼必須是 6 個字元。"),
|
("Email verification code must be 6 characters.", "Email 驗證碼必須是 6 個字元。"),
|
||||||
("2FA code must be 6 digits.", "二步驟驗證碼必須是 6 位數字。"),
|
("2FA code must be 6 digits.", "二步驟驗證碼必須是 6 位數字。"),
|
||||||
("Multiple active user sessions found", "發現多個使用者工作階段"),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", "請選擇您想要連接的使用者"),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("enter-2fa-title", ""),
|
("enter-2fa-title", ""),
|
||||||
("Email verification code must be 6 characters.", ""),
|
("Email verification code must be 6 characters.", ""),
|
||||||
("2FA code must be 6 digits.", ""),
|
("2FA code must be 6 digits.", ""),
|
||||||
("Multiple active user sessions found", ""),
|
("Multiple Windows sessions found", ""),
|
||||||
("Please select the user you want to connect to", ""),
|
("Please select the session you want to connect to", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -746,6 +746,10 @@ pub fn get_current_process_session_id() -> Option<u32> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_active_username() -> String {
|
pub fn get_active_username() -> String {
|
||||||
|
// get_active_user will give console username higher priority
|
||||||
|
if let Some(name) = get_current_session_username() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
if !is_root() {
|
if !is_root() {
|
||||||
return crate::username();
|
return crate::username();
|
||||||
}
|
}
|
||||||
@ -767,6 +771,14 @@ pub fn get_active_username() -> String {
|
|||||||
.to_owned()
|
.to_owned()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_current_session_username() -> Option<String> {
|
||||||
|
let Some(sid) = get_current_process_session_id() else {
|
||||||
|
log::error!("get_current_process_session_id failed");
|
||||||
|
return None;
|
||||||
|
};
|
||||||
|
Some(get_session_username(sid))
|
||||||
|
}
|
||||||
|
|
||||||
fn get_session_username(session_id: u32) -> String {
|
fn get_session_username(session_id: u32) -> String {
|
||||||
extern "C" {
|
extern "C" {
|
||||||
fn get_session_user_info(path: *mut u16, n: u32, rdp: bool, session_id: u32) -> u32;
|
fn get_session_user_info(path: *mut u16, n: u32, rdp: bool, session_id: u32) -> u32;
|
||||||
@ -799,22 +811,24 @@ pub fn get_available_sessions(name: bool) -> Vec<WindowsSession> {
|
|||||||
};
|
};
|
||||||
let mut v: Vec<WindowsSession> = vec![];
|
let mut v: Vec<WindowsSession> = vec![];
|
||||||
// https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-wtsgetactiveconsolesessionid
|
// https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-wtsgetactiveconsolesessionid
|
||||||
let physical_console_session_id = unsafe { get_current_session(FALSE) };
|
let physical_console_sid = unsafe { get_current_session(FALSE) };
|
||||||
let physical_console_username = get_session_username(physical_console_session_id);
|
if physical_console_sid != u32::MAX {
|
||||||
let physical_console_name = if name {
|
let physical_console_name = if name {
|
||||||
if physical_console_username.is_empty() {
|
let physical_console_username = get_session_username(physical_console_sid);
|
||||||
"Console".to_owned()
|
if physical_console_username.is_empty() {
|
||||||
|
"Console".to_owned()
|
||||||
|
} else {
|
||||||
|
format!("Console:{physical_console_username}")
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
format!("Console:{physical_console_username}")
|
"".to_owned()
|
||||||
}
|
};
|
||||||
} else {
|
v.push(WindowsSession {
|
||||||
"".to_owned()
|
sid: physical_console_sid,
|
||||||
};
|
name: physical_console_name,
|
||||||
v.push(WindowsSession {
|
..Default::default()
|
||||||
sid: physical_console_session_id,
|
});
|
||||||
name: physical_console_name,
|
}
|
||||||
..Default::default()
|
|
||||||
});
|
|
||||||
// https://learn.microsoft.com/en-us/previous-versions//cc722458(v=technet.10)?redirectedfrom=MSDN
|
// https://learn.microsoft.com/en-us/previous-versions//cc722458(v=technet.10)?redirectedfrom=MSDN
|
||||||
for type_session_id in station_session_id_array.split(",") {
|
for type_session_id in station_session_id_array.split(",") {
|
||||||
let split: Vec<_> = type_session_id.split(":").collect();
|
let split: Vec<_> = type_session_id.split(":").collect();
|
||||||
@ -867,11 +881,9 @@ pub fn get_active_user_home() -> Option<PathBuf> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_prelogin() -> bool {
|
pub fn is_prelogin() -> bool {
|
||||||
let Some(sid) = get_current_process_session_id() else {
|
let Some(username) = get_current_session_username() else {
|
||||||
log::error!("get_current_process_session_id failed");
|
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
let username = get_session_username(sid);
|
|
||||||
username.is_empty() || username == "SYSTEM"
|
username.is_empty() || username == "SYSTEM"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2565,6 +2577,9 @@ impl WallPaperRemover {
|
|||||||
// https://superuser.com/questions/1218413/write-to-current-users-registry-through-a-different-admin-account
|
// https://superuser.com/questions/1218413/write-to-current-users-registry-through-a-different-admin-account
|
||||||
let (hkcu, sid) = if is_root() {
|
let (hkcu, sid) = if is_root() {
|
||||||
let username = get_active_username();
|
let username = get_active_username();
|
||||||
|
if username.is_empty() {
|
||||||
|
bail!("failed to get username");
|
||||||
|
}
|
||||||
let sid = get_sid_of_user(&username)?;
|
let sid = get_sid_of_user(&username)?;
|
||||||
log::info!("username: {username}, sid: {sid}");
|
log::info!("username: {username}, sid: {sid}");
|
||||||
(RegKey::predef(HKEY_USERS), format!("{}\\", sid))
|
(RegKey::predef(HKEY_USERS), format!("{}\\", sid))
|
||||||
|
@ -237,8 +237,8 @@ pub struct Connection {
|
|||||||
file_remove_log_control: FileRemoveLogControl,
|
file_remove_log_control: FileRemoveLogControl,
|
||||||
#[cfg(feature = "gpucodec")]
|
#[cfg(feature = "gpucodec")]
|
||||||
supported_encoding_flag: (bool, Option<bool>),
|
supported_encoding_flag: (bool, Option<bool>),
|
||||||
need_sub_remote_service: bool,
|
services_subed: bool,
|
||||||
remote_service_subed: bool,
|
delayed_read_dir: Option<(String, bool)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ConnInner {
|
impl ConnInner {
|
||||||
@ -386,8 +386,8 @@ impl Connection {
|
|||||||
file_remove_log_control: FileRemoveLogControl::new(id),
|
file_remove_log_control: FileRemoveLogControl::new(id),
|
||||||
#[cfg(feature = "gpucodec")]
|
#[cfg(feature = "gpucodec")]
|
||||||
supported_encoding_flag: (false, None),
|
supported_encoding_flag: (false, None),
|
||||||
need_sub_remote_service: false,
|
services_subed: false,
|
||||||
remote_service_subed: false,
|
delayed_read_dir: None,
|
||||||
};
|
};
|
||||||
let addr = hbb_common::try_into_v4(addr);
|
let addr = hbb_common::try_into_v4(addr);
|
||||||
if !conn.on_open(addr).await {
|
if !conn.on_open(addr).await {
|
||||||
@ -1194,9 +1194,9 @@ impl Connection {
|
|||||||
.into();
|
.into();
|
||||||
|
|
||||||
let mut sub_service = false;
|
let mut sub_service = false;
|
||||||
let mut delay_sub_service = false;
|
let mut wait_session_id_confirm = false;
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
self.handle_windows_specific_session(&mut pi, &mut delay_sub_service);
|
self.handle_windows_specific_session(&mut pi, &mut wait_session_id_confirm);
|
||||||
if self.file_transfer.is_some() {
|
if self.file_transfer.is_some() {
|
||||||
res.set_peer_info(pi);
|
res.set_peer_info(pi);
|
||||||
} else {
|
} else {
|
||||||
@ -1256,18 +1256,22 @@ impl Connection {
|
|||||||
} else {
|
} else {
|
||||||
""
|
""
|
||||||
};
|
};
|
||||||
self.read_dir(dir, show_hidden);
|
if !wait_session_id_confirm {
|
||||||
|
self.read_dir(dir, show_hidden);
|
||||||
|
} else {
|
||||||
|
self.delayed_read_dir = Some((dir.to_owned(), show_hidden));
|
||||||
|
}
|
||||||
} else if sub_service {
|
} else if sub_service {
|
||||||
self.need_sub_remote_service = true;
|
if !wait_session_id_confirm {
|
||||||
if !delay_sub_service {
|
self.try_sub_services();
|
||||||
self.check_sub_remote_services();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_sub_remote_services(&mut self) {
|
fn try_sub_services(&mut self) {
|
||||||
if self.need_sub_remote_service && !self.remote_service_subed {
|
let is_remote = self.file_transfer.is_none() && self.port_forward_socket.is_none();
|
||||||
self.remote_service_subed = true;
|
if is_remote && !self.services_subed {
|
||||||
|
self.services_subed = true;
|
||||||
if let Some(s) = self.server.upgrade() {
|
if let Some(s) = self.server.upgrade() {
|
||||||
let mut noperms = Vec::new();
|
let mut noperms = Vec::new();
|
||||||
if !self.peer_keyboard_enabled() && !self.show_remote_cursor {
|
if !self.peer_keyboard_enabled() && !self.show_remote_cursor {
|
||||||
@ -1293,7 +1297,11 @@ impl Connection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
fn handle_windows_specific_session(&mut self, pi: &mut PeerInfo, delay_sub_service: &mut bool) {
|
fn handle_windows_specific_session(
|
||||||
|
&mut self,
|
||||||
|
pi: &mut PeerInfo,
|
||||||
|
wait_session_id_confirm: &mut bool,
|
||||||
|
) {
|
||||||
let sessions = crate::platform::get_available_sessions(true);
|
let sessions = crate::platform::get_available_sessions(true);
|
||||||
let current_sid = crate::platform::get_current_process_session_id().unwrap_or_default();
|
let current_sid = crate::platform::get_current_process_session_id().unwrap_or_default();
|
||||||
if crate::platform::is_installed()
|
if crate::platform::is_installed()
|
||||||
@ -1301,7 +1309,8 @@ impl Connection {
|
|||||||
&& raii::AuthedConnID::remote_and_file_conn_count() == 1
|
&& raii::AuthedConnID::remote_and_file_conn_count() == 1
|
||||||
&& sessions.len() > 1
|
&& sessions.len() > 1
|
||||||
&& current_sid != 0
|
&& current_sid != 0
|
||||||
&& self.lr.option.support_windows_specific_session == BoolOption::Yes.into()
|
&& (get_version_number(&self.lr.version) > get_version_number("1.2.4")
|
||||||
|
|| self.lr.option.support_windows_specific_session == BoolOption::Yes.into())
|
||||||
{
|
{
|
||||||
pi.windows_sessions = Some(WindowsSessions {
|
pi.windows_sessions = Some(WindowsSessions {
|
||||||
sessions,
|
sessions,
|
||||||
@ -1309,7 +1318,7 @@ impl Connection {
|
|||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.into();
|
.into();
|
||||||
*delay_sub_service = true;
|
*wait_session_id_confirm = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1976,6 +1985,12 @@ impl Connection {
|
|||||||
}
|
}
|
||||||
Some(message::Union::FileAction(fa)) => {
|
Some(message::Union::FileAction(fa)) => {
|
||||||
if self.file_transfer.is_some() {
|
if self.file_transfer.is_some() {
|
||||||
|
if self.delayed_read_dir.is_some() {
|
||||||
|
if let Some(file_action::Union::ReadDir(rd)) = fa.union {
|
||||||
|
self.delayed_read_dir = Some((rd.path, rd.include_hidden));
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
match fa.union {
|
match fa.union {
|
||||||
Some(file_action::Union::ReadDir(rd)) => {
|
Some(file_action::Union::ReadDir(rd)) => {
|
||||||
self.read_dir(&rd.path, rd.include_hidden);
|
self.read_dir(&rd.path, rd.include_hidden);
|
||||||
@ -2284,7 +2299,13 @@ impl Connection {
|
|||||||
});
|
});
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
self.check_sub_remote_services();
|
if self.file_transfer.is_some() {
|
||||||
|
if let Some((dir, show_hidden)) = self.delayed_read_dir.take() {
|
||||||
|
self.read_dir(&dir, show_hidden);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
self.try_sub_services();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
},
|
},
|
||||||
|
@ -460,7 +460,7 @@ function awake() {
|
|||||||
|
|
||||||
class MultipleSessionComponent extends Reactor.Component {
|
class MultipleSessionComponent extends Reactor.Component {
|
||||||
this var sessions = [];
|
this var sessions = [];
|
||||||
this var messageText = translate("Please select the user you want to connect to");
|
this var messageText = translate("Please select the session you want to connect to");
|
||||||
|
|
||||||
function this(params) {
|
function this(params) {
|
||||||
if (params && params.sessions) {
|
if (params && params.sessions) {
|
||||||
|
@ -530,7 +530,7 @@ handler.updateDisplays = function(v) {
|
|||||||
handler.setMultipleWindowsSession = function(sessions) {
|
handler.setMultipleWindowsSession = function(sessions) {
|
||||||
// It will be covered by other message box if the timer is not used,
|
// It will be covered by other message box if the timer is not used,
|
||||||
self.timer(1000ms, function() {
|
self.timer(1000ms, function() {
|
||||||
msgbox("multiple-sessions-nocancel", translate("Multiple active user sessions found"), <MultipleSessionComponent sessions={sessions} />, "", function(res) {
|
msgbox("multiple-sessions-nocancel", translate("Multiple Windows sessions found"), <MultipleSessionComponent sessions={sessions} />, "", function(res) {
|
||||||
if (res && res.sid) {
|
if (res && res.sid) {
|
||||||
handler.set_selected_windows_session_id("" + res.sid);
|
handler.set_selected_windows_session_id("" + res.sid);
|
||||||
}
|
}
|
||||||
|
@ -1023,6 +1023,7 @@ impl<T: InvokeUiSession> Session<T> {
|
|||||||
if true == force_relay {
|
if true == force_relay {
|
||||||
self.lc.write().unwrap().force_relay = true;
|
self.lc.write().unwrap().force_relay = true;
|
||||||
}
|
}
|
||||||
|
self.lc.write().unwrap().peer_info = None;
|
||||||
let mut lock = self.thread.lock().unwrap();
|
let mut lock = self.thread.lock().unwrap();
|
||||||
// No need to join the previous thread, because it will exit automatically.
|
// No need to join the previous thread, because it will exit automatically.
|
||||||
// And the previous thread will not change important states.
|
// And the previous thread will not change important states.
|
||||||
@ -1260,6 +1261,25 @@ impl<T: InvokeUiSession> Session<T> {
|
|||||||
let mut msg = Message::new();
|
let mut msg = Message::new();
|
||||||
msg.set_misc(misc);
|
msg.set_misc(misc);
|
||||||
self.send(Data::Message(msg));
|
self.send(Data::Message(msg));
|
||||||
|
let pi = self.lc.read().unwrap().peer_info.clone();
|
||||||
|
if let Some(pi) = pi {
|
||||||
|
if pi.windows_sessions.current_sid == sid {
|
||||||
|
if self.is_file_transfer() {
|
||||||
|
if pi.username.is_empty() {
|
||||||
|
self.on_error(
|
||||||
|
"No active console user logged on, please connect and logon first.",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
self.msgbox(
|
||||||
|
"success",
|
||||||
|
"Successful",
|
||||||
|
"Connected, waiting for image...",
|
||||||
|
"",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
log::error!("selected invalid sid: {}", sid);
|
log::error!("selected invalid sid: {}", sid);
|
||||||
}
|
}
|
||||||
@ -1371,7 +1391,7 @@ impl<T: InvokeUiSession> Interface for Session<T> {
|
|||||||
|
|
||||||
fn handle_peer_info(&self, mut pi: PeerInfo) {
|
fn handle_peer_info(&self, mut pi: PeerInfo) {
|
||||||
log::debug!("handle_peer_info :{:?}", pi);
|
log::debug!("handle_peer_info :{:?}", pi);
|
||||||
pi.username = self.lc.read().unwrap().get_username(&pi);
|
self.lc.write().unwrap().peer_info = Some(pi.clone());
|
||||||
if pi.current_display as usize >= pi.displays.len() {
|
if pi.current_display as usize >= pi.displays.len() {
|
||||||
pi.current_display = 0;
|
pi.current_display = 0;
|
||||||
}
|
}
|
||||||
@ -1379,7 +1399,7 @@ impl<T: InvokeUiSession> Interface for Session<T> {
|
|||||||
self.set_permission("restart", false);
|
self.set_permission("restart", false);
|
||||||
}
|
}
|
||||||
if self.is_file_transfer() {
|
if self.is_file_transfer() {
|
||||||
if pi.username.is_empty() {
|
if pi.username.is_empty() && pi.windows_sessions.sessions.is_empty() {
|
||||||
self.on_error("No active console user logged on, please connect and logon first.");
|
self.on_error("No active console user logged on, please connect and logon first.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user