TF-82 Discard email drafts

This commit is contained in:
dab246
2022-02-21 13:55:19 +07:00
committed by Dat H. Pham
parent ea29405f08
commit a2ffd9b354
14 changed files with 186 additions and 27 deletions
@@ -35,5 +35,7 @@ abstract class EmailDataSource {
MarkStarAction markStarAction
);
Future<bool> saveEmailAsDrafts(AccountId accountId, Email email);
Future<Email?> saveEmailAsDrafts(AccountId accountId, Email email);
Future<bool> removeEmailDrafts(AccountId accountId, EmailId emailId);
}
@@ -88,11 +88,20 @@ class EmailDataSourceImpl extends EmailDataSource {
}
@override
Future<bool> saveEmailAsDrafts(AccountId accountId, Email email) {
Future<Email?> saveEmailAsDrafts(AccountId accountId, Email email) {
return Future.sync(() async {
return await emailAPI.saveEmailAsDrafts(accountId, email);
}).catchError((error) {
throw error;
});
}
@override
Future<bool> removeEmailDrafts(AccountId accountId, EmailId emailId) {
return Future.sync(() async {
return await emailAPI.removeEmailDrafts(accountId, emailId);
}).catchError((error) {
throw error;
});
}
}
+26 -2
View File
@@ -254,7 +254,7 @@ class EmailAPI {
});
}
Future<bool> saveEmailAsDrafts(AccountId accountId, Email email) async {
Future<Email?> saveEmailAsDrafts(AccountId accountId, Email email) async {
final setEmailMethod = SetEmailMethod(accountId)
..addCreate(email.id.id, email);
@@ -272,7 +272,31 @@ class EmailAPI {
SetEmailResponse.deserialize);
return Future.sync(() async {
return setEmailResponse?.created?[email.id.id] != null;
return setEmailResponse?.created?[email.id.id];
}).catchError((error) {
throw error;
});
}
Future<bool> removeEmailDrafts(AccountId accountId, EmailId emailId) async {
final setEmailMethod = SetEmailMethod(accountId)
..addDestroy({emailId.id});
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
final response = await (requestBuilder
..usings(setEmailMethod.requiredCapabilities))
.build()
.execute();
final setEmailResponse = response.parse<SetEmailResponse>(
setEmailInvocation.methodCallId,
SetEmailResponse.deserialize);
return Future.sync(() async {
return setEmailResponse?.destroyed?.contains(emailId.id) == true;
}).catchError((error) {
throw error;
});
@@ -90,7 +90,12 @@ class EmailRepositoryImpl extends EmailRepository {
}
@override
Future<bool> saveEmailAsDrafts(AccountId accountId, Email email) {
Future<Email?> saveEmailAsDrafts(AccountId accountId, Email email) {
return emailDataSource.saveEmailAsDrafts(accountId, email);
}
@override
Future<bool> removeEmailDrafts(AccountId accountId, EmailId emailId) {
return emailDataSource.removeEmailDrafts(accountId, emailId);
}
}
@@ -42,5 +42,7 @@ abstract class EmailRepository {
AccountId accountId
);
Future<bool> saveEmailAsDrafts(AccountId accountId, Email email);
Future<Email?> saveEmailAsDrafts(AccountId accountId, Email email);
Future<bool> removeEmailDrafts(AccountId accountId, EmailId emailId);
}
@@ -32,17 +32,18 @@ class BottomBarMailWidgetBuilder {
color: Colors.white,
child: MediaQuery(
data: MediaQueryData(padding: EdgeInsets.zero),
child: _presentationEmail != null ? _buildListOptionButton() : SizedBox.shrink()
child: _presentationEmail != null ? _buildListOptionButton(_presentationEmail!) : SizedBox.shrink()
)
);
}
Widget _buildListOptionButton() {
Widget _buildListOptionButton(PresentationEmail presentationEmail) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
(ButtonBuilder(_imagePaths.icReplyAllV2)
if (presentationEmail.numberOfAllEmailAddress() > 1)
(ButtonBuilder(_imagePaths.icReplyAllV2)
..key(Key('button_reply_all_message'))
..size(20)
..paddingIcon(EdgeInsets.only(