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 08df6d4e5..66cbd9cd1 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 08f62ec82..8e2809c72 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 8bcb3f7a6..31078dd8a 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 cea5d7749..10223595c 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 {