From 58e4d66b44d787046c9838af2cd595fef102dbc4 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 23 Jun 2023 15:10:10 +0800 Subject: [PATCH] add force, quiet to pullAb, no force pull while switch tab, this may be not good, because data not updated, have to do with refresh button, we may change to quiet pull in the future --- flutter/lib/common/widgets/address_book.dart | 3 -- flutter/lib/common/widgets/peer_tab_page.dart | 8 ++--- flutter/lib/models/ab_model.dart | 36 ++++++++----------- flutter/lib/models/group_model.dart | 6 +++- 4 files changed, 24 insertions(+), 29 deletions(-) diff --git a/flutter/lib/common/widgets/address_book.dart b/flutter/lib/common/widgets/address_book.dart index 08df6d4e..66cbd9cd 100644 --- a/flutter/lib/common/widgets/address_book.dart +++ b/flutter/lib/common/widgets/address_book.dart @@ -43,9 +43,6 @@ class _AddressBookState extends State { if (gFFI.abModel.abError.isNotEmpty) { return _buildShowError(gFFI.abModel.abError.value); } - if (gFFI.abModel.fromServer.isFalse) { - return Offstage(); - } return isDesktop ? _buildAddressBookDesktop() : _buildAddressBookMobile(); diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index 08f62ec8..8e2809c7 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -22,7 +22,7 @@ class PeerTabPage extends StatefulWidget { class _TabEntry { final Widget widget; - final Function() load; + final Function({dynamic hint}) load; _TabEntry(this.widget, this.load); } @@ -52,12 +52,12 @@ class _PeerTabPageState extends State AddressBook( menuPadding: _menuPadding(), ), - () => gFFI.abModel.pullAb()), + ({dynamic hint}) => gFFI.abModel.pullAb(force: hint == null)), _TabEntry( MyGroup( menuPadding: _menuPadding(), ), - () => gFFI.groupModel.pull(), + ({dynamic hint}) => gFFI.groupModel.pull(force: hint == null), ), ]; @@ -75,7 +75,7 @@ class _PeerTabPageState extends State Future handleTabSelection(int tabIndex) async { if (tabIndex < entries.length) { gFFI.peerTabModel.setCurrentTab(tabIndex); - entries[tabIndex].load(); + entries[tabIndex].load(hint: false); } } diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 8bcb3f7a..31078dd8 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -5,6 +5,7 @@ import 'package:flutter_hbb/models/model.dart'; import 'package:flutter_hbb/models/peer_model.dart'; import 'package:flutter_hbb/models/platform_model.dart'; import 'package:get/get.dart'; +import 'package:bot_toast/bot_toast.dart'; import 'package:http/http.dart' as http; import '../common.dart'; @@ -13,19 +14,23 @@ class AbModel { final abLoading = false.obs; final abError = "".obs; final tags = [].obs; - final RxBool fromServer = false.obs; final peers = List.empty(growable: true).obs; final selectedTags = List.empty(growable: true).obs; + var initialized = false; WeakReference parent; AbModel(this.parent); - Future pullAb() async { + Future pullAb({force = true, quiet = false}) async { if (gFFI.userModel.userName.isEmpty) return; - abLoading.value = true; - abError.value = ""; + if (abLoading.value) return; + if (!force && initialized) return; + if (!quiet) { + abLoading.value = true; + abError.value = ""; + } final api = "${await bind.mainGetApiServer()}/api/ab/get"; try { var authHeaders = getHttpHeaders(); @@ -50,25 +55,20 @@ class AbModel { } } } - fromServer.value = true; - return resp.body; - } else { - fromServer.value = true; - return ""; } } catch (err) { - err.printError(); abError.value = err.toString(); } finally { abLoading.value = false; + initialized = true; } - return null; } Future reset() async { await bind.mainSetLocalOption(key: "selected-tags", value: ''); tags.clear(); peers.clear(); + initialized = false; } void addId(String id, String alias, List tags) { @@ -104,7 +104,6 @@ class AbModel { } Future pushAb() async { - abLoading.value = true; final api = "${await bind.mainGetApiServer()}/api/ab"; var authHeaders = getHttpHeaders(); authHeaders['Content-Type'] = "application/json"; @@ -113,16 +112,11 @@ class AbModel { "data": jsonEncode({"tags": tags, "peers": peersJsonData}) }); try { - final resp = - await http.post(Uri.parse(api), headers: authHeaders, body: body); - abError.value = ""; - await pullAb(); - debugPrint("resp: ${resp.body}"); + await http.post(Uri.parse(api), headers: authHeaders, body: body); + await pullAb(quiet: true); } catch (e) { - abError.value = e.toString(); - } finally { - abLoading.value = false; - } + BotToast.showText(contentColor: Colors.red, text: e.toString()); + } finally {} } Peer? find(String id) { diff --git a/flutter/lib/models/group_model.dart b/flutter/lib/models/group_model.dart index cea5d774..10223595 100644 --- a/flutter/lib/models/group_model.dart +++ b/flutter/lib/models/group_model.dart @@ -18,6 +18,7 @@ class GroupModel { final RxString selectedUser = ''.obs; final RxString searchUserText = ''.obs; WeakReference parent; + var initialized = false; GroupModel(this.parent); @@ -26,13 +27,16 @@ class GroupModel { groupId.value = ''; users.clear(); peersShow.clear(); + initialized = false; } - Future pull() async { + Future pull({force = true}) async { + if (!force && initialized) return; groupLoading.value = true; groupLoadError.value = ""; await _pull(); groupLoading.value = false; + initialized = true; } Future _pull() async {