Revert "Fix/mobile connection login state"

This commit is contained in:
RustDesk
2023-06-23 18:25:42 +08:00
committed by GitHub
parent 74dc8536be
commit e30f09e7f7
13 changed files with 122 additions and 170 deletions

View File

@@ -1,6 +1,7 @@
// main window right pane
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:auto_size_text/auto_size_text.dart';
@@ -8,6 +9,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_hbb/consts.dart';
import 'package:flutter_hbb/desktop/widgets/scroll_wrapper.dart';
import 'package:flutter_hbb/models/state_model.dart';
import 'package:flutter_hbb/models/user_model.dart';
import 'package:get/get.dart';
import 'package:url_launcher/url_launcher_string.dart';
import 'package:window_manager/window_manager.dart';
@@ -35,12 +37,13 @@ class _ConnectionPageState extends State<ConnectionPage>
/// Nested scroll controller
final _scrollController = ScrollController();
Timer? _svcStatusTimer;
Timer? _updateTimer;
final RxBool _idInputFocused = false.obs;
final FocusNode _idFocusNode = FocusNode();
var svcStopped = Get.find<RxBool>(tag: 'stop-service');
var svcIsUsingPublicServer = true.obs;
bool isWindowMinimized = false;
@@ -57,8 +60,8 @@ class _ConnectionPageState extends State<ConnectionPage>
}
}();
}
_svcStatusTimer = periodic_immediate(Duration(seconds: 1), () async {
stateGlobal.updateSvcStatus();
_updateTimer = periodic_immediate(Duration(seconds: 1), () async {
updateStatus();
});
_idFocusNode.addListener(() {
_idInputFocused.value = _idFocusNode.hasFocus;
@@ -72,8 +75,7 @@ class _ConnectionPageState extends State<ConnectionPage>
@override
void dispose() {
_idController.dispose();
_svcStatusTimer?.cancel();
_svcStatusTimer = null;
_updateTimer?.cancel();
windowManager.removeListener(this);
super.dispose();
}
@@ -286,7 +288,7 @@ class _ConnectionPageState extends State<ConnectionPage>
child: Offstage(
offstage: !(!svcStopped.value &&
stateGlobal.svcStatus.value == SvcStatus.ready &&
stateGlobal.svcIsUsingPublicServer.value),
svcIsUsingPublicServer.value),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
@@ -325,4 +327,31 @@ class _ConnectionPageState extends State<ConnectionPage>
}
});
}
updateStatus() async {
final status =
jsonDecode(await bind.mainGetConnectStatus()) as Map<String, dynamic>;
final statusNum = status['status_num'] as int;
final preStatus = stateGlobal.svcStatus.value;
if (statusNum == 0) {
stateGlobal.svcStatus.value = SvcStatus.connecting;
} else if (statusNum == -1) {
stateGlobal.svcStatus.value = SvcStatus.notReady;
} else if (statusNum == 1) {
stateGlobal.svcStatus.value = SvcStatus.ready;
if (preStatus != SvcStatus.ready) {
gFFI.userModel.refreshCurrentUser();
}
} else {
stateGlobal.svcStatus.value = SvcStatus.notReady;
}
if (stateGlobal.svcStatus.value != SvcStatus.ready) {
gFFI.userModel.isAdmin.value = false;
gFFI.groupModel.reset();
}
if (preStatus != stateGlobal.svcStatus.value) {
UserModel.updateOtherModels();
}
svcIsUsingPublicServer.value = await bind.mainIsUsingPublicServer();
}
}

View File

@@ -151,7 +151,6 @@ void runMobileApp() async {
await initEnv(kAppTypeMain);
if (isAndroid) androidChannelInit();
platformFFI.syncAndroidServiceAppDirConfigPath();
gFFI.userModel.refreshCurrentUser();
runApp(App());
}

View File

