mirror of
https://gitlab.com/mysocialportal/relatica
synced 2024-10-18 13:33:32 +00:00
Rework notifications refresh initial page algorithm to make more robust
This commit is contained in:
parent
951f50ee7a
commit
119fe9ca16
1 changed files with 40 additions and 20 deletions
|
@ -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'));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue