mirror of
https://github.com/rustdesk/rustdesk.git
synced 2024-11-23 19:49:05 +08:00
parent
8c8a643cce
commit
1212d9fa2d
@ -2038,6 +2038,8 @@ Future<bool> restoreWindowPosition(WindowType type,
|
||||
return false;
|
||||
}
|
||||
|
||||
var webInitialLink = "";
|
||||
|
||||
/// Initialize uni links for macos/windows
|
||||
///
|
||||
/// [Availability]
|
||||
@ -2054,7 +2056,12 @@ Future<bool> initUniLinks() async {
|
||||
if (initialLink == null || initialLink.isEmpty) {
|
||||
return false;
|
||||
}
|
||||
return handleUriLink(uriString: initialLink);
|
||||
if (isWeb) {
|
||||
webInitialLink = initialLink;
|
||||
return false;
|
||||
} else {
|
||||
return handleUriLink(uriString: initialLink);
|
||||
}
|
||||
} catch (err) {
|
||||
debugPrintStack(label: "$err");
|
||||
return false;
|
||||
@ -2067,7 +2074,7 @@ Future<bool> initUniLinks() async {
|
||||
///
|
||||
/// Returns a [StreamSubscription] which can listen the uni links.
|
||||
StreamSubscription? listenUniLinks({handleByFlutter = true}) {
|
||||
if (isLinux) {
|
||||
if (isLinux || isWeb) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -162,7 +162,7 @@ void runMobileApp() async {
|
||||
await Future.wait([gFFI.abModel.loadCache(), gFFI.groupModel.loadCache()]);
|
||||
gFFI.userModel.refreshCurrentUser();
|
||||
runApp(App());
|
||||
if (!isWeb) await initUniLinks();
|
||||
await initUniLinks();
|
||||
}
|
||||
|
||||
void runMultiWindow(
|
||||
|
@ -161,6 +161,7 @@ class WebHomePage extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
stateGlobal.isInMainPage = true;
|
||||
handleUnilink(context);
|
||||
return Scaffold(
|
||||
// backgroundColor: MyTheme.grayBg,
|
||||
appBar: AppBar(
|
||||
@ -171,4 +172,63 @@ class WebHomePage extends StatelessWidget {
|
||||
body: connectionPage,
|
||||
);
|
||||
}
|
||||
|
||||
handleUnilink(BuildContext context) {
|
||||
if (webInitialLink.isEmpty) {
|
||||
return;
|
||||
}
|
||||
final link = webInitialLink;
|
||||
webInitialLink = '';
|
||||
final splitter = ["/#/", "/#", "#/", "#"];
|
||||
var fakelink = '';
|
||||
for (var s in splitter) {
|
||||
if (link.contains(s)) {
|
||||
var list = link.split(s);
|
||||
if (list.length < 2 || list[1].isEmpty) {
|
||||
return;
|
||||
}
|
||||
list.removeAt(0);
|
||||
fakelink = "rustdesk://${list.join(s)}";
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (fakelink.isEmpty) {
|
||||
return;
|
||||
}
|
||||
final uri = Uri.tryParse(fakelink);
|
||||
if (uri == null) {
|
||||
return;
|
||||
}
|
||||
final args = urlLinkToCmdArgs(uri);
|
||||
if (args == null || args.isEmpty) {
|
||||
return;
|
||||
}
|
||||
bool isFileTransfer = false;
|
||||
String? id;
|
||||
String? password;
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
switch (args[i]) {
|
||||
case '--connect':
|
||||
case '--play':
|
||||
isFileTransfer = false;
|
||||
id = args[i + 1];
|
||||
i++;
|
||||
break;
|
||||
case '--file-transfer':
|
||||
isFileTransfer = true;
|
||||
id = args[i + 1];
|
||||
i++;
|
||||
break;
|
||||
case '--password':
|
||||
password = args[i + 1];
|
||||
i++;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (id != null) {
|
||||
connect(context, id, isFileTransfer: isFileTransfer, password: password);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user