Change Contacts update to live update

This commit is contained in:
Hank Grabowski 2023-11-16 21:08:56 -05:00
parent a536576a83
commit 5c54726ebb
2 changed files with 39 additions and 10 deletions

View file

@ -13,9 +13,11 @@ import '../controls/status_and_refresh_button.dart';
import '../globals.dart';
import '../models/connection.dart';
import '../routes.dart';
import '../services/auth_service.dart';
import '../services/connections_manager.dart';
import '../services/network_status_service.dart';
import '../utils/active_profile_selector.dart';
import '../utils/snackbar_builder.dart';
class ContactsScreen extends StatefulWidget {
const ContactsScreen({super.key});
@ -27,9 +29,11 @@ class ContactsScreen extends StatefulWidget {
class _ContactsScreenState extends State<ContactsScreen> {
static final _logger = Logger('$ContactsScreen');
var filterText = '';
var updateBeingProcessed = false;
@override
Widget build(BuildContext context) {
context.watch<AccountsService>();
final nss = getIt<NetworkStatusService>();
final manager = context
.watch<ActiveProfileSelector<ConnectionsManager>>()
@ -87,15 +91,11 @@ class _ContactsScreenState extends State<ContactsScreen> {
}
return Scaffold(
drawer: const StandardAppDrawer(skipPopDismiss: true),
drawer: const StandardAppDrawer(skipPopDismiss: false),
body: SafeArea(
child: RefreshIndicator(
onRefresh: () async {
if (nss.connectionUpdateStatus.value) {
return;
}
manager.updateAllContacts(false);
return;
await performFullUpdate(nss, manager);
},
child: Column(
children: [
@ -128,10 +128,10 @@ class _ContactsScreenState extends State<ContactsScreen> {
Padding(
padding: const EdgeInsets.all(8.0),
child: StatusAndRefreshButton(
valueListenable: nss.connectionUpdateStatus,
refreshFunction: () async =>
manager.updateAllContacts(false),
),
valueListenable: nss.connectionUpdateStatus,
refreshFunction: () async {
await performFullUpdate(nss, manager);
}),
)
],
),
@ -147,4 +147,29 @@ class _ContactsScreenState extends State<ContactsScreen> {
),
);
}
Future<void> performFullUpdate(
NetworkStatusService nss,
ConnectionsManager manager,
) async {
if (nss.connectionUpdateStatus.value) {
return;
}
if (updateBeingProcessed) {
buildSnackbar(
context,
'Update already underway and cannot be requested again.',
);
return;
}
buildSnackbar(
context,
'Beginning updating contact list which takes some time...',
);
updateBeingProcessed = true;
await manager.updateAllContacts(false);
updateBeingProcessed = false;
}
}

View file

@ -189,6 +189,8 @@ class ConnectionsManager extends ChangeNotifier {
}, onError: (error) {
_logger.severe('Error getting followers data: $error');
});
upsertAllConnections(results.values);
notifyListeners();
await Future.delayed(delay);
}
@ -210,6 +212,8 @@ class ConnectionsManager extends ChangeNotifier {
currentPage = following.next!;
}
moreResults = following.next != null;
upsertAllConnections(results.values);
notifyListeners();
}, onError: (error) {
_logger.severe('Error getting followers data: $error');
});