TF-1604: Add requiredCapabilities support TeamMailbox for GetEmailMethod
(cherry picked from commit 3922303e63a8e910511361019a54ea13801e3f92)
This commit is contained in:
@@ -2,9 +2,11 @@ import 'dart:async';
|
||||
|
||||
import 'package:jmap_dart_client/http/http_client.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.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/request/reference_path.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
||||
@@ -17,6 +19,7 @@ import 'package:jmap_dart_client/jmap/mail/email/get/get_email_response.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/query/query_email_method.dart';
|
||||
import 'package:tmail_ui_user/features/thread/data/model/email_change_response.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart';
|
||||
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
||||
|
||||
class ThreadAPI {
|
||||
|
||||
@@ -24,7 +27,25 @@ class ThreadAPI {
|
||||
|
||||
ThreadAPI(this.httpClient);
|
||||
|
||||
Set<CapabilityIdentifier> _capabilitiesForEmailMethod(Session session, AccountId accountId) {
|
||||
final getMailboxCreated = GetEmailMethod(accountId);
|
||||
try {
|
||||
requireCapability(
|
||||
session,
|
||||
accountId,
|
||||
[CapabilityIdentifier.jmapTeamMailboxes]);
|
||||
return {
|
||||
CapabilityIdentifier.jmapCore,
|
||||
CapabilityIdentifier.jmapMail,
|
||||
CapabilityIdentifier.jmapTeamMailboxes
|
||||
};
|
||||
} catch (_) {
|
||||
return getMailboxCreated.requiredCapabilities;
|
||||
}
|
||||
}
|
||||
|
||||
Future<EmailsResponse> getAllEmail(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
{
|
||||
UnsignedInt? limit,
|
||||
@@ -58,7 +79,7 @@ class ThreadAPI {
|
||||
final getEmailInvocation = jmapRequestBuilder.invocation(getEmailMethod);
|
||||
|
||||
final result = await (jmapRequestBuilder
|
||||
..usings(getEmailMethod.requiredCapabilities))
|
||||
..usings(_capabilitiesForEmailMethod(session, accountId)))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
@@ -75,6 +96,7 @@ class ThreadAPI {
|
||||
}
|
||||
|
||||
Future<EmailChangeResponse> getChanges(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
State sinceState,
|
||||
{
|
||||
@@ -112,7 +134,7 @@ class ThreadAPI {
|
||||
final getEmailCreatedInvocation = jmapRequestBuilder.invocation(getEmailCreated);
|
||||
|
||||
final result = await (jmapRequestBuilder
|
||||
..usings(getEmailCreated.requiredCapabilities))
|
||||
..usings(_capabilitiesForEmailMethod(session, accountId)))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
@@ -140,7 +162,7 @@ class ThreadAPI {
|
||||
updatedProperties: propertiesUpdated);
|
||||
}
|
||||
|
||||
Future<Email> getEmailById(AccountId accountId, EmailId emailId, {Properties? properties}) async {
|
||||
Future<Email> getEmailById(Session session, AccountId accountId, EmailId emailId, {Properties? properties}) async {
|
||||
final processingInvocation = ProcessingInvocation();
|
||||
final jmapRequestBuilder = JmapRequestBuilder(httpClient, processingInvocation);
|
||||
|
||||
@@ -154,7 +176,7 @@ class ThreadAPI {
|
||||
final getEmailInvocation = jmapRequestBuilder.invocation(getEmailMethod);
|
||||
|
||||
final result = await (jmapRequestBuilder
|
||||
..usings(getEmailMethod.requiredCapabilities))
|
||||
..usings(_capabilitiesForEmailMethod(session, accountId)))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'package:core/utils/app_logger.dart';
|
||||
import 'package:core/utils/build_utils.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.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/sort/comparator.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_comparator.dart';
|
||||
@@ -25,15 +26,16 @@ class ThreadIsolateWorker {
|
||||
ThreadIsolateWorker(this._threadAPI, this._emailAPI, this._isolateExecutor);
|
||||
|
||||
Future<List<EmailId>> emptyTrashFolder(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
MailboxId mailboxId,
|
||||
Future<void> Function(List<EmailId>? newDestroyed) updateDestroyedEmailCache,
|
||||
) async {
|
||||
if (BuildUtils.isWeb) {
|
||||
return _emptyTrashFolderOnWeb(accountId, mailboxId, updateDestroyedEmailCache);
|
||||
return _emptyTrashFolderOnWeb(session, accountId, mailboxId, updateDestroyedEmailCache);
|
||||
} else {
|
||||
final result = await _isolateExecutor.execute(
|
||||
arg1: EmptyTrashFolderArguments(_threadAPI, _emailAPI, accountId, mailboxId),
|
||||
arg1: EmptyTrashFolderArguments(session, _threadAPI, _emailAPI, accountId, mailboxId),
|
||||
fun1: _emptyTrashFolderAction,
|
||||
notification: (value) {
|
||||
if (value is List<EmailId>) {
|
||||
@@ -52,12 +54,14 @@ class ThreadIsolateWorker {
|
||||
Email? lastEmail;
|
||||
|
||||
while (hasEmails) {
|
||||
final emailsResponse = await args.threadAPI.getAllEmail(args.accountId,
|
||||
sort: <Comparator>{}..add(
|
||||
EmailComparator(EmailComparatorProperty.receivedAt)
|
||||
..setIsAscending(false)),
|
||||
filter: EmailFilterCondition(inMailbox: args.trashMailboxId, before: lastEmail?.receivedAt),
|
||||
properties: Properties({EmailProperty.id}));
|
||||
final emailsResponse = await args.threadAPI.getAllEmail(
|
||||
args.session,
|
||||
args.accountId,
|
||||
sort: <Comparator>{}..add(
|
||||
EmailComparator(EmailComparatorProperty.receivedAt)
|
||||
..setIsAscending(false)),
|
||||
filter: EmailFilterCondition(inMailbox: args.trashMailboxId, before: lastEmail?.receivedAt),
|
||||
properties: Properties({EmailProperty.id}));
|
||||
|
||||
var newEmailList = emailsResponse.emailList ?? <Email>[];
|
||||
if (lastEmail != null) {
|
||||
@@ -89,6 +93,7 @@ class ThreadIsolateWorker {
|
||||
}
|
||||
|
||||
Future<List<EmailId>> _emptyTrashFolderOnWeb(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
MailboxId trashMailboxId,
|
||||
Future<void> Function(List<EmailId> newDestroyed) updateDestroyedEmailCache,
|
||||
@@ -99,12 +104,14 @@ class ThreadIsolateWorker {
|
||||
Email? lastEmail;
|
||||
|
||||
while (hasEmails) {
|
||||
final emailsResponse = await _threadAPI.getAllEmail(accountId,
|
||||
sort: <Comparator>{}..add(
|
||||
EmailComparator(EmailComparatorProperty.receivedAt)
|
||||
..setIsAscending(false)),
|
||||
filter: EmailFilterCondition(inMailbox: trashMailboxId, before: lastEmail?.receivedAt),
|
||||
properties: Properties({EmailProperty.id}));
|
||||
final emailsResponse = await _threadAPI.getAllEmail(
|
||||
session,
|
||||
accountId,
|
||||
sort: <Comparator>{}..add(
|
||||
EmailComparator(EmailComparatorProperty.receivedAt)
|
||||
..setIsAscending(false)),
|
||||
filter: EmailFilterCondition(inMailbox: trashMailboxId, before: lastEmail?.receivedAt),
|
||||
properties: Properties({EmailProperty.id}));
|
||||
|
||||
var newEmailList = emailsResponse.emailList ?? <Email>[];
|
||||
if (lastEmail != null) {
|
||||
|
||||
Reference in New Issue
Block a user