TF-3334 Remove Email/get of mark as read & mark as star action

This commit is contained in:
dab246
2024-12-19 00:50:13 +07:00
committed by Dat H. Pham
parent 75231636e2
commit eb51e9b3b1
27 changed files with 419 additions and 345 deletions
@@ -43,7 +43,12 @@ abstract class EmailDataSource {
}
);
Future<List<Email>> markAsRead(Session session, AccountId accountId, List<Email> emails, ReadActions readActions);
Future<List<EmailId>> markAsRead(
Session session,
AccountId accountId,
List<EmailId> emailIds,
ReadActions readActions,
);
Future<List<DownloadTaskId>> downloadAttachments(
List<Attachment> attachments,
@@ -72,10 +77,10 @@ abstract class EmailDataSource {
Future<List<EmailId>> moveToMailbox(Session session, AccountId accountId, MoveToMailboxRequest moveRequest);
Future<List<Email>> markAsStar(
Future<List<EmailId>> markAsStar(
Session session,
AccountId accountId,
List<Email> emails,
List<EmailId> emailIds,
MarkStarAction markStarAction
);
@@ -144,7 +149,7 @@ abstract class EmailDataSource {
Future<EmailRecoveryAction> getRestoredDeletedMessage(EmailRecoveryActionId emailRecoveryActionId);
Future<Email> storeEventAttendanceStatus(
Future<void> storeEventAttendanceStatus(
Session session,
AccountId accountId,
EmailId emailId,
@@ -75,14 +75,14 @@ class EmailDataSourceImpl extends EmailDataSource {
}
@override
Future<List<Email>> markAsRead(
Future<List<EmailId>> markAsRead(
Session session,
AccountId accountId,
List<Email> emails,
ReadActions readActions
List<EmailId> emailIds,
ReadActions readActions,
) {
return Future.sync(() async {
return await emailAPI.markAsRead(session, accountId, emails, readActions);
return await emailAPI.markAsRead(session, accountId, emailIds, readActions);
}).catchError(_exceptionThrower.throwException);
}
@@ -119,9 +119,19 @@ class EmailDataSourceImpl extends EmailDataSource {
}
@override
Future<List<Email>> markAsStar(Session session, AccountId accountId, List<Email> emails, MarkStarAction markStarAction) {
Future<List<EmailId>> markAsStar(
Session session,
AccountId accountId,
List<EmailId> emailIds,
MarkStarAction markStarAction,
) {
return Future.sync(() async {
return await emailAPI.markAsStar(session, accountId, emails, markStarAction);
return await emailAPI.markAsStar(
session,
accountId,
emailIds,
markStarAction,
);
}).catchError(_exceptionThrower.throwException);
}
@@ -318,7 +328,7 @@ class EmailDataSourceImpl extends EmailDataSource {
}
@override
Future<Email> storeEventAttendanceStatus(
Future<void> storeEventAttendanceStatus(
Session session,
AccountId accountId,
EmailId emailId,
@@ -120,12 +120,17 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
}
@override
Future<List<Email>> markAsRead(Session session, AccountId accountId, List<Email> emails, ReadActions readActions) {
Future<List<EmailId>> markAsRead(
Session session,
AccountId accountId,
List<EmailId> emailIds,
ReadActions readActions,
) {
throw UnimplementedError();
}
@override
Future<List<Email>> markAsStar(Session session, AccountId accountId, List<Email> emails, MarkStarAction markStarAction) {
Future<List<EmailId>> markAsStar(Session session, AccountId accountId, List<EmailId> emailIds, MarkStarAction markStarAction) {
throw UnimplementedError();
}
+52 -55
View File
@@ -44,13 +44,11 @@ import 'package:model/account/authentication_type.dart';
import 'package:model/download/download_task_id.dart';
import 'package:model/email/attachment.dart';
import 'package:model/email/email_action_type.dart';
import 'package:model/email/email_property.dart';
import 'package:model/email/mark_star_action.dart';
import 'package:model/email/read_actions.dart';
import 'package:model/extensions/email_extension.dart';
import 'package:model/extensions/email_id_extensions.dart';
import 'package:model/extensions/keyword_identifier_extension.dart';
import 'package:model/extensions/list_email_extension.dart';
import 'package:model/extensions/list_email_id_extension.dart';
import 'package:model/extensions/mailbox_id_extension.dart';
import 'package:model/extensions/session_extension.dart';
@@ -239,24 +237,18 @@ class EmailAPI with HandleSetErrorMixin {
}
}
Future<List<Email>> markAsRead(
Future<List<EmailId>> markAsRead(
Session session,
AccountId accountId,
List<Email> emails,
ReadActions readActions
List<EmailId> emailIds,
ReadActions readActions,
) async {
final setEmailMethod = SetEmailMethod(accountId)
..addUpdates(emails.listEmailIds.generateMapUpdateObjectMarkAsRead(readActions));
final getEmailMethod = GetEmailMethod(accountId)
..addIds(emails.listEmailIds.toIds().toSet())
..addProperties(Properties({EmailProperty.keywords}));
..addUpdates(emailIds.generateMapUpdateObjectMarkAsRead(readActions));
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
requestBuilder.invocation(setEmailMethod);
final getEmailInvocation = requestBuilder.invocation(getEmailMethod);
final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
final capabilities = setEmailMethod.requiredCapabilities
.toCapabilitiesSupportTeamMailboxes(session, accountId);
@@ -266,15 +258,22 @@ class EmailAPI with HandleSetErrorMixin {
.build()
.execute();
final getEmailResponse = response.parse<GetEmailResponse>(
getEmailInvocation.methodCallId,
GetEmailResponse.deserialize);
final setEmailResponse = response.parse<SetEmailResponse>(
setEmailInvocation.methodCallId,
SetEmailResponse.deserialize,
);
return Future.sync(() async {
return getEmailResponse!.list;
}).catchError((error) {
throw error;
});
final emailIdUpdated = setEmailResponse?.updated
?.keys
.map((id) => EmailId(id))
.toList() ?? [];
final mapErrors = handleSetResponse([setEmailResponse]);
if (emailIdUpdated.isNotEmpty) {
return emailIdUpdated;
} else {
throw SetMethodException(mapErrors);
}
}
Future<List<DownloadTaskId>> downloadAttachments(
@@ -449,24 +448,18 @@ class EmailAPI with HandleSetErrorMixin {
return listEmailIdRequest.where((emailId) => listUpdated.expand((e) => e).toList().contains(emailId.id)).toList();
}
Future<List<Email>> markAsStar(
Future<List<EmailId>> markAsStar(
Session session,
AccountId accountId,
List<Email> emails,
List<EmailId> emailIds,
MarkStarAction markStarAction
) async {
final setEmailMethod = SetEmailMethod(accountId)
..addUpdates(emails.listEmailIds.generateMapUpdateObjectMarkAsStar(markStarAction));
final getEmailMethod = GetEmailMethod(accountId)
..addIds(emails.listEmailIds.toIds().toSet())
..addProperties(Properties({EmailProperty.keywords}));
..addUpdates(emailIds.generateMapUpdateObjectMarkAsStar(markStarAction));
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
requestBuilder.invocation(setEmailMethod);
final getEmailInvocation = requestBuilder.invocation(getEmailMethod);
final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
final capabilities = setEmailMethod.requiredCapabilities
.toCapabilitiesSupportTeamMailboxes(session, accountId);
@@ -476,15 +469,22 @@ class EmailAPI with HandleSetErrorMixin {
.build()
.execute();
final getEmailResponse = response.parse<GetEmailResponse>(
getEmailInvocation.methodCallId,
GetEmailResponse.deserialize);
final setEmailResponse = response.parse<SetEmailResponse>(
setEmailInvocation.methodCallId,
SetEmailResponse.deserialize,
);
return Future.sync(() async {
return getEmailResponse!.list;
}).catchError((error) {
throw error;
});
final emailIdUpdated = setEmailResponse?.updated
?.keys
.map((id) => EmailId(id))
.toList() ?? [];
final mapErrors = handleSetResponse([setEmailResponse]);
if (emailIdUpdated.isNotEmpty) {
return emailIdUpdated;
} else {
throw SetMethodException(mapErrors);
}
}
Future<Email> saveEmailAsDrafts(
@@ -756,7 +756,7 @@ class EmailAPI with HandleSetErrorMixin {
}
}
Future<Email> storeEventAttendanceStatus(
Future<void> storeEventAttendanceStatus(
Session session,
AccountId accountId,
EmailId emailId,
@@ -765,15 +765,9 @@ class EmailAPI with HandleSetErrorMixin {
final setEmailMethod = SetEmailMethod(accountId)
..addUpdates(emailId.generateMapUpdateObjectEventAttendanceStatus(eventActionType));
final getEmailMethod = GetEmailMethod(accountId)
..addIds({emailId.id})
..addProperties(Properties({EmailProperty.keywords}));
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
requestBuilder.invocation(setEmailMethod);
final getEmailInvocation = requestBuilder.invocation(getEmailMethod);
final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
final capabilities = setEmailMethod.requiredCapabilities
.toCapabilitiesSupportTeamMailboxes(session, accountId);
@@ -783,16 +777,19 @@ class EmailAPI with HandleSetErrorMixin {
.build()
.execute();
final getEmailResponse = response.parse<GetEmailResponse>(
getEmailInvocation.methodCallId,
GetEmailResponse.deserialize);
final setEmailResponse = response.parse<SetEmailResponse>(
setEmailInvocation.methodCallId,
SetEmailResponse.deserialize,
);
final listEmails = getEmailResponse?.list ?? [];
final emailIdUpdated = setEmailResponse?.updated
?.keys
.map((id) => EmailId(id))
.toList() ?? [];
final mapErrors = handleSetResponse([setEmailResponse]);
if (listEmails.isNotEmpty) {
return listEmails.first;
} else {
throw NotFoundEmailException();
if (emailIdUpdated.isEmpty) {
throw SetMethodException(mapErrors);
}
}
}
@@ -83,13 +83,18 @@ class EmailRepositoryImpl extends EmailRepository {
}
@override
Future<List<Email>> markAsRead(
Future<List<EmailId>> markAsRead(
Session session,
AccountId accountId,
List<Email> emails,
ReadActions readActions
List<EmailId> emailIds,
ReadActions readActions,
) {
return emailDataSource[DataSourceType.network]!.markAsRead(session, accountId, emails, readActions);
return emailDataSource[DataSourceType.network]!.markAsRead(
session,
accountId,
emailIds,
readActions,
);
}
@override
@@ -124,13 +129,18 @@ class EmailRepositoryImpl extends EmailRepository {
}
@override
Future<List<Email>> markAsStar(
Future<List<EmailId>> markAsStar(
Session session,
AccountId accountId,
List<Email> emails,
List<EmailId> emailIds,
MarkStarAction markStarAction
) {
return emailDataSource[DataSourceType.network]!.markAsStar(session, accountId, emails, markStarAction);
return emailDataSource[DataSourceType.network]!.markAsStar(
session,
accountId,
emailIds,
markStarAction,
);
}
@override
@@ -303,7 +313,7 @@ class EmailRepositoryImpl extends EmailRepository {
}
@override
Future<Email> storeEventAttendanceStatus(
Future<void> storeEventAttendanceStatus(
Session session,
AccountId accountId,
EmailId emailId,