1. new mobile connect.

2. _forceAlwaysRelayAction dismissOnClicked: false.
3. no tcp tunneling on mobile
4. adjust peer tab border on mobile
This commit is contained in:
csf 2022-09-22 16:45:14 +08:00
parent 9bbc3376a4
commit 00077676f4
4 changed files with 55 additions and 68 deletions

View File

@ -17,6 +17,8 @@ import 'package:shared_preferences/shared_preferences.dart';
import 'package:window_manager/window_manager.dart'; import 'package:window_manager/window_manager.dart';
import 'common/widgets/overlay.dart'; import 'common/widgets/overlay.dart';
import 'mobile/pages/file_manager_page.dart';
import 'mobile/pages/remote_page.dart';
import 'models/model.dart'; import 'models/model.dart';
import 'models/platform_model.dart'; import 'models/platform_model.dart';
@ -1071,14 +1073,38 @@ void connect(BuildContext context, String id,
assert(!(isFileTransfer && isTcpTunneling && isRDP), assert(!(isFileTransfer && isTcpTunneling && isRDP),
"more than one connect type"); "more than one connect type");
FocusScopeNode currentFocus = FocusScope.of(context); if (isDesktop) {
if (isFileTransfer) { if (isFileTransfer) {
await rustDeskWinManager.newFileTransfer(id); await rustDeskWinManager.newFileTransfer(id);
} else if (isTcpTunneling || isRDP) { } else if (isTcpTunneling || isRDP) {
await rustDeskWinManager.newPortForward(id, isRDP); await rustDeskWinManager.newPortForward(id, isRDP);
} else {
await rustDeskWinManager.newRemoteDesktop(id);
}
} else { } else {
await rustDeskWinManager.newRemoteDesktop(id); if (isFileTransfer) {
if (!await PermissionManager.check("file")) {
if (!await PermissionManager.request("file")) {
return;
}
}
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => FileManagerPage(id: id),
),
);
} else {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => RemotePage(id: id),
),
);
}
} }
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) { if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus(); currentFocus.unfocus();
} }

View File

