fix connect on subwindow, notify main window

Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
fufesou 2022-12-01 13:52:12 +08:00
parent 1f4d45edaf
commit 7c09e66902
5 changed files with 44 additions and 11 deletions

View File

@ -1290,11 +1290,24 @@ bool callUniLinksUriHandler(Uri uri) {
return false; return false;
} }
connectMainDesktop(String id,
{required bool isFileTransfer,
required bool isTcpTunneling,
required bool isRDP}) async {
if (isFileTransfer) {
await rustDeskWinManager.newFileTransfer(id);
} else if (isTcpTunneling || isRDP) {
await rustDeskWinManager.newPortForward(id, isRDP);
} else {
await rustDeskWinManager.newRemoteDesktop(id);
}
}
/// Connect to a peer with [id]. /// Connect to a peer with [id].
/// If [isFileTransfer], starts a session only for file transfer. /// If [isFileTransfer], starts a session only for file transfer.
/// If [isTcpTunneling], starts a session only for tcp tunneling. /// If [isTcpTunneling], starts a session only for tcp tunneling.
/// If [isRDP], starts a session only for rdp. /// If [isRDP], starts a session only for rdp.
void connect(BuildContext context, String id, connect(BuildContext context, String id,
{bool isFileTransfer = false, {bool isFileTransfer = false,
bool isTcpTunneling = false, bool isTcpTunneling = false,
bool isRDP = false}) async { bool isRDP = false}) async {
@ -1304,12 +1317,20 @@ void connect(BuildContext context, String id,
"more than one connect type"); "more than one connect type");
if (isDesktop) { if (isDesktop) {
if (isFileTransfer) { if (desktopType == DesktopType.main) {
await rustDeskWinManager.newFileTransfer(id); await connectMainDesktop(
} else if (isTcpTunneling || isRDP) { id,
await rustDeskWinManager.newPortForward(id, isRDP); isFileTransfer: isFileTransfer,
isTcpTunneling: isTcpTunneling,
isRDP: isRDP,
);
} else { } else {
await rustDeskWinManager.newRemoteDesktop(id); await rustDeskWinManager.call(WindowType.Main, kWindowConnect, {
'id': id,
'isFileTransfer': isFileTransfer,
'isTcpTunneling': isTcpTunneling,
'isRDP': isRDP,
});
} }
} else { } else {
if (isFileTransfer) { if (isFileTransfer) {

View File

@ -11,9 +11,12 @@ const String kAppTypeDesktopRemote = "remote";
const String kAppTypeDesktopFileTransfer = "file transfer"; const String kAppTypeDesktopFileTransfer = "file transfer";
const String kAppTypeDesktopPortForward = "port forward"; const String kAppTypeDesktopPortForward = "port forward";
const String kWindowMainWindowOnTop = "main_window_on_top";
const String kWindowGetWindowInfo = "get_window_info";
const String kWindowActionRebuild = "rebuild"; const String kWindowActionRebuild = "rebuild";
const String kWindowEventHide = "hide"; const String kWindowEventHide = "hide";
const String kWindowEventShow = "show"; const String kWindowEventShow = "show";
const String kWindowConnect = "connect";
const String kUniLinksPrefix = "rustdesk://"; const String kUniLinksPrefix = "rustdesk://";
const String kActionNewConnection = "connection/new/"; const String kActionNewConnection = "connection/new/";

View File

@ -500,9 +500,9 @@ class _DesktopHomePageState extends State<DesktopHomePage>
rustDeskWinManager.setMethodHandler((call, fromWindowId) async { rustDeskWinManager.setMethodHandler((call, fromWindowId) async {
debugPrint( debugPrint(
"[Main] call ${call.method} with args ${call.arguments} from window $fromWindowId"); "[Main] call ${call.method} with args ${call.arguments} from window $fromWindowId");
if (call.method == "main_window_on_top") { if (call.method == kWindowMainWindowOnTop) {
window_on_top(null); window_on_top(null);
} else if (call.method == "get_window_info") { } else if (call.method == kWindowGetWindowInfo) {
final screen = (await window_size.getWindowInfo()).screen; final screen = (await window_size.getWindowInfo()).screen;
if (screen == null) { if (screen == null) {
return ""; return "";
@ -529,6 +529,13 @@ class _DesktopHomePageState extends State<DesktopHomePage>
rustDeskWinManager.registerActiveWindow(call.arguments["id"]); rustDeskWinManager.registerActiveWindow(call.arguments["id"]);
} else if (call.method == kWindowEventHide) { } else if (call.method == kWindowEventHide) {
rustDeskWinManager.unregisterActiveWindow(call.arguments["id"]); rustDeskWinManager.unregisterActiveWindow(call.arguments["id"]);
} else if (call.method == kWindowConnect) {
await connectMainDesktop(
call.arguments['id'],
isFileTransfer: call.arguments['isFileTransfer'],
isTcpTunneling: call.arguments['isTcpTunneling'],
isRDP: call.arguments['isRDP'],
);
} }
}); });
_uniLinksSubscription = listenUniLinks(); _uniLinksSubscription = listenUniLinks();

View File

@ -8,6 +8,7 @@ import 'package:flutter/services.dart';
import 'package:flutter_hbb/models/chat_model.dart'; import 'package:flutter_hbb/models/chat_model.dart';
import 'package:flutter_hbb/models/state_model.dart'; import 'package:flutter_hbb/models/state_model.dart';
import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/consts.dart';
import 'package:flutter_hbb/utils/multi_window_manager.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:rxdart/rxdart.dart' as rxdart; import 'package:rxdart/rxdart.dart' as rxdart;
@ -201,7 +202,8 @@ class _RemoteMenubarState extends State<RemoteMenubar> {
} }
_updateScreen() async { _updateScreen() async {
final v = await DesktopMultiWindow.invokeMethod(0, 'get_window_info', ''); final v = await rustDeskWinManager.call(
WindowType.Main, kWindowGetWindowInfo, '');
final String valueStr = v; final String valueStr = v;
if (valueStr.isEmpty) { if (valueStr.isEmpty) {
_screen = null; _screen = null;

View File

@ -1033,8 +1033,8 @@ class AddButton extends StatelessWidget {
return ActionIcon( return ActionIcon(
message: 'New Connection', message: 'New Connection',
icon: IconFont.add, icon: IconFont.add,
onTap: () => onTap: () => rustDeskWinManager.call(
rustDeskWinManager.call(WindowType.Main, "main_window_on_top", ""), WindowType.Main, kWindowMainWindowOnTop, ""),
isClose: false); isClose: false);
} }
} }