From 2c976eb1e29e72603acac9c0362fa462a40def55 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sat, 10 May 2025 21:49:23 +0800 Subject: [PATCH] prepare self-hosting web client --- flutter/lib/common/hbbs/hbbs.dart | 2 ++ flutter/lib/models/user_model.dart | 4 ++++ flutter/lib/models/web_model.dart | 8 ++++++++ flutter/lib/web/bridge.dart | 10 ++++++++++ 4 files changed, 24 insertions(+) diff --git a/flutter/lib/common/hbbs/hbbs.dart b/flutter/lib/common/hbbs/hbbs.dart index a58ecf01e..97baf546a 100644 --- a/flutter/lib/common/hbbs/hbbs.dart +++ b/flutter/lib/common/hbbs/hbbs.dart @@ -27,6 +27,7 @@ class UserPayload { String name = ''; String email = ''; String note = ''; + String? verifier; UserStatus status; bool isAdmin = false; @@ -34,6 +35,7 @@ class UserPayload { : name = json['name'] ?? '', email = json['email'] ?? '', note = json['note'] ?? '', + verifier = json['verifier'], status = json['status'] == 0 ? UserStatus.kDisabled : json['status'] == -1 diff --git a/flutter/lib/models/user_model.dart b/flutter/lib/models/user_model.dart index 9d9c762d9..df65563ae 100644 --- a/flutter/lib/models/user_model.dart +++ b/flutter/lib/models/user_model.dart @@ -116,6 +116,10 @@ class UserModel { userName.value = user.name; isAdmin.value = user.isAdmin; bind.mainSetLocalOption(key: 'user_info', value: jsonEncode(user)); + if (isWeb) { + // ugly here, tmp solution + bind.mainSetLocalOption(key: 'verifier', value: user.verifier ?? ''); + } } // update ab and group status diff --git a/flutter/lib/models/web_model.dart b/flutter/lib/models/web_model.dart index 7fd6993db..565af72ab 100644 --- a/flutter/lib/models/web_model.dart +++ b/flutter/lib/models/web_model.dart @@ -8,6 +8,7 @@ import 'dart:html'; import 'dart:async'; import 'package:flutter/foundation.dart'; +import 'package:flutter_hbb/common/widgets/login.dart'; import 'package:flutter_hbb/models/state_model.dart'; import 'package:flutter_hbb/web/bridge.dart'; @@ -113,6 +114,13 @@ class PlatformFFI { context["onInitFinished"] = () { completer.complete(); }; + context['loginDialog'] = () { + loginDialog(); + }; + context['closeConnection'] = () { + gFFI.dialogManager.dismissAll(); + closeConnection(); + }; context.callMethod('init'); version = getByName('version'); window.onContextMenu.listen((event) { diff --git a/flutter/lib/web/bridge.dart b/flutter/lib/web/bridge.dart index d831e7bdc..a00250171 100644 --- a/flutter/lib/web/bridge.dart +++ b/flutter/lib/web/bridge.dart @@ -267,6 +267,16 @@ class RustdeskImpl { ])); } + Future sessionGetTrackpadSpeed( + {required UuidValue sessionId, dynamic hint}) { + throw UnimplementedError("sessionGetTrackpadSpeed"); + } + + Future sessionSetTrackpadSpeed( + {required UuidValue sessionId, required int value, dynamic hint}) { + throw UnimplementedError("sessionSetTrackpadSpeed"); + } + Future sessionGetScrollStyle( {required UuidValue sessionId, dynamic hint}) { return Future(() =>