TF-1604: Add requiredCapabilities support TeamMailbox for GetEmailMethod
(cherry picked from commit 3922303e63a8e910511361019a54ea13801e3f92)
This commit is contained in:
+15
-12
@@ -5,6 +5,7 @@ import 'package:dartz/dartz.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';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
|
||||
import 'package:model/extensions/email_extension.dart';
|
||||
@@ -18,23 +19,25 @@ class RefreshChangesSearchEmailInteractor {
|
||||
RefreshChangesSearchEmailInteractor(this.threadRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
AccountId accountId,
|
||||
{
|
||||
UnsignedInt? limit,
|
||||
Set<Comparator>? sort,
|
||||
Filter? filter,
|
||||
Properties? properties,
|
||||
}
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
{
|
||||
UnsignedInt? limit,
|
||||
Set<Comparator>? sort,
|
||||
Filter? filter,
|
||||
Properties? properties,
|
||||
}
|
||||
) async* {
|
||||
try {
|
||||
yield Right(RefreshingChangeSearchEmailState());
|
||||
|
||||
final emailList = await threadRepository.searchEmails(
|
||||
accountId,
|
||||
limit: limit,
|
||||
sort: sort,
|
||||
filter: filter,
|
||||
properties: properties);
|
||||
session,
|
||||
accountId,
|
||||
limit: limit,
|
||||
sort: sort,
|
||||
filter: filter,
|
||||
properties: properties);
|
||||
|
||||
final presentationEmailList = emailList
|
||||
.map((email) => email.toPresentationEmail())
|
||||
|
||||
@@ -172,8 +172,8 @@ class SearchEmailController extends BaseController
|
||||
textOption: value.isNotEmpty ? Some(SearchQuery(value)) : const None(),
|
||||
beforeOption: const None()
|
||||
);
|
||||
if (value.isNotEmpty && accountId != null) {
|
||||
listSuggestionSearch.value = await quickSearchEmails(accountId: accountId!);
|
||||
if (value.isNotEmpty && session != null && accountId != null) {
|
||||
listSuggestionSearch.value = await quickSearchEmails(session: session!, accountId: accountId!);
|
||||
} else {
|
||||
listSuggestionSearch.clear();
|
||||
}
|
||||
@@ -215,12 +215,13 @@ class SearchEmailController extends BaseController
|
||||
}
|
||||
|
||||
void _refreshEmailChanges() {
|
||||
if (searchIsRunning.isTrue && accountId != null) {
|
||||
if (searchIsRunning.isTrue && session != null && accountId != null) {
|
||||
final limit = listResultSearch.isNotEmpty
|
||||
? UnsignedInt(listResultSearch.length)
|
||||
: ThreadConstants.defaultLimit;
|
||||
_updateSimpleSearchFilter(beforeOption: const None());
|
||||
consumeState(_refreshChangesSearchEmailInteractor.execute(
|
||||
session!,
|
||||
accountId!,
|
||||
limit: limit,
|
||||
sort: <Comparator>{}
|
||||
@@ -259,15 +260,20 @@ class SearchEmailController extends BaseController
|
||||
: <RecentSearch>[]));
|
||||
}
|
||||
|
||||
Future<List<PresentationEmail>> quickSearchEmails({required AccountId accountId}) async {
|
||||
Future<List<PresentationEmail>> quickSearchEmails({
|
||||
required AccountId accountId,
|
||||
required Session session,
|
||||
}) async {
|
||||
return _quickSearchEmailInteractor
|
||||
.execute(accountId,
|
||||
limit: UnsignedInt(5),
|
||||
.execute(
|
||||
session,
|
||||
accountId,
|
||||
limit: UnsignedInt(5),
|
||||
sort: <Comparator>{}..add(
|
||||
EmailComparator(EmailComparatorProperty.receivedAt)
|
||||
..setIsAscending(false)),
|
||||
filter: simpleSearchFilter.value.mappingToEmailFilterCondition(),
|
||||
properties: ThreadConstants.propertiesQuickSearch)
|
||||
EmailComparator(EmailComparatorProperty.receivedAt)
|
||||
..setIsAscending(false)),
|
||||
filter: simpleSearchFilter.value.mappingToEmailFilterCondition(),
|
||||
properties: ThreadConstants.propertiesQuickSearch)
|
||||
.then((result) => result.fold(
|
||||
(failure) => <PresentationEmail>[],
|
||||
(success) => success is QuickSearchEmailSuccess
|
||||
@@ -282,12 +288,13 @@ class SearchEmailController extends BaseController
|
||||
void _searchEmailAction(BuildContext context) {
|
||||
FocusScope.of(context).unfocus();
|
||||
|
||||
if (accountId != null) {
|
||||
if (session != null && accountId != null) {
|
||||
canSearchMore = true;
|
||||
searchIsRunning.value = true;
|
||||
cancelSelectionMode(context);
|
||||
|
||||
consumeState(_searchEmailInteractor.execute(
|
||||
session!,
|
||||
accountId!,
|
||||
limit: ThreadConstants.defaultLimit,
|
||||
sort: <Comparator>{}
|
||||
@@ -327,19 +334,20 @@ class SearchEmailController extends BaseController
|
||||
}
|
||||
|
||||
void searchMoreEmailsAction() {
|
||||
if (canSearchMore && accountId != null) {
|
||||
if (canSearchMore && session != null && accountId != null) {
|
||||
final lastEmail = listResultSearch.last;
|
||||
_updateSimpleSearchFilter(beforeOption: optionOf(lastEmail.receivedAt));
|
||||
|
||||
consumeState(_searchMoreEmailInteractor.execute(
|
||||
accountId!,
|
||||
limit: ThreadConstants.defaultLimit,
|
||||
sort: <Comparator>{}
|
||||
..add(EmailComparator(EmailComparatorProperty.receivedAt)
|
||||
..setIsAscending(false)),
|
||||
filter: simpleSearchFilter.value.mappingToEmailFilterCondition(),
|
||||
properties: ThreadConstants.propertiesDefault,
|
||||
lastEmailId: lastEmail.id
|
||||
session!,
|
||||
accountId!,
|
||||
limit: ThreadConstants.defaultLimit,
|
||||
sort: <Comparator>{}
|
||||
..add(EmailComparator(EmailComparatorProperty.receivedAt)
|
||||
..setIsAscending(false)),
|
||||
filter: simpleSearchFilter.value.mappingToEmailFilterCondition(),
|
||||
properties: ThreadConstants.propertiesDefault,
|
||||
lastEmailId: lastEmail.id
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user