@ -77,8 +77,11 @@ class _PeerCardState extends State<_PeerCard>
subtitle: Text('${peer.username}@${peer.hostname}'), subtitle: Text('${peer.username}@${peer.hostname}'),
title: Text(peer.alias.isEmpty ? formatID(peer.id) : peer.alias), title: Text(peer.alias.isEmpty ? formatID(peer.id) : peer.alias),
leading: Container( leading: Container(
decoration: BoxDecoration(
color: str2color('${peer.id}${peer.platform}', 0x7f),
borderRadius: BorderRadius.circular(4),
),
padding: const EdgeInsets.all(6), padding: const EdgeInsets.all(6),
color: str2color('${peer.id}${peer.platform}', 0x7f),
child: getPlatformImage(peer.platform)), child: getPlatformImage(peer.platform)),
trailing: InkWell( trailing: InkWell(
child: const Padding( child: const Padding(
@ -458,7 +461,7 @@ abstract class BasePeerCard extends StatelessWidget {
} }
await bind.mainSetPeerOption(id: id, key: option, value: value); await bind.mainSetPeerOption(id: id, key: option, value: value);
}, },
dismissOnClicked: true, dismissOnClicked: false,
); );
} }
@ -543,7 +546,6 @@ abstract class BasePeerCard extends StatelessWidget {
if (favs.remove(id)) { if (favs.remove(id)) {
await bind.mainStoreFav(favs: favs); await bind.mainStoreFav(favs: favs);
await reloadFunc(); await reloadFunc();
// Get.forceAppUpdate(); // TODO use inner model / state
} }
}(); }();
}, },
@ -624,15 +626,13 @@ class RecentPeerCard extends BasePeerCard {
final List<MenuEntryBase<String>> menuItems = [ final List<MenuEntryBase<String>> menuItems = [
_connectAction(context, peer), _connectAction(context, peer),
_transferFileAction(context, peer.id), _transferFileAction(context, peer.id),
_tcpTunnelingAction(context, peer.id),
]; ];
MenuEntryBase<String>? rdpAction; if (isDesktop) {
if (peer.platform == 'Windows') { menuItems.add(_tcpTunnelingAction(context, peer.id));
rdpAction = _rdpAction(context, peer.id);
} }
menuItems.add(await _forceAlwaysRelayAction(peer.id)); menuItems.add(await _forceAlwaysRelayAction(peer.id));
if (rdpAction != null) { if (peer.platform == 'Windows') {
menuItems.add(rdpAction); menuItems.add(_rdpAction(context, peer.id));
} }
menuItems.add(_wolAction(peer.id)); menuItems.add(_wolAction(peer.id));
menuItems.add(MenuEntryDivider()); menuItems.add(MenuEntryDivider());
@ -656,15 +656,13 @@ class FavoritePeerCard extends BasePeerCard {
final List<MenuEntryBase<String>> menuItems = [ final List<MenuEntryBase<String>> menuItems = [
_connectAction(context, peer), _connectAction(context, peer),
_transferFileAction(context, peer.id), _transferFileAction(context, peer.id),
_tcpTunnelingAction(context, peer.id),
]; ];
MenuEntryBase<String>? rdpAction; if (isDesktop) {
if (peer.platform == 'Windows') { menuItems.add(_tcpTunnelingAction(context, peer.id));
rdpAction = _rdpAction(context, peer.id);
} }
menuItems.add(await _forceAlwaysRelayAction(peer.id)); menuItems.add(await _forceAlwaysRelayAction(peer.id));
if (rdpAction != null) { if (peer.platform == 'Windows') {
menuItems.add(rdpAction); menuItems.add(_rdpAction(context, peer.id));
} }
menuItems.add(_wolAction(peer.id)); menuItems.add(_wolAction(peer.id));
menuItems.add(MenuEntryDivider()); menuItems.add(MenuEntryDivider());
@ -690,15 +688,13 @@ class DiscoveredPeerCard extends BasePeerCard {
final List<MenuEntryBase<String>> menuItems = [ final List<MenuEntryBase<String>> menuItems = [
_connectAction(context, peer), _connectAction(context, peer),
_transferFileAction(context, peer.id), _transferFileAction(context, peer.id),
_tcpTunnelingAction(context, peer.id),
]; ];
MenuEntryBase<String>? rdpAction; if (isDesktop) {
if (peer.platform == 'Windows') { menuItems.add(_tcpTunnelingAction(context, peer.id));
rdpAction = _rdpAction(context, peer.id);
} }
menuItems.add(await _forceAlwaysRelayAction(peer.id)); menuItems.add(await _forceAlwaysRelayAction(peer.id));
if (rdpAction != null) { if (peer.platform == 'Windows') {
menuItems.add(rdpAction); menuItems.add(_rdpAction(context, peer.id));
} }
menuItems.add(_wolAction(peer.id)); menuItems.add(_wolAction(peer.id));
menuItems.add(MenuEntryDivider()); menuItems.add(MenuEntryDivider());
@ -721,15 +717,13 @@ class AddressBookPeerCard extends BasePeerCard {
final List<MenuEntryBase<String>> menuItems = [ final List<MenuEntryBase<String>> menuItems = [
_connectAction(context, peer), _connectAction(context, peer),
_transferFileAction(context, peer.id), _transferFileAction(context, peer.id),
_tcpTunnelingAction(context, peer.id),
]; ];
MenuEntryBase<String>? rdpAction; if (isDesktop) {
if (peer.platform == 'Windows') { menuItems.add(_tcpTunnelingAction(context, peer.id));
rdpAction = _rdpAction(context, peer.id);
} }
menuItems.add(await _forceAlwaysRelayAction(peer.id)); menuItems.add(await _forceAlwaysRelayAction(peer.id));
if (rdpAction != null) { if (peer.platform == 'Windows') {
menuItems.add(rdpAction); menuItems.add(_rdpAction(context, peer.id));
} }
menuItems.add(_wolAction(peer.id)); menuItems.add(_wolAction(peer.id));
menuItems.add(MenuEntryDivider()); menuItems.add(MenuEntryDivider());

View File

@ -113,7 +113,7 @@ class _PeerTabPageState extends State<PeerTabPage>
color: _tabIndex.value == t.key color: _tabIndex.value == t.key
? MyTheme.color(context).bg ? MyTheme.color(context).bg
: null, : null,
borderRadius: BorderRadius.circular(2), borderRadius: BorderRadius.circular(isDesktop ? 2 : 6),
), ),
child: Align( child: Align(
alignment: Alignment.center, alignment: Alignment.center,

View File

@ -2,7 +2,6 @@ import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_hbb/common/formatter/id_formatter.dart'; import 'package:flutter_hbb/common/formatter/id_formatter.dart';
import 'package:flutter_hbb/mobile/pages/file_manager_page.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
@ -15,7 +14,6 @@ import '../../consts.dart';
import '../../models/model.dart'; import '../../models/model.dart';
import '../../models/platform_model.dart'; import '../../models/platform_model.dart';
import 'home_page.dart'; import 'home_page.dart';
import 'remote_page.dart';
import 'scan_page.dart'; import 'scan_page.dart';
import 'settings_page.dart'; import 'settings_page.dart';
@ -97,38 +95,7 @@ class _ConnectionPageState extends State<ConnectionPage> {
/// Connects to the selected peer. /// Connects to the selected peer.
void onConnect() { void onConnect() {
var id = _idController.id; var id = _idController.id;
connect(id); connect(context, id);
}
/// Connect to a peer with [id].
/// If [isFileTransfer], starts a session only for file transfer.
void connect(String id, {bool isFileTransfer = false}) async {
if (id == '') return;
id = id.replaceAll(' ', '');
if (isFileTransfer) {
if (!await PermissionManager.check("file")) {
if (!await PermissionManager.request("file")) {
return;
}
}
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => FileManagerPage(id: id),
),
);
} else {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => RemotePage(id: id),
),
);
}
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
} }
/// UI for software update. /// UI for software update.