flutter hide cm if client is empty, close cm if that last for 6 seconds

Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
21pages 2023-08-26 18:49:23 +08:00
parent 3e6faf8364
commit 50b8744f24
2 changed files with 46 additions and 4 deletions

View File

@ -268,10 +268,12 @@ hideCmWindow({bool isStartup = false}) async {
await windowManager.hide();
});
} else {
await windowManager.setOpacity(0);
bind.mainHideDocker();
await windowManager.minimize();
await windowManager.hide();
if (await windowManager.getOpacity() != 0) {
await windowManager.setOpacity(0);
bind.mainHideDocker();
await windowManager.minimize();
await windowManager.hide();
}
}
}

View File

@ -36,6 +36,7 @@ class ServerModel with ChangeNotifier {
String _verificationMethod = "";
String _temporaryPasswordLength = "";
String _approveMode = "";
int _zeroClientLengthCounter = 0;
late String _emptyIdShow;
late final IDTextEditingController _serverId;
@ -120,6 +121,17 @@ class ServerModel with ChangeNotifier {
_emptyIdShow = translate("Generating ...");
_serverId = IDTextEditingController(text: _emptyIdShow);
// initital _hideCm at startup
final verificationMethod =
bind.mainGetOptionSync(key: "verification-method");
final approveMode = bind.mainGetOptionSync(key: 'approve-mode');
_hideCm = option2bool(
'allow-hide-cm', bind.mainGetOptionSync(key: 'allow-hide-cm'));
if (!(approveMode == 'password' &&
verificationMethod == kUsePermanentPassword)) {
_hideCm = false;
}
timerCallback() async {
final connectionStatus =
jsonDecode(await bind.mainGetConnectStatus()) as Map<String, dynamic>;
@ -134,6 +146,17 @@ class ServerModel with ChangeNotifier {
if (res != null) {
debugPrint("clients not match!");
updateClientState(res);
} else {
if (_clients.isEmpty) {
hideCmWindow();
if (_zeroClientLengthCounter++ == 12) {
// 6 second
windowManager.close();
}
} else {
_zeroClientLengthCounter = 0;
if (!_hideCm) showCmWindow();
}
}
}
@ -422,6 +445,7 @@ class ServerModel with ChangeNotifier {
return;
}
final oldClientLenght = _clients.length;
_clients.clear();
tabController.state.value.tabs.clear();
@ -434,6 +458,16 @@ class ServerModel with ChangeNotifier {
debugPrint("Failed to decode clientJson '$clientJson', error $e");
}
}
if (desktopType == DesktopType.cm) {
if (_clients.isEmpty) {
hideCmWindow();
} else if (!_hideCm) {
showCmWindow();
}
}
if (_clients.length != oldClientLenght) {
notifyListeners();
}
}
void addConnection(Map<String, dynamic> evt) {
@ -461,6 +495,9 @@ class ServerModel with ChangeNotifier {
_clients.removeAt(index_disconnected);
tabController.remove(index_disconnected);
}
if (desktopType == DesktopType.cm && !_hideCm) {
showCmWindow();
}
scrollToBottom();
notifyListeners();
if (isAndroid && !client.authorized) showLoginDialog(client);
@ -581,6 +618,9 @@ class ServerModel with ChangeNotifier {
parent.target?.dialogManager.dismissByTag(getLoginDialogTag(id));
parent.target?.invokeMethod("cancel_notification", id);
}
if (desktopType == DesktopType.cm && _clients.isEmpty) {
hideCmWindow();
}
notifyListeners();
} catch (e) {
debugPrint("onClientRemove failed,error:$e");