Merge branch 'service' of github.com:open-trade/flutter_hbb into service

This commit is contained in:
csf
2022-04-04 15:03:24 +08:00
18 changed files with 98 additions and 148 deletions

View File

@@ -7,9 +7,6 @@ import 'package:flutter_hbb/pages/chat_page.dart';
import 'model.dart';
class ChatModel with ChangeNotifier {
// -1作为客户端模式的id客户端模式下此id唯一
// 其它正整数的id来自被控服务器模式下的其他客户端的id每个客户端有不同的id
// 注意 此id和peer_id不同服务端模式下的id等同于conn的顺序累加id
static final clientModeID = -1;
final Map<int, List<ChatMessage>> _messages = Map()..[clientModeID] = [];

View File

@@ -26,10 +26,6 @@ class FileModel extends ChangeNotifier {
var _localOption = DirectoryOption();
var _remoteOption = DirectoryOption();
/// 每一个选择的文件或文件夹占用一个 _jobIdfile_num是文件夹中的单独文件id
/// 如
/// 发送单独一个文件 file_num = 0;
/// 发送一个文件夹若文件夹下有3个文件 最后一个文件的 file_num = 2;
var _jobId = 0;
var _jobProgress = JobProgress(); // from rust update
@@ -119,7 +115,6 @@ class FileModel extends ChangeNotifier {
_fileFetcher.tryCompleteTask(evt['value'], evt['is_local']);
}
// job 类型 复制结束 删除结束
jobDone(Map<String, dynamic> evt) {
if (_jobResultListener.isListening) {
_jobResultListener.complete(evt);
@@ -250,7 +245,7 @@ class FileModel extends ChangeNotifier {
"path": from.path,
"to": PathUtil.join(toPath, from.name, isWindows),
"show_hidden": showHidden.toString(),
"is_remote": (!(items.isLocal!)).toString() // 指from的位置而不是to的位置
"is_remote": (!(items.isLocal!)).toString()
};
FFI.setByName("send_files", jsonEncode(msg));
});
@@ -282,7 +277,6 @@ class FileModel extends ChangeNotifier {
_jobId, item.path, items.isLocal!, true);
fd.format(isWindows);
EasyLoading.dismiss();
// 空文件夹
if (fd.entries.isEmpty) {
final confirm = await showRemoveDialog(translate("Are you sure you want to delete this empty directory?"), item.name, false);
if (confirm == true) {
@@ -476,7 +470,7 @@ class FileFetcher {
Timer(Duration(seconds: 2), () {
tasks.remove(path);
if (c.isCompleted) return; // 计时器加入map
if (c.isCompleted) return;
c.completeError("Failed to read dir,timeout");
});
return c.future;
@@ -492,7 +486,7 @@ class FileFetcher {
Timer(Duration(seconds: 2), () {
tasks.remove(id);
if (c.isCompleted) return; // 计时器加入map
if (c.isCompleted) return;
c.completeError("Failed to read dir,timeout");
});
return c.future;

View File

@@ -419,17 +419,6 @@ showInputWarnAlert() async {
DialogManager.register(alertContext);
return AlertDialog(
title: Text(translate("How to get Android input permission?")),
// content: Text.rich(TextSpan(style: TextStyle(), children: [
// // [已安装的服务] : [Installed Services]
// // 请在接下来的系统设置页面里,找到并进入[Installed Services]页面,将[RustDesk Input]服务开启。
// TextSpan(text: "请在接下来的系统设置页\n进入"),
// TextSpan(text: " [服务] ", style: TextStyle(color: MyTheme.accent)),
// TextSpan(text: "配置页面\n将"),
// TextSpan(
// text: " [RustDesk Input] ",
// style: TextStyle(color: MyTheme.accent)),
// TextSpan(text: "服务开启")
// ])),
content: Column(
mainAxisSize: MainAxisSize.min,
children: [

View File

@@ -83,7 +83,7 @@ class PlatformFFI {
static void setMethodCallHandler(FMethod callback) {}
static Future<bool> invokeMethod(String method) async {
static Future<bool> invokeMethod(String method, [ dynamic arguments]) async {
return true;
}
}

View File

@@ -22,7 +22,7 @@ class ChatPage extends StatelessWidget implements PageShape {
@override
final appBarActions = [
PopupMenuButton<int>(
icon: Icon(Icons.list_alt),
icon: Icon(Icons.more_vert),
itemBuilder: (context) {
final chatModel = FFI.chatModel;
final serverModel = FFI.serverModel;
@@ -194,9 +194,7 @@ class _ChatWindowOverlayState extends State<ChatWindowOverlay> {
});
}
checkScreenSize() {
// TODO 横屏处理
}
checkScreenSize() {}
checkKeyboard() {
final bottomHeight = MediaQuery.of(context).viewInsets.bottom;

View File

@@ -286,37 +286,40 @@ class _WebMenuState extends State<WebMenu> {
Widget build(BuildContext context) {
Provider.of<FfiModel>(context);
final username = getUsername();
return PopupMenuButton<String>(itemBuilder: (context) {
return [
PopupMenuItem(
child: Text(translate('ID/Relay Server')),
value: "server",
),
PopupMenuItem(
child: Text(username == null
? translate("Login")
: translate("Logout") + ' ($username)'),
value: "login",
),
PopupMenuItem(
child: Text(translate('About') + ' RustDesk'),
value: "about",
)
];
}, onSelected: (value) {
if (value == 'server') {
showServer();
}
if (value == 'about') {
showAbout();
}
if (value == 'login') {
if (username == null) {
showLogin();
} else {
logout();
}
}
});
return PopupMenuButton<String>(
icon: Icon(Icons.more_vert),
itemBuilder: (context) {
return [
PopupMenuItem(
child: Text(translate('ID/Relay Server')),
value: "server",
),
PopupMenuItem(
child: Text(username == null
? translate("Login")
: translate("Logout") + ' ($username)'),
value: "login",
),
PopupMenuItem(
child: Text(translate('About') + ' RustDesk'),
value: "about",
)
];
},
onSelected: (value) {
if (value == 'server') {
showServer();
}
if (value == 'about') {
showAbout();
}
if (value == 'login') {
if (username == null) {
showLogin();
} else {
logout();
}
}
});
}
}

View File

@@ -360,7 +360,6 @@ class _FileManagerPageState extends State<FileManagerPage> {
if (model.selectMode) {
if (_selectedItems.length == 0 || !isOtherPage) {
// 选择模式 当前选择页面
return BottomSheetBody(
leading: Icon(Icons.check),
title: translate("Selected"),
@@ -377,7 +376,6 @@ class _FileManagerPageState extends State<FileManagerPage> {
)
]);
} else {
// 选择模式 复制目标页面
return BottomSheetBody(
leading: Icon(Icons.input),
title: translate("Paste here?"),

View File

@@ -17,41 +17,44 @@ class ServerPage extends StatelessWidget implements PageShape {
@override
final appBarActions = [
PopupMenuButton<String>(itemBuilder: (context) {
return [
PopupMenuItem(
child: Text(translate("Change ID")),
value: "changeID",
enabled: false,
),
PopupMenuItem(
child: Text(translate("Set your own password")),
value: "changePW",
enabled: FFI.serverModel.isStart,
),
PopupMenuItem(
child: Text(translate("Refresh random password")),
value: "refreshPW",
enabled: FFI.serverModel.isStart,
)
];
}, onSelected: (value) {
if (value == "changeID") {
// TODO
} else if (value == "changePW") {
updatePasswordDialog();
} else if (value == "refreshPW") {
() async {
showLoading(translate("Waiting"));
if(await FFI.serverModel.updatePassword("")){
showSuccess();
}else{
showError();
PopupMenuButton<String>(
icon: Icon(Icons.more_vert),
itemBuilder: (context) {
return [
PopupMenuItem(
child: Text(translate("Change ID")),
value: "changeID",
enabled: false,
),
PopupMenuItem(
child: Text(translate("Set your own password")),
value: "changePW",
enabled: FFI.serverModel.isStart,
),
PopupMenuItem(
child: Text(translate("Refresh random password")),
value: "refreshPW",
enabled: FFI.serverModel.isStart,
)
];
},
onSelected: (value) {
if (value == "changeID") {
// TODO
} else if (value == "changePW") {
updatePasswordDialog();
} else if (value == "refreshPW") {
() async {
showLoading(translate("Waiting"));
if (await FFI.serverModel.updatePassword("")) {
showSuccess();
} else {
showError();
}
debugPrint("end updatePassword");
}();
}
debugPrint("end updatePassword");
}();
}
})
})
];
@override

View File

@@ -239,8 +239,8 @@ class HoldTapMoveGestureRecognizer extends GestureRecognizer {
bool _isStart = false;
Timer? _firstTapUpTimer; // 第一次点击后的计时 超时未等到第二次操作则reject
Timer? _secondTapDownTimer; // 第二次点击后的计时 期间内有其他的操作则reject 超时则判定成功 drag update
Timer? _firstTapUpTimer;
Timer? _secondTapDownTimer;
_TapTracker? _firstTap;
_TapTracker? _secondTap;
@@ -266,7 +266,6 @@ class HoldTapMoveGestureRecognizer extends GestureRecognizer {
@override
void addAllowedPointer(PointerDownEvent event) {
// 检测按下事件
if (_firstTap != null) {
if (!_firstTap!.isWithinGlobalTolerance(event, kDoubleTapSlop)) {
// Ignore out-of-bounds second taps.
@@ -285,7 +284,7 @@ class HoldTapMoveGestureRecognizer extends GestureRecognizer {
localPosition: event.localPosition)));
}
}
_trackTap(event); // 捕捉第一次tap
_trackTap(event);
}
void _trackTap(PointerDownEvent event) {
@@ -301,14 +300,12 @@ class HoldTapMoveGestureRecognizer extends GestureRecognizer {
tracker.startTrackingPointer(_handleEvent, event.transform);
}
// 实际的逻辑应该是第二次down后一段时间没有抬起则表示start 刚好是双击取反
void _handleEvent(PointerEvent event) {
final _TapTracker tracker = _trackers[event.pointer]!;
if (event is PointerUpEvent) {
if (_firstTap == null && _secondTap == null) {
_registerFirstTap(tracker);
} else {
// 检测到其他的抬起事件则取消
_reject(tracker);
}
} else if (event is PointerDownEvent) {
@@ -316,7 +313,6 @@ class HoldTapMoveGestureRecognizer extends GestureRecognizer {
_registerSecondTap(tracker);
}
} else if (event is PointerMoveEvent) {
// 检测到first tap move 则取消检测到second tap move且已经通过竞技场则update
if (!tracker.isWithinGlobalTolerance(event, kDoubleTapTouchSlop)) {
if (_firstTap != null && _firstTap!.pointer == event.pointer) {
// first tap move
@@ -403,7 +399,6 @@ class HoldTapMoveGestureRecognizer extends GestureRecognizer {
GestureBinding.instance!.gestureArena.release(tracker.pointer);
}
}
// TODO 正确的释放资源
_firstTap = null;
_secondTap = null;
_clearTrackers();
@@ -420,7 +415,6 @@ class HoldTapMoveGestureRecognizer extends GestureRecognizer {
}
void _registerSecondTap(_TapTracker tracker) {
// 清除first tap的状态
if (_firstTap != null) {
_stopFirstTapUpTimer();
_freezeTracker(_firstTap!);
@@ -489,7 +483,7 @@ class DoubleFinerTapGestureRecognizer extends GestureRecognizer {
GestureTapDownCallback? onDoubleFinerTap;
GestureTapCancelCallback? onDoubleFinerTapCancel;
Timer? _firstTapTimer; // 第一次点击后的计时 超时未等到第二次操作则reject
Timer? _firstTapTimer;
_TapTracker? _firstTap;
var _isStart = false;
@@ -518,7 +512,6 @@ class DoubleFinerTapGestureRecognizer extends GestureRecognizer {
@override
void addAllowedPointer(PointerDownEvent event) {
// 检测按下事件
debugPrint("addAllowedPointer");
if (_isStart) {
// second
@@ -536,7 +529,7 @@ class DoubleFinerTapGestureRecognizer extends GestureRecognizer {
_isStart = true;
_startFirstTapDownTimer();
}
_trackTap(event); // 捕捉tap
_trackTap(event);
}
void _trackTap(PointerDownEvent event) {
@@ -553,7 +546,6 @@ class DoubleFinerTapGestureRecognizer extends GestureRecognizer {
_registerTap(tracker);
}
// 实际的逻辑应该是第二次down后一段时间没有抬起则表示start 刚好是双击取反
void _handleEvent(PointerEvent event) {
final _TapTracker tracker = _trackers[event.pointer]!;
if (event is PointerUpEvent) {
@@ -608,7 +600,6 @@ class DoubleFinerTapGestureRecognizer extends GestureRecognizer {
void _reset() {
_stopFirstTapUpTimer();
_firstTap = null;
// TODO 正确的释放资源
_clearTrackers();
}