add mobile restart remote device

This commit is contained in:
csf 2022-07-30 22:13:38 +08:00
parent e53119a01a
commit eec26e5c70
4 changed files with 56 additions and 7 deletions

View File

@ -68,7 +68,7 @@ class FfiModel with ChangeNotifier {
void updatePermission(Map<String, dynamic> evt) {
evt.forEach((k, v) {
if (k == 'name') return;
if (k == 'name' || k.isEmpty) return;
_permissions[k] = v == 'true';
});
print('$_permissions');
@ -195,14 +195,17 @@ class FfiModel with ChangeNotifier {
wrongPasswordDialog(id);
} else if (type == 'input-password') {
enterPasswordDialog(id);
} else if (type == 'restarting') {
showMsgBox(type, title, text, false, hasCancel: false);
} else {
var hasRetry = evt['hasRetry'] == 'true';
showMsgBox(type, title, text, hasRetry);
}
}
void showMsgBox(String type, String title, String text, bool hasRetry) {
msgBox(type, title, text);
void showMsgBox(String type, String title, String text, bool hasRetry,
{bool? hasCancel}) {
msgBox(type, title, text, hasCancel: hasCancel);
_timer?.cancel();
if (hasRetry) {
_timer = Timer(Duration(seconds: _reconnects), () {

View File

@ -694,6 +694,13 @@ class _RemotePageState extends State<RemotePage> {
value: 'block-input'));
}
}
if (FFI.ffiModel.permissions["restart"] != false &&
(pi.platform == "Linux" ||
pi.platform == "Windows" ||
pi.platform == "Mac OS")) {
more.add(PopupMenuItem<String>(
child: Text(translate('Restart Remote Device')), value: 'restart'));
}
() async {
var value = await showMenu(
context: context,
@ -727,6 +734,8 @@ class _RemotePageState extends State<RemotePage> {
}
} else if (value == 'reset_canvas') {
FFI.cursorModel.reset();
} else if (value == 'restart') {
showRestartRemoteDevice(pi, widget.id);
}
}();
}
@ -1103,6 +1112,27 @@ void showOptions() {
}, clickMaskDismiss: true, backDismiss: true);
}
void showRestartRemoteDevice(PeerInfo pi, String id) async {
final res =
await DialogManager.show<bool>((setState, close) => CustomAlertDialog(
title: Row(children: [
Icon(Icons.warning_amber_sharp,
color: Colors.redAccent, size: 28),
SizedBox(width: 10),
Text(translate("Restart Remote Device")),
]),
content: Text(
"${translate('Are you sure you want to restart')} \n${pi.username}@${pi.hostname}($id) ?"),
actions: [
TextButton(
onPressed: () => close(), child: Text(translate("Cancel"))),
ElevatedButton(
onPressed: () => close(true), child: Text(translate("OK"))),
],
));
if (res == true) FFI.setByName('restart_remote_device');
}
void showSetOSPassword(bool login) {
final controller = TextEditingController();
var password = FFI.getByName('peer_option', "os-password");

View File

@ -88,6 +88,15 @@ impl Session {
}
}
pub fn restart_remote_device() {
if let Some(session) = SESSION.write().unwrap().as_ref() {
let mut lc = session.lc.write().unwrap();
lc.restarting_remote_device = true;
let msg = lc.restart_remote_device();
session.send(Data::Message(msg));
}
}
fn send(data: Data) {
if let Some(session) = SESSION.read().unwrap().as_ref() {
session.send(data);
@ -605,8 +614,13 @@ impl Connection {
}
}
} else {
log::info!("Reset by the peer");
session.msgbox("error", "Connection Error", "Reset by the peer");
if session.lc.read().unwrap().restarting_remote_device {
log::info!("Restart remote device");
session.msgbox("restarting", "Restarting Remote Device", "remote_restarting_tip");
} else {
log::info!("Reset by the peer");
session.msgbox("error", "Connection Error", "Reset by the peer");
}
break;
}
}
@ -876,6 +890,7 @@ impl Connection {
Permission::Keyboard => "keyboard",
Permission::Clipboard => "clipboard",
Permission::Audio => "audio",
Permission::Restart => "restart",
_ => "",
},
&p.enabled.to_string(),

View File

@ -629,8 +629,9 @@ impl Handler {
}
fn restart_remote_device(&mut self) {
self.lc.write().unwrap().restarting_remote_device = true;
let msg = self.lc.write().unwrap().restart_remote_device();
let mut lc = self.lc.write().unwrap();
lc.restarting_remote_device = true;
let msg = lc.restart_remote_device();
self.send(Data::Message(msg));
}