mirror of
https://github.com/weyne85/rustdesk.git
synced 2025-10-29 17:00:05 +00:00
@@ -10,9 +10,9 @@ import '../../common.dart';
|
||||
import '../../models/model.dart';
|
||||
import '../../models/platform_model.dart';
|
||||
|
||||
void clientClose(String id, OverlayDialogManager dialogManager) {
|
||||
msgBox(id, 'info', 'Close', 'Are you sure to close the connection?', '',
|
||||
dialogManager);
|
||||
void clientClose(SessionID sessionId, OverlayDialogManager dialogManager) {
|
||||
msgBox(sessionId, 'info', 'Close', 'Are you sure to close the connection?',
|
||||
'', dialogManager);
|
||||
}
|
||||
|
||||
abstract class ValidationRule {
|
||||
@@ -423,8 +423,8 @@ class _PasswordWidgetState extends State<PasswordWidget> {
|
||||
}
|
||||
}
|
||||
|
||||
void wrongPasswordDialog(
|
||||
String id, OverlayDialogManager dialogManager, type, title, text) {
|
||||
void wrongPasswordDialog(SessionID sessionId,
|
||||
OverlayDialogManager dialogManager, type, title, text) {
|
||||
dialogManager.dismissAll();
|
||||
dialogManager.show((setState, close, context) {
|
||||
cancel() {
|
||||
@@ -433,7 +433,7 @@ void wrongPasswordDialog(
|
||||
}
|
||||
|
||||
submit() {
|
||||
enterPasswordDialog(id, dialogManager);
|
||||
enterPasswordDialog(sessionId, dialogManager);
|
||||
}
|
||||
|
||||
return CustomAlertDialog(
|
||||
@@ -455,17 +455,19 @@ void wrongPasswordDialog(
|
||||
});
|
||||
}
|
||||
|
||||
void enterPasswordDialog(String id, OverlayDialogManager dialogManager) async {
|
||||
void enterPasswordDialog(
|
||||
SessionID sessionId, OverlayDialogManager dialogManager) async {
|
||||
await _connectDialog(
|
||||
id,
|
||||
sessionId,
|
||||
dialogManager,
|
||||
passwordController: TextEditingController(),
|
||||
);
|
||||
}
|
||||
|
||||
void enterUserLoginDialog(String id, OverlayDialogManager dialogManager) async {
|
||||
void enterUserLoginDialog(
|
||||
SessionID sessionId, OverlayDialogManager dialogManager) async {
|
||||
await _connectDialog(
|
||||
id,
|
||||
sessionId,
|
||||
dialogManager,
|
||||
osUsernameController: TextEditingController(),
|
||||
osPasswordController: TextEditingController(),
|
||||
@@ -473,9 +475,9 @@ void enterUserLoginDialog(String id, OverlayDialogManager dialogManager) async {
|
||||
}
|
||||
|
||||
void enterUserLoginAndPasswordDialog(
|
||||
String id, OverlayDialogManager dialogManager) async {
|
||||
SessionID sessionId, OverlayDialogManager dialogManager) async {
|
||||
await _connectDialog(
|
||||
id,
|
||||
sessionId,
|
||||
dialogManager,
|
||||
osUsernameController: TextEditingController(),
|
||||
osPasswordController: TextEditingController(),
|
||||
@@ -484,7 +486,7 @@ void enterUserLoginAndPasswordDialog(
|
||||
}
|
||||
|
||||
_connectDialog(
|
||||
String id,
|
||||
SessionID sessionId,
|
||||
OverlayDialogManager dialogManager, {
|
||||
TextEditingController? osUsernameController,
|
||||
TextEditingController? osPasswordController,
|
||||
@@ -492,11 +494,13 @@ _connectDialog(
|
||||
}) async {
|
||||
var rememberPassword = false;
|
||||
if (passwordController != null) {
|
||||
rememberPassword = await bind.sessionGetRemember(id: id) ?? false;
|
||||
rememberPassword =
|
||||
await bind.sessionGetRemember(sessionId: sessionId) ?? false;
|
||||
}
|
||||
var rememberAccount = false;
|
||||
if (osUsernameController != null) {
|
||||
rememberAccount = await bind.sessionGetRemember(id: id) ?? false;
|
||||
rememberAccount =
|
||||
await bind.sessionGetRemember(sessionId: sessionId) ?? false;
|
||||
}
|
||||
dialogManager.dismissAll();
|
||||
dialogManager.show((setState, close, context) {
|
||||
@@ -511,13 +515,15 @@ _connectDialog(
|
||||
final password = passwordController?.text.trim() ?? '';
|
||||
if (passwordController != null && password.isEmpty) return;
|
||||
if (rememberAccount) {
|
||||
bind.sessionPeerOption(id: id, name: 'os-username', value: osUsername);
|
||||
bind.sessionPeerOption(id: id, name: 'os-password', value: osPassword);
|
||||
bind.sessionPeerOption(
|
||||
sessionId: sessionId, name: 'os-username', value: osUsername);
|
||||
bind.sessionPeerOption(
|
||||
sessionId: sessionId, name: 'os-password', value: osPassword);
|
||||
}
|
||||
gFFI.login(
|
||||
osUsername,
|
||||
osPassword,
|
||||
id,
|
||||
sessionId,
|
||||
password,
|
||||
rememberPassword,
|
||||
);
|
||||
@@ -650,10 +656,10 @@ _connectDialog(
|
||||
}
|
||||
|
||||
void showWaitUacDialog(
|
||||
String id, OverlayDialogManager dialogManager, String type) {
|
||||
SessionID sessionId, OverlayDialogManager dialogManager, String type) {
|
||||
dialogManager.dismissAll();
|
||||
dialogManager.show(
|
||||
tag: '$id-wait-uac',
|
||||
tag: '$sessionId-wait-uac',
|
||||
(setState, close, context) => CustomAlertDialog(
|
||||
title: null,
|
||||
content: msgboxContent(type, 'Wait', 'wait_accept_uac_tip'),
|
||||
@@ -661,7 +667,8 @@ void showWaitUacDialog(
|
||||
}
|
||||
|
||||
// Another username && password dialog?
|
||||
void showRequestElevationDialog(String id, OverlayDialogManager dialogManager) {
|
||||
void showRequestElevationDialog(
|
||||
SessionID sessionId, OverlayDialogManager dialogManager) {
|
||||
RxString groupValue = ''.obs;
|
||||
RxString errUser = ''.obs;
|
||||
RxString errPwd = ''.obs;
|
||||
@@ -785,7 +792,8 @@ void showRequestElevationDialog(String id, OverlayDialogManager dialogManager) {
|
||||
);
|
||||
|
||||
dialogManager.dismissAll();
|
||||
dialogManager.show(tag: '$id-request-elevation', (setState, close, context) {
|
||||
dialogManager.show(tag: '$sessionId-request-elevation',
|
||||
(setState, close, context) {
|
||||
void submit() {
|
||||
if (groupValue.value == 'logon') {
|
||||
if (userController.text.isEmpty) {
|
||||
@@ -797,11 +805,11 @@ void showRequestElevationDialog(String id, OverlayDialogManager dialogManager) {
|
||||
return;
|
||||
}
|
||||
bind.sessionElevateWithLogon(
|
||||
id: id,
|
||||
sessionId: sessionId,
|
||||
username: userController.text,
|
||||
password: pwdController.text);
|
||||
} else {
|
||||
bind.sessionElevateDirect(id: id);
|
||||
bind.sessionElevateDirect(sessionId: sessionId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -828,20 +836,20 @@ void showRequestElevationDialog(String id, OverlayDialogManager dialogManager) {
|
||||
}
|
||||
|
||||
void showOnBlockDialog(
|
||||
String id,
|
||||
SessionID sessionId,
|
||||
String type,
|
||||
String title,
|
||||
String text,
|
||||
OverlayDialogManager dialogManager,
|
||||
) {
|
||||
if (dialogManager.existing('$id-wait-uac') ||
|
||||
dialogManager.existing('$id-request-elevation')) {
|
||||
if (dialogManager.existing('$sessionId-wait-uac') ||
|
||||
dialogManager.existing('$sessionId-request-elevation')) {
|
||||
return;
|
||||
}
|
||||
dialogManager.show(tag: '$id-$type', (setState, close, context) {
|
||||
dialogManager.show(tag: '$sessionId-$type', (setState, close, context) {
|
||||
void submit() {
|
||||
close();
|
||||
showRequestElevationDialog(id, dialogManager);
|
||||
showRequestElevationDialog(sessionId, dialogManager);
|
||||
}
|
||||
|
||||
return CustomAlertDialog(
|
||||
@@ -858,12 +866,12 @@ void showOnBlockDialog(
|
||||
});
|
||||
}
|
||||
|
||||
void showElevationError(String id, String type, String title, String text,
|
||||
OverlayDialogManager dialogManager) {
|
||||
dialogManager.show(tag: '$id-$type', (setState, close, context) {
|
||||
void showElevationError(SessionID sessionId, String type, String title,
|
||||
String text, OverlayDialogManager dialogManager) {
|
||||
dialogManager.show(tag: '$sessionId-$type', (setState, close, context) {
|
||||
void submit() {
|
||||
close();
|
||||
showRequestElevationDialog(id, dialogManager);
|
||||
showRequestElevationDialog(sessionId, dialogManager);
|
||||
}
|
||||
|
||||
return CustomAlertDialog(
|
||||
@@ -881,8 +889,8 @@ void showElevationError(String id, String type, String title, String text,
|
||||
});
|
||||
}
|
||||
|
||||
void showWaitAcceptDialog(String id, String type, String title, String text,
|
||||
OverlayDialogManager dialogManager) {
|
||||
void showWaitAcceptDialog(SessionID sessionId, String type, String title,
|
||||
String text, OverlayDialogManager dialogManager) {
|
||||
dialogManager.dismissAll();
|
||||
dialogManager.show((setState, close, context) {
|
||||
onCancel() {
|
||||
@@ -900,8 +908,8 @@ void showWaitAcceptDialog(String id, String type, String title, String text,
|
||||
});
|
||||
}
|
||||
|
||||
void showRestartRemoteDevice(
|
||||
PeerInfo pi, String id, OverlayDialogManager dialogManager) async {
|
||||
void showRestartRemoteDevice(PeerInfo pi, String id, SessionID sessionId,
|
||||
OverlayDialogManager dialogManager) async {
|
||||
final res = await dialogManager
|
||||
.show<bool>((setState, close, context) => CustomAlertDialog(
|
||||
title: Row(children: [
|
||||
@@ -928,26 +936,33 @@ void showRestartRemoteDevice(
|
||||
onCancel: close,
|
||||
onSubmit: () => close(true),
|
||||
));
|
||||
if (res == true) bind.sessionRestartRemoteDevice(id: id);
|
||||
if (res == true) bind.sessionRestartRemoteDevice(sessionId: sessionId);
|
||||
}
|
||||
|
||||
showSetOSPassword(
|
||||
String id,
|
||||
SessionID sessionId,
|
||||
bool login,
|
||||
OverlayDialogManager dialogManager,
|
||||
) async {
|
||||
final controller = TextEditingController();
|
||||
var password = await bind.sessionGetOption(id: id, arg: 'os-password') ?? '';
|
||||
var autoLogin = await bind.sessionGetOption(id: id, arg: 'auto-login') != '';
|
||||
var password =
|
||||
await bind.sessionGetOption(sessionId: sessionId, arg: 'os-password') ??
|
||||
'';
|
||||
var autoLogin =
|
||||
await bind.sessionGetOption(sessionId: sessionId, arg: 'auto-login') !=
|
||||
'';
|
||||
controller.text = password;
|
||||
dialogManager.show((setState, close, context) {
|
||||
submit() {
|
||||
var text = controller.text.trim();
|
||||
bind.sessionPeerOption(id: id, name: 'os-password', value: text);
|
||||
bind.sessionPeerOption(
|
||||
id: id, name: 'auto-login', value: autoLogin ? 'Y' : '');
|
||||
sessionId: sessionId, name: 'os-password', value: text);
|
||||
bind.sessionPeerOption(
|
||||
sessionId: sessionId,
|
||||
name: 'auto-login',
|
||||
value: autoLogin ? 'Y' : '');
|
||||
if (text != '' && login) {
|
||||
bind.sessionInputOsPassword(id: id, value: text);
|
||||
bind.sessionInputOsPassword(sessionId: sessionId, value: text);
|
||||
}
|
||||
close();
|
||||
}
|
||||
@@ -999,21 +1014,27 @@ showSetOSPassword(
|
||||
}
|
||||
|
||||
showSetOSAccount(
|
||||
String id,
|
||||
SessionID sessionId,
|
||||
OverlayDialogManager dialogManager,
|
||||
) async {
|
||||
final usernameController = TextEditingController();
|
||||
final passwdController = TextEditingController();
|
||||
var username = await bind.sessionGetOption(id: id, arg: 'os-username') ?? '';
|
||||
var password = await bind.sessionGetOption(id: id, arg: 'os-password') ?? '';
|
||||
var username =
|
||||
await bind.sessionGetOption(sessionId: sessionId, arg: 'os-username') ??
|
||||
'';
|
||||
var password =
|
||||
await bind.sessionGetOption(sessionId: sessionId, arg: 'os-password') ??
|
||||
'';
|
||||
usernameController.text = username;
|
||||
passwdController.text = password;
|
||||
dialogManager.show((setState, close, context) {
|
||||
submit() {
|
||||
final username = usernameController.text.trim();
|
||||
final password = usernameController.text.trim();
|
||||
bind.sessionPeerOption(id: id, name: 'os-username', value: username);
|
||||
bind.sessionPeerOption(id: id, name: 'os-password', value: password);
|
||||
bind.sessionPeerOption(
|
||||
sessionId: sessionId, name: 'os-username', value: username);
|
||||
bind.sessionPeerOption(
|
||||
sessionId: sessionId, name: 'os-password', value: password);
|
||||
close();
|
||||
}
|
||||
|
||||
@@ -1077,13 +1098,13 @@ showSetOSAccount(
|
||||
});
|
||||
}
|
||||
|
||||
showAuditDialog(String id, dialogManager) async {
|
||||
showAuditDialog(SessionID sessionId, dialogManager) async {
|
||||
final controller = TextEditingController();
|
||||
dialogManager.show((setState, close) {
|
||||
submit() {
|
||||
var text = controller.text.trim();
|
||||
if (text != '') {
|
||||
bind.sessionSendNote(id: id, note: text);
|
||||
bind.sessionSendNote(sessionId: sessionId, note: text);
|
||||
}
|
||||
close();
|
||||
}
|
||||
@@ -1139,10 +1160,10 @@ showAuditDialog(String id, dialogManager) async {
|
||||
}
|
||||
|
||||
void showConfirmSwitchSidesDialog(
|
||||
String id, OverlayDialogManager dialogManager) async {
|
||||
SessionID sessionId, String id, OverlayDialogManager dialogManager) async {
|
||||
dialogManager.show((setState, close, context) {
|
||||
submit() async {
|
||||
await bind.sessionSwitchSides(id: id);
|
||||
await bind.sessionSwitchSides(sessionId: sessionId);
|
||||
closeConnection(id: id);
|
||||
}
|
||||
|
||||
@@ -1159,7 +1180,7 @@ void showConfirmSwitchSidesDialog(
|
||||
});
|
||||
}
|
||||
|
||||
customImageQualityDialog(String id, FFI ffi) async {
|
||||
customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async {
|
||||
double qualityInitValue = 50;
|
||||
double fpsInitValue = 30;
|
||||
bool qualitySet = false;
|
||||
@@ -1167,20 +1188,22 @@ customImageQualityDialog(String id, FFI ffi) async {
|
||||
setCustomValues({double? quality, double? fps}) async {
|
||||
if (quality != null) {
|
||||
qualitySet = true;
|
||||
await bind.sessionSetCustomImageQuality(id: id, value: quality.toInt());
|
||||
await bind.sessionSetCustomImageQuality(
|
||||
sessionId: sessionId, value: quality.toInt());
|
||||
}
|
||||
if (fps != null) {
|
||||
fpsSet = true;
|
||||
await bind.sessionSetCustomFps(id: id, fps: fps.toInt());
|
||||
await bind.sessionSetCustomFps(sessionId: sessionId, fps: fps.toInt());
|
||||
}
|
||||
if (!qualitySet) {
|
||||
qualitySet = true;
|
||||
await bind.sessionSetCustomImageQuality(
|
||||
id: id, value: qualityInitValue.toInt());
|
||||
sessionId: sessionId, value: qualityInitValue.toInt());
|
||||
}
|
||||
if (!fpsSet) {
|
||||
fpsSet = true;
|
||||
await bind.sessionSetCustomFps(id: id, fps: fpsInitValue.toInt());
|
||||
await bind.sessionSetCustomFps(
|
||||
sessionId: sessionId, fps: fpsInitValue.toInt());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1190,7 +1213,7 @@ customImageQualityDialog(String id, FFI ffi) async {
|
||||
});
|
||||
|
||||
// quality
|
||||
final quality = await bind.sessionGetCustomImageQuality(id: id);
|
||||
final quality = await bind.sessionGetCustomImageQuality(sessionId: sessionId);
|
||||
qualityInitValue =
|
||||
quality != null && quality.isNotEmpty ? quality[0].toDouble() : 50.0;
|
||||
const qualityMinValue = 10.0;
|
||||
@@ -1238,7 +1261,8 @@ customImageQualityDialog(String id, FFI ffi) async {
|
||||
],
|
||||
));
|
||||
// fps
|
||||
final fpsOption = await bind.sessionGetOption(id: id, arg: 'custom-fps');
|
||||
final fpsOption =
|
||||
await bind.sessionGetOption(sessionId: sessionId, arg: 'custom-fps');
|
||||
fpsInitValue = fpsOption == null ? 30 : double.tryParse(fpsOption) ?? 30;
|
||||
if (fpsInitValue < 5 || fpsInitValue > 120) {
|
||||
fpsInitValue = 30;
|
||||
|
||||
@@ -735,7 +735,6 @@ abstract class BasePeerCard extends StatelessWidget {
|
||||
}
|
||||
await bind.mainRemovePeer(id: id);
|
||||
}
|
||||
removePreference(id);
|
||||
await reloadFunc();
|
||||
close();
|
||||
}
|
||||
|
||||
@@ -48,6 +48,7 @@ List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) {
|
||||
final ffiModel = ffi.ffiModel;
|
||||
final pi = ffiModel.pi;
|
||||
final perms = ffiModel.permissions;
|
||||
final sessionId = ffi.sessionId;
|
||||
|
||||
List<TTextMenu> v = [];
|
||||
// elevation
|
||||
@@ -55,7 +56,8 @@ List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) {
|
||||
v.add(
|
||||
TTextMenu(
|
||||
child: Text(translate('Request Elevation')),
|
||||
onPressed: () => showRequestElevationDialog(id, ffi.dialogManager)),
|
||||
onPressed: () =>
|
||||
showRequestElevationDialog(sessionId, ffi.dialogManager)),
|
||||
);
|
||||
}
|
||||
// osAccount / osPassword
|
||||
@@ -70,8 +72,8 @@ List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) {
|
||||
]),
|
||||
trailingIcon: Transform.scale(scale: 0.8, child: Icon(Icons.edit)),
|
||||
onPressed: () => pi.is_headless
|
||||
? showSetOSAccount(id, ffi.dialogManager)
|
||||
: showSetOSPassword(id, false, ffi.dialogManager)),
|
||||
? showSetOSAccount(sessionId, ffi.dialogManager)
|
||||
: showSetOSPassword(sessionId, false, ffi.dialogManager)),
|
||||
);
|
||||
// paste
|
||||
if (isMobile && perms['keyboard'] != false && perms['clipboard'] != false) {
|
||||
@@ -80,7 +82,8 @@ List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) {
|
||||
onPressed: () async {
|
||||
ClipboardData? data = await Clipboard.getData(Clipboard.kTextPlain);
|
||||
if (data != null && data.text != null) {
|
||||
bind.sessionInputString(id: id, value: data.text ?? "");
|
||||
bind.sessionInputString(
|
||||
sessionId: sessionId, value: data.text ?? "");
|
||||
}
|
||||
}));
|
||||
}
|
||||
@@ -107,11 +110,13 @@ List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) {
|
||||
);
|
||||
}
|
||||
// note
|
||||
if (bind.sessionGetAuditServerSync(id: id, typ: "conn").isNotEmpty) {
|
||||
if (bind
|
||||
.sessionGetAuditServerSync(sessionId: sessionId, typ: "conn")
|
||||
.isNotEmpty) {
|
||||
v.add(
|
||||
TTextMenu(
|
||||
child: Text(translate('Note')),
|
||||
onPressed: () => showAuditDialog(id, ffi.dialogManager)),
|
||||
onPressed: () => showAuditDialog(sessionId, ffi.dialogManager)),
|
||||
);
|
||||
}
|
||||
// divider
|
||||
@@ -125,7 +130,7 @@ List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) {
|
||||
v.add(
|
||||
TTextMenu(
|
||||
child: Text('${translate("Insert")} Ctrl + Alt + Del'),
|
||||
onPressed: () => bind.sessionCtrlAltDel(id: id)),
|
||||
onPressed: () => bind.sessionCtrlAltDel(sessionId: sessionId)),
|
||||
);
|
||||
}
|
||||
// restart
|
||||
@@ -136,7 +141,8 @@ List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) {
|
||||
v.add(
|
||||
TTextMenu(
|
||||
child: Text(translate('Restart Remote Device')),
|
||||
onPressed: () => showRestartRemoteDevice(pi, id, ffi.dialogManager)),
|
||||
onPressed: () =>
|
||||
showRestartRemoteDevice(pi, id, sessionId, ffi.dialogManager)),
|
||||
);
|
||||
}
|
||||
// insertLock
|
||||
@@ -144,7 +150,7 @@ List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) {
|
||||
v.add(
|
||||
TTextMenu(
|
||||
child: Text(translate('Insert Lock')),
|
||||
onPressed: () => bind.sessionLockScreen(id: id)),
|
||||
onPressed: () => bind.sessionLockScreen(sessionId: sessionId)),
|
||||
);
|
||||
}
|
||||
// blockUserInput
|
||||
@@ -157,7 +163,8 @@ List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) {
|
||||
onPressed: () {
|
||||
RxBool blockInput = BlockInputState.find(id);
|
||||
bind.sessionToggleOption(
|
||||
id: id, value: '${blockInput.value ? 'un' : ''}block-input');
|
||||
sessionId: sessionId,
|
||||
value: '${blockInput.value ? 'un' : ''}block-input');
|
||||
blockInput.value = !blockInput.value;
|
||||
}));
|
||||
}
|
||||
@@ -169,13 +176,14 @@ List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) {
|
||||
version_cmp(pi.version, '1.2.0') >= 0) {
|
||||
v.add(TTextMenu(
|
||||
child: Text(translate('Switch Sides')),
|
||||
onPressed: () => showConfirmSwitchSidesDialog(id, ffi.dialogManager)));
|
||||
onPressed: () =>
|
||||
showConfirmSwitchSidesDialog(sessionId, id, ffi.dialogManager)));
|
||||
}
|
||||
// refresh
|
||||
if (pi.version.isNotEmpty) {
|
||||
v.add(TTextMenu(
|
||||
child: Text(translate('Refresh')),
|
||||
onPressed: () => bind.sessionRefresh(id: id)));
|
||||
onPressed: () => bind.sessionRefresh(sessionId: sessionId)));
|
||||
}
|
||||
// record
|
||||
var codecFormat = ffi.qualityMonitorModel.data.codecFormat;
|
||||
@@ -213,11 +221,12 @@ List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) {
|
||||
|
||||
Future<List<TRadioMenu<String>>> toolbarViewStyle(
|
||||
BuildContext context, String id, FFI ffi) async {
|
||||
final groupValue = await bind.sessionGetViewStyle(id: id) ?? '';
|
||||
final groupValue =
|
||||
await bind.sessionGetViewStyle(sessionId: ffi.sessionId) ?? '';
|
||||
void onChanged(String? value) async {
|
||||
if (value == null) return;
|
||||
bind
|
||||
.sessionSetViewStyle(id: id, value: value)
|
||||
.sessionSetViewStyle(sessionId: ffi.sessionId, value: value)
|
||||
.then((_) => ffi.canvasModel.updateViewStyle());
|
||||
}
|
||||
|
||||
@@ -237,10 +246,11 @@ Future<List<TRadioMenu<String>>> toolbarViewStyle(
|
||||
|
||||
Future<List<TRadioMenu<String>>> toolbarImageQuality(
|
||||
BuildContext context, String id, FFI ffi) async {
|
||||
final groupValue = await bind.sessionGetImageQuality(id: id) ?? '';
|
||||
final groupValue =
|
||||
await bind.sessionGetImageQuality(sessionId: ffi.sessionId) ?? '';
|
||||
onChanged(String? value) async {
|
||||
if (value == null) return;
|
||||
await bind.sessionSetImageQuality(id: id, value: value);
|
||||
await bind.sessionSetImageQuality(sessionId: ffi.sessionId, value: value);
|
||||
}
|
||||
|
||||
return [
|
||||
@@ -265,7 +275,7 @@ Future<List<TRadioMenu<String>>> toolbarImageQuality(
|
||||
groupValue: groupValue,
|
||||
onChanged: (value) {
|
||||
onChanged(value);
|
||||
customImageQualityDialog(id, ffi);
|
||||
customImageQualityDialog(ffi.sessionId, id, ffi);
|
||||
},
|
||||
),
|
||||
];
|
||||
@@ -273,9 +283,12 @@ Future<List<TRadioMenu<String>>> toolbarImageQuality(
|
||||
|
||||
Future<List<TRadioMenu<String>>> toolbarCodec(
|
||||
BuildContext context, String id, FFI ffi) async {
|
||||
final alternativeCodecs = await bind.sessionAlternativeCodecs(id: id);
|
||||
final groupValue =
|
||||
await bind.sessionGetOption(id: id, arg: 'codec-preference') ?? '';
|
||||
final sessionId = ffi.sessionId;
|
||||
final alternativeCodecs =
|
||||
await bind.sessionAlternativeCodecs(sessionId: sessionId);
|
||||
final groupValue = await bind.sessionGetOption(
|
||||
sessionId: sessionId, arg: 'codec-preference') ??
|
||||
'';
|
||||
final List<bool> codecs = [];
|
||||
try {
|
||||
final Map codecsJson = jsonDecode(alternativeCodecs);
|
||||
@@ -296,8 +309,8 @@ Future<List<TRadioMenu<String>>> toolbarCodec(
|
||||
onChanged(String? value) async {
|
||||
if (value == null) return;
|
||||
await bind.sessionPeerOption(
|
||||
id: id, name: 'codec-preference', value: value);
|
||||
bind.sessionChangePreferCodec(id: id);
|
||||
sessionId: sessionId, name: 'codec-preference', value: value);
|
||||
bind.sessionChangePreferCodec(sessionId: sessionId);
|
||||
}
|
||||
|
||||
TRadioMenu<String> radio(String label, String value, bool enabled) {
|
||||
@@ -324,6 +337,7 @@ Future<List<TToggleMenu>> toolbarDisplayToggle(
|
||||
final ffiModel = ffi.ffiModel;
|
||||
final pi = ffiModel.pi;
|
||||
final perms = ffiModel.permissions;
|
||||
final sessionId = ffi.sessionId;
|
||||
|
||||
// show remote cursor
|
||||
if (pi.platform != kPeerPlatformAndroid &&
|
||||
@@ -338,14 +352,15 @@ Future<List<TToggleMenu>> toolbarDisplayToggle(
|
||||
onChanged: enabled
|
||||
? (value) async {
|
||||
if (value == null) return;
|
||||
await bind.sessionToggleOption(id: id, value: option);
|
||||
state.value =
|
||||
bind.sessionGetToggleOptionSync(id: id, arg: option);
|
||||
await bind.sessionToggleOption(
|
||||
sessionId: sessionId, value: option);
|
||||
state.value = bind.sessionGetToggleOptionSync(
|
||||
sessionId: sessionId, arg: option);
|
||||
}
|
||||
: null));
|
||||
}
|
||||
// zoom cursor
|
||||
final viewStyle = await bind.sessionGetViewStyle(id: id) ?? '';
|
||||
final viewStyle = await bind.sessionGetViewStyle(sessionId: sessionId) ?? '';
|
||||
if (!isMobile &&
|
||||
pi.platform != kPeerPlatformAndroid &&
|
||||
viewStyle != kRemoteViewStyleOriginal) {
|
||||
@@ -356,30 +371,32 @@ Future<List<TToggleMenu>> toolbarDisplayToggle(
|
||||
value: peerState.value,
|
||||
onChanged: (value) async {
|
||||
if (value == null) return;
|
||||
await bind.sessionToggleOption(id: id, value: option);
|
||||
peerState.value = bind.sessionGetToggleOptionSync(id: id, arg: option);
|
||||
await bind.sessionToggleOption(sessionId: sessionId, value: option);
|
||||
peerState.value =
|
||||
bind.sessionGetToggleOptionSync(sessionId: sessionId, arg: option);
|
||||
},
|
||||
));
|
||||
}
|
||||
// show quality monitor
|
||||
final option = 'show-quality-monitor';
|
||||
v.add(TToggleMenu(
|
||||
value: bind.sessionGetToggleOptionSync(id: id, arg: option),
|
||||
value: bind.sessionGetToggleOptionSync(sessionId: sessionId, arg: option),
|
||||
onChanged: (value) async {
|
||||
if (value == null) return;
|
||||
await bind.sessionToggleOption(id: id, value: option);
|
||||
ffi.qualityMonitorModel.checkShowQualityMonitor(id);
|
||||
await bind.sessionToggleOption(sessionId: sessionId, value: option);
|
||||
ffi.qualityMonitorModel.checkShowQualityMonitor(sessionId);
|
||||
},
|
||||
child: Text(translate('Show quality monitor'))));
|
||||
// mute
|
||||
if (perms['audio'] != false) {
|
||||
final option = 'disable-audio';
|
||||
final value = bind.sessionGetToggleOptionSync(id: id, arg: option);
|
||||
final value =
|
||||
bind.sessionGetToggleOptionSync(sessionId: sessionId, arg: option);
|
||||
v.add(TToggleMenu(
|
||||
value: value,
|
||||
onChanged: (value) {
|
||||
if (value == null) return;
|
||||
bind.sessionToggleOption(id: id, value: option);
|
||||
bind.sessionToggleOption(sessionId: sessionId, value: option);
|
||||
},
|
||||
child: Text(translate('Mute'))));
|
||||
}
|
||||
@@ -388,12 +405,13 @@ Future<List<TToggleMenu>> toolbarDisplayToggle(
|
||||
pi.platform == kPeerPlatformWindows &&
|
||||
perms['file'] != false) {
|
||||
final option = 'enable-file-transfer';
|
||||
final value = bind.sessionGetToggleOptionSync(id: id, arg: option);
|
||||
final value =
|
||||
bind.sessionGetToggleOptionSync(sessionId: sessionId, arg: option);
|
||||
v.add(TToggleMenu(
|
||||
value: value,
|
||||
onChanged: (value) {
|
||||
if (value == null) return;
|
||||
bind.sessionToggleOption(id: id, value: option);
|
||||
bind.sessionToggleOption(sessionId: sessionId, value: option);
|
||||
},
|
||||
child: Text(translate('Allow file copy and paste'))));
|
||||
}
|
||||
@@ -401,14 +419,15 @@ Future<List<TToggleMenu>> toolbarDisplayToggle(
|
||||
if (ffiModel.keyboard && perms['clipboard'] != false) {
|
||||
final enabled = !ffiModel.viewOnly;
|
||||
final option = 'disable-clipboard';
|
||||
var value = bind.sessionGetToggleOptionSync(id: id, arg: option);
|
||||
var value =
|
||||
bind.sessionGetToggleOptionSync(sessionId: sessionId, arg: option);
|
||||
if (ffiModel.viewOnly) value = true;
|
||||
v.add(TToggleMenu(
|
||||
value: value,
|
||||
onChanged: enabled
|
||||
? (value) {
|
||||
if (value == null) return;
|
||||
bind.sessionToggleOption(id: id, value: option);
|
||||
bind.sessionToggleOption(sessionId: sessionId, value: option);
|
||||
}
|
||||
: null,
|
||||
child: Text(translate('Disable clipboard'))));
|
||||
@@ -416,12 +435,13 @@ Future<List<TToggleMenu>> toolbarDisplayToggle(
|
||||
// lock after session end
|
||||
if (ffiModel.keyboard) {
|
||||
final option = 'lock-after-session-end';
|
||||
final value = bind.sessionGetToggleOptionSync(id: id, arg: option);
|
||||
final value =
|
||||
bind.sessionGetToggleOptionSync(sessionId: sessionId, arg: option);
|
||||
v.add(TToggleMenu(
|
||||
value: value,
|
||||
onChanged: (value) {
|
||||
if (value == null) return;
|
||||
bind.sessionToggleOption(id: id, value: option);
|
||||
bind.sessionToggleOption(sessionId: sessionId, value: option);
|
||||
},
|
||||
child: Text(translate('Lock after session end'))));
|
||||
}
|
||||
@@ -434,11 +454,11 @@ Future<List<TToggleMenu>> toolbarDisplayToggle(
|
||||
onChanged: (value) {
|
||||
if (value == null) return;
|
||||
if (ffiModel.pi.currentDisplay != 0) {
|
||||
msgBox(id, 'custom-nook-nocancel-hasclose', 'info',
|
||||
msgBox(sessionId, 'custom-nook-nocancel-hasclose', 'info',
|
||||
'Please switch to Display 1 first', '', ffi.dialogManager);
|
||||
return;
|
||||
}
|
||||
bind.sessionToggleOption(id: id, value: option);
|
||||
bind.sessionToggleOption(sessionId: sessionId, value: option);
|
||||
},
|
||||
child: Text(translate('Privacy mode'))));
|
||||
}
|
||||
@@ -447,12 +467,13 @@ Future<List<TToggleMenu>> toolbarDisplayToggle(
|
||||
((Platform.isMacOS && pi.platform != kPeerPlatformMacOS) ||
|
||||
(!Platform.isMacOS && pi.platform == kPeerPlatformMacOS))) {
|
||||
final option = 'allow_swap_key';
|
||||
final value = bind.sessionGetToggleOptionSync(id: id, arg: option);
|
||||
final value =
|
||||
bind.sessionGetToggleOptionSync(sessionId: sessionId, arg: option);
|
||||
v.add(TToggleMenu(
|
||||
value: value,
|
||||
onChanged: (value) {
|
||||
if (value == null) return;
|
||||
bind.sessionToggleOption(id: id, value: option);
|
||||
bind.sessionToggleOption(sessionId: sessionId, value: option);
|
||||
},
|
||||
child: Text(translate('Swap control-command key'))));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user