Merge branch 'master' into sort-favorites

This commit is contained in:
RustDesk
2023-03-10 13:05:24 +08:00
committed by GitHub
28 changed files with 3197 additions and 3057 deletions

View File

@@ -68,7 +68,7 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
var _lastChangeTime = DateTime.now();
var _lastQueryPeers = <String>{};
var _lastQueryTime = DateTime.now().subtract(const Duration(hours: 1));
var _queryCoun = 0;
var _queryCount = 0;
var _exit = false;
late final mobileWidth = () {
@@ -101,12 +101,12 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
@override
void onWindowFocus() {
_queryCoun = 0;
_queryCount = 0;
}
@override
void onWindowMinimize() {
_queryCoun = _maxQueryCount;
_queryCount = _maxQueryCount;
}
@override
@@ -123,6 +123,19 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
);
}
onVisibilityChanged(VisibilityInfo info) {
final peerId = _peerId((info.key as ValueKey).value);
if (info.visibleFraction > 0.00001) {
_curPeers.add(peerId);
} else {
_curPeers.remove(peerId);
}
_lastChangeTime = DateTime.now();
}
String _cardId(String id) => widget.peers.name + id;
String _peerId(String cardId) => cardId.replaceAll(widget.peers.name, '');
Widget _buildPeersView(Peers peers) {
final body = ObxValue<RxList>((filters) {
return FutureBuilder<List<Peer>>(
@@ -132,16 +145,8 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
final cards = <Widget>[];
for (final peer in peers) {
final visibilityChild = VisibilityDetector(
key: ValueKey(peer.id),
onVisibilityChanged: (info) {
final peerId = (info.key as ValueKey).value;
if (info.visibleFraction > 0.00001) {
_curPeers.add(peerId);
} else {
_curPeers.remove(peerId);
}
_lastChangeTime = DateTime.now();
},
key: ValueKey(_cardId(peer.id)),
onVisibilityChanged: onVisibilityChanged,
child: widget.peerCardBuilder(peer),
);
cards.add(isDesktop
@@ -172,6 +177,7 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
// ignore: todo
// TODO: variables walk through async tasks?
void _startCheckOnlines() {
final queryInterval = const Duration(seconds: 20);
() async {
while (!_exit) {
final now = DateTime.now();
@@ -181,18 +187,18 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
platformFFI.ffiBind
.queryOnlines(ids: _curPeers.toList(growable: false));
_lastQueryPeers = {..._curPeers};
_lastQueryTime = DateTime.now();
_queryCoun = 0;
_lastQueryTime = DateTime.now().subtract(queryInterval);
_queryCount = 0;
}
}
} else {
if (_queryCoun < _maxQueryCount) {
if (now.difference(_lastQueryTime) > const Duration(seconds: 20)) {
if (_queryCount < _maxQueryCount) {
if (now.difference(_lastQueryTime) >= queryInterval) {
if (_curPeers.isNotEmpty) {
platformFFI.ffiBind
.queryOnlines(ids: _curPeers.toList(growable: false));
_lastQueryTime = DateTime.now();
_queryCoun += 1;
_queryCount += 1;
}
}
}