TF-234 Implement delete a mailbox

This commit is contained in:
dab246
2022-02-24 18:55:15 +07:00
committed by Dat H. Pham
parent a19f3841d3
commit 79a7b45142
24 changed files with 495 additions and 25 deletions
@@ -16,4 +16,6 @@ abstract class MailboxDataSource {
Future<void> update({List<Mailbox>? updated, List<Mailbox>? created, List<MailboxId>? destroyed});
Future<Mailbox?> createNewMailbox(AccountId accountId, CreateNewMailboxRequest newMailboxRequest);
Future<bool> deleteMultipleMailbox(AccountId accountId, List<MailboxId> mailboxIds);
}
@@ -49,4 +49,9 @@ class MailboxCacheDataSourceImpl extends MailboxDataSource {
Future<Mailbox?> createNewMailbox(AccountId accountId, CreateNewMailboxRequest newMailboxRequest) {
throw UnimplementedError();
}
@override
Future<bool> deleteMultipleMailbox(AccountId accountId, List<MailboxId> mailboxIds) {
throw UnimplementedError();
}
}
@@ -50,4 +50,13 @@ class MailboxDataSourceImpl extends MailboxDataSource {
throw error;
});
}
@override
Future<bool> deleteMultipleMailbox(AccountId accountId, List<MailboxId> mailboxIds) {
return Future.sync(() async {
return await mailboxAPI.deleteMultipleMailbox(accountId, mailboxIds);
}).catchError((error) {
throw error;
});
}
}
@@ -128,4 +128,29 @@ class MailboxAPI {
throw error;
});
}
Future<bool> deleteMultipleMailbox(AccountId accountId, List<MailboxId> mailboxIds) async {
final setMailboxMethod = SetMailboxMethod(accountId)
..addDestroy(mailboxIds.map((mailboxId) => mailboxId.id).toSet())
..addOnDestroyRemoveEmails(true);
final requestBuilder = JmapRequestBuilder(httpClient, ProcessingInvocation());
final setMailboxInvocation = requestBuilder.invocation(setMailboxMethod);
final response = await (requestBuilder
..usings(setMailboxMethod.requiredCapabilities))
.build()
.execute();
final setMailboxResponse = response.parse<SetMailboxResponse>(
setMailboxInvocation.methodCallId,
SetMailboxResponse.deserialize);
return Future.sync(() async {
return setMailboxResponse?.destroyed?.isNotEmpty == true;
}).catchError((error) {
throw error;
});
}
}
@@ -140,4 +140,9 @@ class MailboxRepositoryImpl extends MailboxRepository {
Future<Mailbox?> createNewMailbox(AccountId accountId, CreateNewMailboxRequest newMailboxRequest) {
return mapDataSource[DataSourceType.network]!.createNewMailbox(accountId, newMailboxRequest);
}
@override
Future<bool> deleteMultipleMailbox(AccountId accountId, List<MailboxId> mailboxIds) {
return mapDataSource[DataSourceType.network]!.deleteMultipleMailbox(accountId, mailboxIds);
}
}