Merge pull request #3726 from fufesou/feat/peer_info_subplatform

Feat/peer info subplatform
This commit is contained in:
RustDesk 2023-03-21 12:37:54 +08:00 committed by GitHub
commit 0dd620c718
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 35 additions and 3 deletions

View File

@ -259,7 +259,9 @@ class _ConnectionTabPageState extends State<ConnectionTabPage> {
),
]);
if (!ffi.canvasModel.cursorEmbedded && !ffi.ffiModel.viewOnly) {
if (!ffi.canvasModel.cursorEmbedded &&
!ffi.ffiModel.viewOnly &&
!pi.is_wayland) {
menu.add(MenuEntryDivider<String>());
menu.add(RemoteMenuEntry.showRemoteCursor(
key,

View File

@ -1464,7 +1464,8 @@ class _DisplayMenuState extends State<_DisplayMenu> {
return Offstage();
}
final ffiModel = widget.ffi.ffiModel;
final visible = !widget.ffi.canvasModel.cursorEmbedded;
final visible =
!widget.ffi.canvasModel.cursorEmbedded && !ffiModel.pi.is_wayland;
if (!visible) return Offstage();
final enabled = !ffiModel.viewOnly;
final state = ShowRemoteCursorState.find(widget.id);
@ -1684,6 +1685,9 @@ class _KeyboardMenu extends StatelessWidget {
for (KeyboardModeMenu mode in modes) {
if (bind.sessionIsKeyboardModeSupported(id: id, mode: mode.key)) {
if (pi.is_wayland && mode.key != _kKeyMapMode) {
continue;
}
if (mode.key == _kKeyTranslateMode) {
if (Platform.isLinux) {
continue;

View File

@ -1059,7 +1059,7 @@ void showOptions(
final toggles = [
getToggle(id, setState, 'show-quality-monitor', 'Show quality monitor'),
];
if (!gFFI.canvasModel.cursorEmbedded) {
if (!gFFI.canvasModel.cursorEmbedded && !pi.is_wayland) {
toggles.insert(0,
getToggle(id, setState, 'show-remote-cursor', 'Show remote cursor'));
}

View File

@ -452,6 +452,16 @@ class FfiModel with ChangeNotifier {
setViewOnly(peerId,
bind.sessionGetToggleOptionSync(id: peerId, arg: 'view-only'));
}
if (connType == ConnType.defaultConn) {
final platform_additions = evt['platform_additions'];
if (platform_additions != null && platform_additions != '') {
try {
_pi.platform_additions = json.decode(platform_additions);
} catch (e) {
debugPrint('Failed to decode platform_additions $e');
}
}
}
notifyListeners();
}
@ -1687,6 +1697,9 @@ class PeerInfo {
List<Display> displays = [];
Features features = Features();
List<Resolution> resolutions = [];
Map<String, dynamic> platform_additions = {};
bool get is_wayland => platform_additions['is_wayland'] == true;
}
const canvasKey = 'canvas';

View File

@ -91,6 +91,8 @@ message PeerInfo {
Features features = 9;
SupportedEncoding encoding = 10;
SupportedResolutions resolutions = 11;
// Use JSON's key-value format which is friendly for peer to handle.
string platform_additions = 12;
}
message LoginResponse {

View File

@ -509,6 +509,7 @@ impl InvokeUiSession for FlutterHandler {
("features", &features),
("current_display", &pi.current_display.to_string()),
("resolutions", &resolutions),
("platform_additions", &pi.platform_additions),
],
);
}

View File

@ -843,6 +843,16 @@ impl Connection {
pi.hostname = DEVICE_NAME.lock().unwrap().clone();
pi.platform = "Android".into();
}
#[cfg(target_os = "linux")]
{
pi.platform_additions = format!(r#"
{{
"is_wayland": {}
}}
"#, crate::platform::current_is_wayland());
}
#[cfg(feature = "hwcodec")]
{
let (h264, h265) = scrap::codec::Encoder::supported_encoding();