Rework notifications refresh initial page algorithm to make more robust

codemagic-setup
Hank Grabowski 2023-03-22 13:28:05 -04:00
rodzic 951f50ee7a
commit 119fe9ca16
1 zmienionych plików z 40 dodań i 20 usunięć

Wyświetl plik

@ -80,32 +80,52 @@ class NotificationsManager extends ChangeNotifier {
continue;
}
final page = _pm.pages[i];
PagingData? pd;
if (i == 0) {
if (page.next == null) {
_logger.severe(
"Expected first page to have a next page so can query on this page of data but doesn't exist.");
continue;
}
final response = await _clientGetNotificationsRequest(page.next!);
response.match(
onSuccess: (response) => pd = response.previous,
onError: (error) =>
_logger.severe('Error getting previous page: $error'));
if (pd == null && page.previous == null) {
_logger.severe(
'Next page returned no results and no previous page so need to re-initalize');
} else {
final response = await _clientGetNotificationsRequest(pd!);
PagingData? pd;
bool initializedFirstPage = false;
if (page.next != null) {
final response = await _clientGetNotificationsRequest(page.next!);
response.match(
onSuccess: (response) => pd = response.next,
onSuccess: (response) => pd = response.previous,
onError: (error) =>
_logger.severe('Error getting previous page: $error'));
if (pd != null) {
final response = await _clientGetNotificationsRequest(pd!);
response.match(
onSuccess: (response) {
initializedFirstPage = true;
notificationsFromRefresh.addAll(response.data);
},
onError: (error) =>
_logger.severe('Error getting previous page: $error'));
} else if (pd == null && page.previous != null) {
final response = await _clientGetNotificationsRequest(
page.previous!)
.andThenAsync((previousData) async => previousData.next !=
null
? await _clientGetNotificationsRequest(previousData.next!)
: buildErrorResult(
type: ErrorType.rangeError,
message: 'No "next" page from previous data either'));
response.match(
onSuccess: (response) {
initializedFirstPage = true;
notificationsFromRefresh.addAll(response.data);
},
onError: (error) =>
_logger.severe('Error getting previous page: $error'));
} else if (pd == null && page.previous == null) {
_logger.severe(
'Next page returned no results and no previous page so will need to re-initalize');
}
} else {
_logger.severe(
'There is no next page to query so will be forced to reset');
}
if (pd == null) {
if (!initializedFirstPage) {
_logger.severe(
'Previous and next page both returned nulls so need to reinitialize');
'Unable to determine call to rebuild initial page so resetting');
_pm.clear();
final result = await _pm.initialize(initialPull);
result.andThenSuccess(
@ -126,7 +146,7 @@ class NotificationsManager extends ChangeNotifier {
onSuccess: (response) =>
notificationsFromRefresh.addAll(response.data),
onError: (error) =>
_logger.severe('Error getting previous page: $error'));
_logger.severe('Error getting next page: $error'));
}
}