@@ -11,7 +11,6 @@ import '../../common/widgets/dialog.dart';
import '../../consts.dart';
import '../../models/platform_model.dart';
import '../../models/server_model.dart';
import '../../models/state_model.dart';
import 'home_page.dart';
class ServerPage extends StatefulWidget implements PageShape {
@@ -201,6 +200,7 @@ class ServerInfo extends StatelessWidget {
@override
Widget build(BuildContext context) {
final isPermanent = model.verificationMethod == kUsePermanentPassword;
final serverModel = Provider.of<ServerModel>(context);
const Color colorPositive = Colors.green;
const Color colorNegative = Colors.red;
@@ -216,29 +216,28 @@ class ServerInfo extends StatelessWidget {
showToast(translate('Copied'));
}
Widget ConnectionStateNotification() => Obx(() {
if (stateGlobal.svcStatus.value == SvcStatus.notReady) {
return Row(children: [
const Icon(Icons.warning_amber_sharp,
color: colorNegative, size: iconSize)
.marginOnly(right: iconMarginRight),
Expanded(child: Text(translate('not_ready_status')))
]);
} else if (stateGlobal.svcStatus.value == SvcStatus.connecting) {
return Row(children: [
SizedBox(
width: 20, height: 20, child: CircularProgressIndicator())
.marginOnly(left: 4, right: iconMarginRight),
Expanded(child: Text(translate('connecting_status')))
]);
} else {
return Row(children: [
const Icon(Icons.check, color: colorPositive, size: iconSize)
.marginOnly(right: iconMarginRight),
Expanded(child: Text(translate('Ready')))
]);
}
});
Widget ConnectionStateNotification() {
if (serverModel.connectStatus == -1) {
return Row(children: [
const Icon(Icons.warning_amber_sharp,
color: colorNegative, size: iconSize)
.marginOnly(right: iconMarginRight),
Expanded(child: Text(translate('not_ready_status')))
]);
} else if (serverModel.connectStatus == 0) {
return Row(children: [
SizedBox(width: 20, height: 20, child: CircularProgressIndicator())
.marginOnly(left: 4, right: iconMarginRight),
Expanded(child: Text(translate('connecting_status')))
]);
} else {
return Row(children: [
const Icon(Icons.check, color: colorPositive, size: iconSize)
.marginOnly(right: iconMarginRight),
Expanded(child: Text(translate('Ready')))
]);
}
}
return PaddingCard(
title: translate('Your Device'),

View File

@@ -15,8 +15,7 @@ import '../common/formatter/id_formatter.dart';
import '../desktop/pages/server_page.dart' as desktop;
import '../desktop/widgets/tabbar_widget.dart';
import '../mobile/pages/server_page.dart';
import './model.dart';
import './state_model.dart';
import 'model.dart';
const kLoginDialogTag = "LOGIN";
@@ -32,6 +31,7 @@ class ServerModel with ChangeNotifier {
bool _fileOk = false;
bool _showElevation = false;
bool _hideCm = false;
int _connectStatus = 0; // Rendezvous Server status
String _verificationMethod = "";
String _temporaryPasswordLength = "";
String _approveMode = "";
@@ -61,6 +61,8 @@ class ServerModel with ChangeNotifier {
bool get hideCm => _hideCm;
int get connectStatus => _connectStatus;
String get verificationMethod {
final index = [
kUseTemporaryPassword,
@@ -118,7 +120,15 @@ class ServerModel with ChangeNotifier {
_serverId = IDTextEditingController(text: _emptyIdShow);
timerCallback() async {
stateGlobal.updateSvcStatus();
var status = await bind.mainGetOnlineStatue();
if (status > 0) {
status = 1;
}
if (status != _connectStatus) {
_connectStatus = status;
notifyListeners();
}
if (desktopType == DesktopType.cm) {
final res = await bind.cmCheckClientsLength(length: _clients.length);
if (res != null) {

View File

@@ -1,15 +1,10 @@
import 'dart:convert';
import 'dart:io';
import 'dart:async';
import 'package:desktop_multi_window/desktop_multi_window.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../consts.dart';
import '../common.dart';
import './platform_model.dart';
enum SvcStatus { notReady, connecting, ready }
@@ -23,9 +18,7 @@ class StateGlobal {
final RxDouble _windowBorderWidth = RxDouble(kWindowBorderWidth);
final RxBool showRemoteToolBar = false.obs;
final RxInt displaysCount = 0.obs;
final svcStatus = SvcStatus.notReady.obs;
final svcIsUsingPublicServer = true.obs;
// Use for desktop -> remote toolbar -> resolution
final Map<String, Map<int, String?>> _lastResolutionGroupValues = {};
@@ -91,31 +84,6 @@ class StateGlobal {
}
}
updateSvcStatus() async {
final status =
jsonDecode(await bind.mainGetConnectStatus()) as Map<String, dynamic>;
final statusNum = status['status_num'] as int;
final preStatus = stateGlobal.svcStatus.value;
if (statusNum == 0) {
stateGlobal.svcStatus.value = SvcStatus.connecting;
} else if (statusNum == -1) {
stateGlobal.svcStatus.value = SvcStatus.notReady;
} else if (statusNum == 1) {
stateGlobal.svcStatus.value = SvcStatus.ready;
if (preStatus != SvcStatus.ready) {
gFFI.userModel.refreshCurrentUser();
}
} else {
stateGlobal.svcStatus.value = SvcStatus.notReady;
}
if (stateGlobal.svcStatus.value != SvcStatus.ready) {
gFFI.userModel.isAdmin.value = false;
gFFI.groupModel.reset();
}
stateGlobal.svcIsUsingPublicServer.value =
await bind.mainIsUsingPublicServer();
}
StateGlobal._();
static final StateGlobal instance = StateGlobal._();