TF-2667 Add cancel button in progress saving message to drafts dialog

This commit is contained in:
dab246
2024-03-12 13:43:14 +07:00
committed by Dat H. Pham
parent f2b70aec48
commit c013e0306c
14 changed files with 297 additions and 94 deletions
@@ -74,11 +74,27 @@ abstract class EmailDataSource {
MarkStarAction markStarAction
);
Future<Email> saveEmailAsDrafts(Session session, AccountId accountId, Email email);
Future<Email> saveEmailAsDrafts(
Session session,
AccountId accountId,
Email email,
{CancelToken? cancelToken}
);
Future<bool> removeEmailDrafts(Session session, AccountId accountId, EmailId emailId);
Future<bool> removeEmailDrafts(
Session session,
AccountId accountId,
EmailId emailId,
{CancelToken? cancelToken}
);
Future<Email> updateEmailDrafts(Session session, AccountId accountId, Email newEmail, EmailId oldEmailId);
Future<Email> updateEmailDrafts(
Session session,
AccountId accountId,
Email newEmail,
EmailId oldEmailId,
{CancelToken? cancelToken}
);
Future<List<EmailId>> deleteMultipleEmailsPermanently(Session session, AccountId accountId, List<EmailId> emailIds);
@@ -116,23 +116,55 @@ class EmailDataSourceImpl extends EmailDataSource {
}
@override
Future<Email> saveEmailAsDrafts(Session session, AccountId accountId, Email email) {
Future<Email> saveEmailAsDrafts(
Session session,
AccountId accountId,
Email email,
{CancelToken? cancelToken}
) {
return Future.sync(() async {
return await emailAPI.saveEmailAsDrafts(session, accountId, email);
return await emailAPI.saveEmailAsDrafts(
session,
accountId,
email,
cancelToken: cancelToken
);
}).catchError(_exceptionThrower.throwException);
}
@override
Future<bool> removeEmailDrafts(Session session, AccountId accountId, EmailId emailId) {
Future<bool> removeEmailDrafts(
Session session,
AccountId accountId,
EmailId emailId,
{CancelToken? cancelToken}
) {
return Future.sync(() async {
return await emailAPI.removeEmailDrafts(session, accountId, emailId);
return await emailAPI.removeEmailDrafts(
session,
accountId,
emailId,
cancelToken: cancelToken
);
}).catchError(_exceptionThrower.throwException);
}
@override
Future<Email> updateEmailDrafts(Session session, AccountId accountId, Email newEmail, EmailId oldEmailId) {
Future<Email> updateEmailDrafts(
Session session,
AccountId accountId,
Email newEmail,
EmailId oldEmailId,
{CancelToken? cancelToken}
) {
return Future.sync(() async {
return await emailAPI.updateEmailDrafts(session, accountId, newEmail, oldEmailId);
return await emailAPI.updateEmailDrafts(
session,
accountId,
newEmail,
oldEmailId,
cancelToken: cancelToken
);
}).catchError(_exceptionThrower.throwException);
}
@@ -129,12 +129,22 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
}
@override
Future<bool> removeEmailDrafts(Session session, AccountId accountId, EmailId emailId) {
Future<bool> removeEmailDrafts(
Session session,
AccountId accountId,
EmailId emailId,
{CancelToken? cancelToken}
) {
throw UnimplementedError();
}
@override
Future<Email> saveEmailAsDrafts(Session session, AccountId accountId, Email email) {
Future<Email> saveEmailAsDrafts(
Session session,
AccountId accountId,
Email email,
{CancelToken? cancelToken}
) {
throw UnimplementedError();
}
@@ -178,7 +188,13 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
}
@override
Future<Email> updateEmailDrafts(Session session, AccountId accountId, Email newEmail, EmailId oldEmailId) {
Future<Email> updateEmailDrafts(
Session session,
AccountId accountId,
Email newEmail,
EmailId oldEmailId,
{CancelToken? cancelToken}
) {
throw UnimplementedError();
}
+17 -6
View File
@@ -479,7 +479,12 @@ class EmailAPI with HandleSetErrorMixin {
});
}
Future<Email> saveEmailAsDrafts(Session session, AccountId accountId, Email email) async {
Future<Email> saveEmailAsDrafts(
Session session,
AccountId accountId,
Email email,
{CancelToken? cancelToken}
) async {
final idCreateMethod = Id(_uuid.v1());
final setEmailMethod = SetEmailMethod(accountId)
..addCreate(idCreateMethod, email);
@@ -494,7 +499,7 @@ class EmailAPI with HandleSetErrorMixin {
final response = await (requestBuilder
..usings(capabilities))
.build()
.execute();
.execute(cancelToken: cancelToken);
final setEmailResponse = response.parse<SetEmailResponse>(
setEmailInvocation.methodCallId,
@@ -511,7 +516,12 @@ class EmailAPI with HandleSetErrorMixin {
}
}
Future<bool> removeEmailDrafts(Session session, AccountId accountId, EmailId emailId) async {
Future<bool> removeEmailDrafts(
Session session,
AccountId accountId,
EmailId emailId,
{CancelToken? cancelToken}
) async {
final setEmailMethod = SetEmailMethod(accountId)
..addDestroy({emailId.id});
@@ -525,7 +535,7 @@ class EmailAPI with HandleSetErrorMixin {
final response = await (requestBuilder
..usings(capabilities))
.build()
.execute();
.execute(cancelToken: cancelToken);
final setEmailResponse = response.parse<SetEmailResponse>(
setEmailInvocation.methodCallId,
@@ -542,7 +552,8 @@ class EmailAPI with HandleSetErrorMixin {
Session session,
AccountId accountId,
Email newEmail,
EmailId oldEmailId
EmailId oldEmailId,
{CancelToken? cancelToken}
) async {
final idCreateMethod = Id(_uuid.v1());
final setEmailMethod = SetEmailMethod(accountId)
@@ -559,7 +570,7 @@ class EmailAPI with HandleSetErrorMixin {
final response = await (requestBuilder
..usings(capabilities))
.build()
.execute();
.execute(cancelToken: cancelToken);
final setEmailResponse = response.parse<SetEmailResponse>(
setEmailInvocation.methodCallId,
@@ -141,18 +141,50 @@ class EmailRepositoryImpl extends EmailRepository {
}
@override
Future<Email> saveEmailAsDrafts(Session session, AccountId accountId, Email email) {
return emailDataSource[DataSourceType.network]!.saveEmailAsDrafts(session, accountId, email);
Future<Email> saveEmailAsDrafts(
Session session,
AccountId accountId,
Email email,
{CancelToken? cancelToken}
) {
return emailDataSource[DataSourceType.network]!.saveEmailAsDrafts(
session,
accountId,
email,
cancelToken: cancelToken
);
}
@override
Future<bool> removeEmailDrafts(Session session, AccountId accountId, EmailId emailId) {
return emailDataSource[DataSourceType.network]!.removeEmailDrafts(session, accountId, emailId);
Future<bool> removeEmailDrafts(
Session session,
AccountId accountId,
EmailId emailId,
{CancelToken? cancelToken}
) {
return emailDataSource[DataSourceType.network]!.removeEmailDrafts(
session,
accountId,
emailId,
cancelToken: cancelToken
);
}
@override
Future<Email> updateEmailDrafts(Session session, AccountId accountId, Email newEmail, EmailId oldEmailId) {
return emailDataSource[DataSourceType.network]!.updateEmailDrafts(session, accountId, newEmail, oldEmailId);
Future<Email> updateEmailDrafts(
Session session,
AccountId accountId,
Email newEmail,
EmailId oldEmailId,
{CancelToken? cancelToken}
) {
return emailDataSource[DataSourceType.network]!.updateEmailDrafts(
session,
accountId,
newEmail,
oldEmailId,
cancelToken: cancelToken
);
}
@override