From 8bbe8b0bd7ffe76ff3bf95aef9c12934c719a6e9 Mon Sep 17 00:00:00 2001 From: Dat PHAM HOANG Date: Wed, 16 Mar 2022 21:56:07 +0700 Subject: [PATCH] TF-340 Request to back-end with /query + /get in the case local cache has size < defaultLimit --- .../data/repository/thread_repository_impl.dart | 17 +++++++++++++---- .../thread/presentation/thread_controller.dart | 6 ++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/features/thread/data/repository/thread_repository_impl.dart b/lib/features/thread/data/repository/thread_repository_impl.dart index c6e92d9be..e15412844 100644 --- a/lib/features/thread/data/repository/thread_repository_impl.dart +++ b/lib/features/thread/data/repository/thread_repository_impl.dart @@ -1,6 +1,5 @@ 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/core/filter/filter.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/mail/email/email.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/extensions/state_extension.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/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/repository/thread_repository.dart'; -import 'package:tmail_ui_user/features/mailbox/data/extensions/state_extension.dart'; class ThreadRepositoryImpl extends ThreadRepository { @@ -35,6 +36,7 @@ class ThreadRepositoryImpl extends ThreadRepository { Properties? propertiesUpdated, } ) async* { + log('ThreadRepositoryImpl::getAllEmail(): filter = ${emailFilter?.mailboxId}'); final localEmailResponse = await Future.wait([ mapDataSource[DataSourceType.local]!.getAllEmailCache( inMailboxId: emailFilter?.mailboxId, @@ -47,7 +49,8 @@ class ThreadRepositoryImpl extends ThreadRepository { EmailsResponse? networkEmailResponse; - if (!localEmailResponse.hasEmails()) { + if (!localEmailResponse.hasEmails() + || (localEmailResponse.emailList?.length ?? 0) < ThreadConstants.defaultLimit.value) { networkEmailResponse = await mapDataSource[DataSourceType.network]!.getAllEmail( accountId, limit: limit, @@ -60,7 +63,8 @@ class ThreadRepositoryImpl extends ThreadRepository { yield localEmailResponse; } - if (localEmailResponse.hasState()) { + if (localEmailResponse.hasState() && networkEmailResponse == null) { + log('ThreadRepositoryImpl::getAllEmail(): local has state: ${localEmailResponse.state}'); EmailChangeResponse? emailChangeResponse; bool hasMoreChanges = true; State? sinceState = localEmailResponse.state!; @@ -122,6 +126,10 @@ class ThreadRepositoryImpl extends ThreadRepository { 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; } @@ -241,6 +249,7 @@ class ThreadRepositoryImpl extends ThreadRepository { EmailId? lastEmailId, } ) async* { + log('ThreadRepositoryImpl::loadMoreEmails()'); final emailResponse = await mapDataSource[DataSourceType.network]!.getAllEmail( accountId, limit: limit, diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 0af457226..01122becb 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -118,6 +118,7 @@ class ThreadController extends BaseController { super.onReady(); mailboxDashBoardController.selectedMailbox.listen((selectedMailbox) { if (_currentMailboxId != selectedMailbox?.id) { + log('ThreadController::onReady(): selectMailbox: ${selectedMailbox?.name?.name}(${selectedMailbox?.id})'); _currentMailboxId = selectedMailbox?.id; _resetToOriginalValue(); _getAllEmail(); @@ -230,11 +231,13 @@ class ThreadController extends BaseController { } void _getAllEmailSuccess(GetAllEmailSuccess success) { + log('ThreadController::_getAllEmailSuccess(): ${success.emailList.length}'); _currentEmailState = success.currentEmailState; emailList.value = success.emailList; } void _getAllEmailAction(AccountId accountId, {MailboxId? mailboxId}) { + log('ThreadController::_getAllEmailAction(): mailboxId = $mailboxId'); consumeState(_getEmailsInMailboxInteractor.execute( accountId, limit: ThreadConstants.defaultLimit, @@ -338,8 +341,11 @@ class ThreadController extends BaseController { } void _loadMoreEmailsSuccess(LoadMoreEmailsSuccess success) { + log('ThreadController::_loadMoreEmailsSuccess(): [BEFORE] totalEmailList = ${emailList.length}'); if (success.emailList.isNotEmpty) { + log('ThreadController::_loadMoreEmailsSuccess(): add success: ${success.emailList.length}'); emailList.addAll(success.emailList); + log('ThreadController::_loadMoreEmailsSuccess(): [AFTER] totalEmailList = ${emailList.length}'); } else { canLoadMore = false; }