TF-2667 Add cancel button in progress send message dialog

This commit is contained in:
dab246
2024-03-12 12:53:41 +07:00
committed by Dat H. Pham
parent ae6341532c
commit f2b70aec48
16 changed files with 215 additions and 46 deletions
@@ -32,7 +32,10 @@ abstract class EmailDataSource {
Session session,
AccountId accountId,
EmailRequest emailRequest,
{CreateNewMailboxRequest? mailboxRequest}
{
CreateNewMailboxRequest? mailboxRequest,
CancelToken? cancelToken
}
);
Future<List<Email>> markAsRead(Session session, AccountId accountId, List<Email> emails, ReadActions readActions);
@@ -79,7 +82,12 @@ abstract class EmailDataSource {
Future<List<EmailId>> deleteMultipleEmailsPermanently(Session session, AccountId accountId, List<EmailId> emailIds);
Future<bool> deleteEmailPermanently(Session session, AccountId accountId, EmailId emailId);
Future<bool> deleteEmailPermanently(
Session session,
AccountId accountId,
EmailId emailId,
{CancelToken? cancelToken}
);
Future<void> storeDetailedNewEmail(Session session, AccountId accountId, DetailedEmail detailedEmail);
@@ -46,10 +46,19 @@ class EmailDataSourceImpl extends EmailDataSource {
Session session,
AccountId accountId,
EmailRequest emailRequest,
{CreateNewMailboxRequest? mailboxRequest}
{
CreateNewMailboxRequest? mailboxRequest,
CancelToken? cancelToken,
}
) async {
try {
return await emailAPI.sendEmail(session, accountId, emailRequest, mailboxRequest: mailboxRequest);
return await emailAPI.sendEmail(
session,
accountId,
emailRequest,
mailboxRequest: mailboxRequest,
cancelToken: cancelToken
);
} catch (error, stackTrace) {
return await _sendEmailExceptionThrower.throwException(error, stackTrace);
}
@@ -157,9 +166,19 @@ class EmailDataSourceImpl extends EmailDataSource {
}
@override
Future<bool> deleteEmailPermanently(Session session, AccountId accountId, EmailId emailId) {
Future<bool> deleteEmailPermanently(
Session session,
AccountId accountId,
EmailId emailId,
{CancelToken? cancelToken}
) {
return Future.sync(() async {
return await emailAPI.deleteEmailPermanently(session, accountId, emailId);
return await emailAPI.deleteEmailPermanently(
session,
accountId,
emailId,
cancelToken: cancelToken
);
}).catchError(_exceptionThrower.throwException);
}
@@ -71,7 +71,12 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
);
@override
Future<bool> deleteEmailPermanently(Session session, AccountId accountId, EmailId emailId) {
Future<bool> deleteEmailPermanently(
Session session,
AccountId accountId,
EmailId emailId,
{CancelToken? cancelToken}
) {
throw UnimplementedError();
}
@@ -134,7 +139,15 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
}
@override
Future<bool> sendEmail(Session session, AccountId accountId, EmailRequest emailRequest, {CreateNewMailboxRequest? mailboxRequest}) {
Future<bool> sendEmail(
Session session,
AccountId accountId,
EmailRequest emailRequest,
{
CreateNewMailboxRequest? mailboxRequest,
CancelToken? cancelToken
}
) {
throw UnimplementedError();
}
+12 -4
View File
@@ -117,7 +117,10 @@ class EmailAPI with HandleSetErrorMixin {
Session session,
AccountId accountId,
EmailRequest emailRequest,
{CreateNewMailboxRequest? mailboxRequest}
{
CreateNewMailboxRequest? mailboxRequest,
CancelToken? cancelToken,
}
) async {
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
@@ -199,7 +202,7 @@ class EmailAPI with HandleSetErrorMixin {
final response = await (requestBuilder
..usings(capabilities))
.build()
.execute();
.execute(cancelToken: cancelToken);
final setEmailResponse = response.parse<SetEmailResponse>(
setEmailInvocation.methodCallId,
@@ -606,7 +609,12 @@ class EmailAPI with HandleSetErrorMixin {
return List.empty();
}
Future<bool> deleteEmailPermanently(Session session, AccountId accountId, EmailId emailId) async {
Future<bool> deleteEmailPermanently(
Session session,
AccountId accountId,
EmailId emailId,
{CancelToken? cancelToken}
) async {
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
final setEmailMethod = SetEmailMethod(accountId)
..addDestroy({emailId.id});
@@ -619,7 +627,7 @@ class EmailAPI with HandleSetErrorMixin {
final response = await (requestBuilder
..usings(capabilities))
.build()
.execute();
.execute(cancelToken: cancelToken);
final setEmailResponse = response.parse<SetEmailResponse>(
setEmailInvocation.methodCallId,
@@ -58,9 +58,18 @@ class EmailRepositoryImpl extends EmailRepository {
Session session,
AccountId accountId,
EmailRequest emailRequest,
{CreateNewMailboxRequest? mailboxRequest}
{
CreateNewMailboxRequest? mailboxRequest,
CancelToken? cancelToken
}
) {
return emailDataSource[DataSourceType.network]!.sendEmail(session, accountId, emailRequest, mailboxRequest: mailboxRequest);
return emailDataSource[DataSourceType.network]!.sendEmail(
session,
accountId,
emailRequest,
mailboxRequest: mailboxRequest,
cancelToken: cancelToken,
);
}
@override
@@ -172,8 +181,18 @@ class EmailRepositoryImpl extends EmailRepository {
}
@override
Future<bool> deleteEmailPermanently(Session session, AccountId accountId, EmailId emailId) {
return emailDataSource[DataSourceType.network]!.deleteEmailPermanently(session, accountId, emailId);
Future<bool> deleteEmailPermanently(
Session session,
AccountId accountId,
EmailId emailId,
{CancelToken? cancelToken}
) {
return emailDataSource[DataSourceType.network]!.deleteEmailPermanently(
session,
accountId,
emailId,
cancelToken: cancelToken
);
}
@override