TF-340 Request to back-end with /query + /get in the case local cache has size < defaultLimit
This commit is contained in:
committed by
Dat H. Pham
parent
baedd9597a
commit
8bbe8b0bd7
@@ -1,6 +1,5 @@
|
|||||||
|
|
||||||
import 'package:core/core.dart';
|
import 'package:core/core.dart';
|
||||||
import 'package:model/model.dart';
|
|
||||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/filter/filter.dart';
|
import 'package:jmap_dart_client/jmap/core/filter/filter.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||||
@@ -9,13 +8,15 @@ import 'package:jmap_dart_client/jmap/core/state.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
|
import 'package:model/model.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart';
|
import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/data/extensions/state_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/data/model/state_type.dart';
|
import 'package:tmail_ui_user/features/mailbox/data/model/state_type.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/data/datasource/thread_datasource.dart';
|
import 'package:tmail_ui_user/features/thread/data/datasource/thread_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/data/model/email_change_response.dart';
|
import 'package:tmail_ui_user/features/thread/data/model/email_change_response.dart';
|
||||||
|
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
|
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/data/extensions/state_extension.dart';
|
|
||||||
|
|
||||||
class ThreadRepositoryImpl extends ThreadRepository {
|
class ThreadRepositoryImpl extends ThreadRepository {
|
||||||
|
|
||||||
@@ -35,6 +36,7 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
|||||||
Properties? propertiesUpdated,
|
Properties? propertiesUpdated,
|
||||||
}
|
}
|
||||||
) async* {
|
) async* {
|
||||||
|
log('ThreadRepositoryImpl::getAllEmail(): filter = ${emailFilter?.mailboxId}');
|
||||||
final localEmailResponse = await Future.wait([
|
final localEmailResponse = await Future.wait([
|
||||||
mapDataSource[DataSourceType.local]!.getAllEmailCache(
|
mapDataSource[DataSourceType.local]!.getAllEmailCache(
|
||||||
inMailboxId: emailFilter?.mailboxId,
|
inMailboxId: emailFilter?.mailboxId,
|
||||||
@@ -47,7 +49,8 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
|||||||
|
|
||||||
EmailsResponse? networkEmailResponse;
|
EmailsResponse? networkEmailResponse;
|
||||||
|
|
||||||
if (!localEmailResponse.hasEmails()) {
|
if (!localEmailResponse.hasEmails()
|
||||||
|
|| (localEmailResponse.emailList?.length ?? 0) < ThreadConstants.defaultLimit.value) {
|
||||||
networkEmailResponse = await mapDataSource[DataSourceType.network]!.getAllEmail(
|
networkEmailResponse = await mapDataSource[DataSourceType.network]!.getAllEmail(
|
||||||
accountId,
|
accountId,
|
||||||
limit: limit,
|
limit: limit,
|
||||||
@@ -60,7 +63,8 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
|||||||
yield localEmailResponse;
|
yield localEmailResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (localEmailResponse.hasState()) {
|
if (localEmailResponse.hasState() && networkEmailResponse == null) {
|
||||||
|
log('ThreadRepositoryImpl::getAllEmail(): local has state: ${localEmailResponse.state}');
|
||||||
EmailChangeResponse? emailChangeResponse;
|
EmailChangeResponse? emailChangeResponse;
|
||||||
bool hasMoreChanges = true;
|
bool hasMoreChanges = true;
|
||||||
State? sinceState = localEmailResponse.state!;
|
State? sinceState = localEmailResponse.state!;
|
||||||
@@ -122,6 +126,10 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
|||||||
return EmailsResponse(emailList: response.first, state: response.last);
|
return EmailsResponse(emailList: response.first, state: response.last);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
newEmailResponse.emailList?.forEach((element) {
|
||||||
|
log('ThreadRepositoryImpl::getAllEmail(): filter = ${emailFilter?.mailboxId} [LOCAL] final yield: ${element.subject}:${element.id.id}');
|
||||||
|
});
|
||||||
|
|
||||||
yield newEmailResponse;
|
yield newEmailResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -241,6 +249,7 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
|||||||
EmailId? lastEmailId,
|
EmailId? lastEmailId,
|
||||||
}
|
}
|
||||||
) async* {
|
) async* {
|
||||||
|
log('ThreadRepositoryImpl::loadMoreEmails()');
|
||||||
final emailResponse = await mapDataSource[DataSourceType.network]!.getAllEmail(
|
final emailResponse = await mapDataSource[DataSourceType.network]!.getAllEmail(
|
||||||
accountId,
|
accountId,
|
||||||
limit: limit,
|
limit: limit,
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ class ThreadController extends BaseController {
|
|||||||
super.onReady();
|
super.onReady();
|
||||||
mailboxDashBoardController.selectedMailbox.listen((selectedMailbox) {
|
mailboxDashBoardController.selectedMailbox.listen((selectedMailbox) {
|
||||||
if (_currentMailboxId != selectedMailbox?.id) {
|
if (_currentMailboxId != selectedMailbox?.id) {
|
||||||
|
log('ThreadController::onReady(): selectMailbox: ${selectedMailbox?.name?.name}(${selectedMailbox?.id})');
|
||||||
_currentMailboxId = selectedMailbox?.id;
|
_currentMailboxId = selectedMailbox?.id;
|
||||||
_resetToOriginalValue();
|
_resetToOriginalValue();
|
||||||
_getAllEmail();
|
_getAllEmail();
|
||||||
@@ -230,11 +231,13 @@ class ThreadController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _getAllEmailSuccess(GetAllEmailSuccess success) {
|
void _getAllEmailSuccess(GetAllEmailSuccess success) {
|
||||||
|
log('ThreadController::_getAllEmailSuccess(): ${success.emailList.length}');
|
||||||
_currentEmailState = success.currentEmailState;
|
_currentEmailState = success.currentEmailState;
|
||||||
emailList.value = success.emailList;
|
emailList.value = success.emailList;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _getAllEmailAction(AccountId accountId, {MailboxId? mailboxId}) {
|
void _getAllEmailAction(AccountId accountId, {MailboxId? mailboxId}) {
|
||||||
|
log('ThreadController::_getAllEmailAction(): mailboxId = $mailboxId');
|
||||||
consumeState(_getEmailsInMailboxInteractor.execute(
|
consumeState(_getEmailsInMailboxInteractor.execute(
|
||||||
accountId,
|
accountId,
|
||||||
limit: ThreadConstants.defaultLimit,
|
limit: ThreadConstants.defaultLimit,
|
||||||
@@ -338,8 +341,11 @@ class ThreadController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _loadMoreEmailsSuccess(LoadMoreEmailsSuccess success) {
|
void _loadMoreEmailsSuccess(LoadMoreEmailsSuccess success) {
|
||||||
|
log('ThreadController::_loadMoreEmailsSuccess(): [BEFORE] totalEmailList = ${emailList.length}');
|
||||||
if (success.emailList.isNotEmpty) {
|
if (success.emailList.isNotEmpty) {
|
||||||
|
log('ThreadController::_loadMoreEmailsSuccess(): add success: ${success.emailList.length}');
|
||||||
emailList.addAll(success.emailList);
|
emailList.addAll(success.emailList);
|
||||||
|
log('ThreadController::_loadMoreEmailsSuccess(): [AFTER] totalEmailList = ${emailList.length}');
|
||||||
} else {
|
} else {
|
||||||
canLoadMore = false;
|
canLoadMore = false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user