diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 5edced1c0..ca80d526b 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -208,5 +208,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Download new version", "下载新版本"), ("Touch mode", "触屏模式"), ("Reset canvas", "重置画布"), + ("No permission of file transfer", "没有文件传输权限"), + ("Note", "备注"), ].iter().cloned().collect(); -} \ No newline at end of file +} diff --git a/src/lang/de.rs b/src/lang/de.rs index 2bc3ffbf4..9277b965d 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -208,5 +208,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Download new version", "Neue Version herunterladen."), ("Touch mode", "Berührungsmodus."), ("Reset canvas", "Anzeige zurücksetzen."), + ("No permission of file transfer", "Keine Erlaubnis zur Dateiübertragung"), + ("Note", "Notiz"), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 97a0befc2..7401aee39 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -209,7 +209,9 @@ lazy_static::lazy_static! { ("Socks5 Proxy", "Socks5 prokura servilo"), ("Add to Favorites", "Aldoni al la favorataj"), ("Remove from Favorites", "Forigi el la favorataj"), - ("Unremember Password", "Forgesi pasvorton") + ("Unremember Password", "Forgesi pasvorton"), + ("No permission of file transfer", "Neniu permeso de dosiertransigo"), + ("Note", "Notu"), ].iter().cloned().collect(); } - \ No newline at end of file + diff --git a/src/lang/fr.rs b/src/lang/fr.rs index e0c63fd92..b57f658a9 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -202,5 +202,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Download new version", "Télécharger la nouvelle version"), ("Touch mode", "Mode tactile"), ("Reset canvas", "Réinitialiser le canevas"), + ("No permission of file transfer", "Aucune autorisation de transfert de fichiers"), + ("Note", "Noter"), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index 6afc0bd84..9fad97cea 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -201,5 +201,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Download new version", "Scarica nuova versione"), ("Touch mode", "Modalità tocco"), ("Reset canvas", "Ripristina tela"), + ("No permission of file transfer", "Nessun permesso di trasferimento di file"), + ("Note", "Nota"), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index c6c483da3..77ba82a19 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -208,5 +208,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Download new version", "Загрузить новую версию"), ("Touch mode", "Сенсорный режим"), ("Reset canvas", "Сбросить холст"), + ("No permission of file transfer", "Нет разрешения на передачу файлов"), + ("Note", "Примечание"), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index f36f88a2f..9d07998e4 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -201,5 +201,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Download new version", "下載新版本"), ("Touch mode", "觸控模式"), ("Reset canvas", "重置畫布"), + ("No permission of file transfer", "無文件傳輸權限"), + ("Note", "備註"), ].iter().cloned().collect(); } diff --git a/src/ui/ab.tis b/src/ui/ab.tis index d43476ae2..eed861c12 100644 --- a/src/ui/ab.tis +++ b/src/ui/ab.tis @@ -14,6 +14,7 @@ function getSessionsStyle(type) { } var searchPatterns = {}; +var current_menu_peer_id = ''; class SearchBar: Reactor.Component { this var type = ""; @@ -177,7 +178,7 @@ class SessionList: Reactor.Component { } // https://sciter.com/forums/topic/replacecustomize-context-menu/ var menu = this.$(menu#remote-context); - menu.attributes["remote-id"] = id; + current_menu_peer_id = id; var conn = this.$(menu #connect); if (conn) { var alias = me.parent.parent.$(#alias); @@ -195,7 +196,7 @@ class SessionList: Reactor.Component { event click $(menu#remote-context li) (evt, me) { var action = me.id; - var id = me.parent.attributes["remote-id"]; + var id = current_menu_peer_id; if (action == "connect") { createNewConnect(id, "connect"); } else if (action == "transfer") { diff --git a/src/ui/common.tis b/src/ui/common.tis index 46fb1f7db..67fc879dc 100644 --- a/src/ui/common.tis +++ b/src/ui/common.tis @@ -247,7 +247,7 @@ function connecting() { handler.msgbox = function(type, title, text, hasRetry=false) { // crash somehow (when input wrong password), even with small time, for example, 1ms - self.timer(30ms, function() { msgbox(type, title, text, null, 180, 500, hasRetry); }); + self.timer(60ms, function() { msgbox(type, title, text, null, 180, 500, hasRetry); }); } var reconnectTimeout = 1000; diff --git a/src/ui/remote.rs b/src/ui/remote.rs index 8958f7232..bee747afe 100644 --- a/src/ui/remote.rs +++ b/src/ui/remote.rs @@ -1162,6 +1162,14 @@ impl Handler { #[inline] fn call(&self, func: &str, args: &[Value]) { + let r = self.read().unwrap(); + if let Some(ref e) = r.element { + allow_err!(e.call_method(func, args)); + } + } + + #[inline] + fn call2(&self, func: &str, args: &[Value]) { let r = self.read().unwrap(); if let Some(ref e) = r.element { allow_err!(e.call_method(func, &super::value_crash_workaround(args)[..])); @@ -1712,7 +1720,7 @@ impl Remote { Some(message::Union::video_frame(vf)) => { if !self.first_frame { self.first_frame = true; - self.handler.call("closeSuccess", &make_args!()); + self.handler.call2("closeSuccess", &make_args!()); self.handler.call("adaptSize", &make_args!()); } self.video_sender.send(MediaData::VideoFrame(vf)).ok(); @@ -1822,26 +1830,29 @@ impl Remote { SERVER_KEYBOARD_ENABLED = p.enabled; } self.handler - .call("setPermission", &make_args!("keyboard", p.enabled)); + .call2("setPermission", &make_args!("keyboard", p.enabled)); } Permission::Clipboard => { unsafe { SERVER_CLIPBOARD_ENABLED = p.enabled; } self.handler - .call("setPermission", &make_args!("clipboard", p.enabled)); + .call2("setPermission", &make_args!("clipboard", p.enabled)); } Permission::Audio => { self.handler - .call("setPermission", &make_args!("audio", p.enabled)); + .call2("setPermission", &make_args!("audio", p.enabled)); } Permission::File => { unsafe { SERVER_FILE_TRANSFER_ENABLED = p.enabled; } + if !p.enabled && self.handler.is_file_transfer() { + return true; + } self.check_clipboard_file_context(); self.handler - .call("setPermission", &make_args!("file", p.enabled)); + .call2("setPermission", &make_args!("file", p.enabled)); } } } @@ -1945,7 +1956,7 @@ fn make_fd(id: i32, entries: &Vec, only_count: bool) -> Value { impl Interface for Handler { fn msgbox(&self, msgtype: &str, title: &str, text: &str) { let retry = check_if_retry(msgtype, title, text); - self.call("msgbox_retry", &make_args!(msgtype, title, text, retry)); + self.call2("msgbox_retry", &make_args!(msgtype, title, text, retry)); } fn handle_login_error(&mut self, err: &str) -> bool { @@ -2003,7 +2014,7 @@ impl Interface for Handler { self.lc.write().unwrap().handle_peer_info(username, pi); self.call("updatePi", &make_args!(pi_sciter)); if self.is_file_transfer() { - self.call("closeSuccess", &make_args!()); + self.call2("closeSuccess", &make_args!()); } else if !self.is_port_forward() { self.msgbox("success", "Successful", "Connected, waiting for image..."); } diff --git a/src/ui/remote.tis b/src/ui/remote.tis index abb677281..291ed1847 100644 --- a/src/ui/remote.tis +++ b/src/ui/remote.tis @@ -444,12 +444,14 @@ function self.closing() { } handler.setPermission = function(name, enabled) { + self.timer(60ms, function() { if (name == "keyboard") keyboard_enabled = enabled; if (name == "audio") audio_enabled = enabled; if (name == "file") file_enabled = enabled; if (name == "clipboard") clipboard_enabled = enabled; input_blocked = false; header.update(); + }); } handler.closeSuccess = function() {