diff --git a/lib/features/mailbox/data/datasource/mailbox_datasource.dart b/lib/features/mailbox/data/datasource/mailbox_datasource.dart new file mode 100644 index 000000000..f6ab5c7f3 --- /dev/null +++ b/lib/features/mailbox/data/datasource/mailbox_datasource.dart @@ -0,0 +1,7 @@ +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/properties/properties.dart'; +import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; + +abstract class MailboxDataSource { + Future> getAllMailbox(AccountId accountId, {Properties? properties}); +} \ No newline at end of file diff --git a/lib/features/mailbox/data/datasource_impl/mailbox_datasource_impl.dart b/lib/features/mailbox/data/datasource_impl/mailbox_datasource_impl.dart new file mode 100644 index 000000000..8db4b779e --- /dev/null +++ b/lib/features/mailbox/data/datasource_impl/mailbox_datasource_impl.dart @@ -0,0 +1,21 @@ +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/properties/properties.dart'; +import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; +import 'package:tmail_ui_user/features/mailbox/data/datasource/mailbox_datasource.dart'; +import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart'; + +class MailboxDataSourceImpl extends MailboxDataSource { + + final MailboxAPI mailboxAPI; + + MailboxDataSourceImpl(this.mailboxAPI,); + + @override + Future> getAllMailbox(AccountId accountId, {Properties? properties}) { + return Future.sync(() async { + return await mailboxAPI.getAllMailbox(accountId, properties: properties); + }).catchError((error) { + throw error; + }); + } +} \ No newline at end of file diff --git a/lib/features/mailbox/data/network/mailbox_api.dart b/lib/features/mailbox/data/network/mailbox_api.dart new file mode 100644 index 000000000..63b6b93bf --- /dev/null +++ b/lib/features/mailbox/data/network/mailbox_api.dart @@ -0,0 +1,38 @@ +import 'dart:async'; + +import 'package:jmap_dart_client/http/http_client.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/properties/properties.dart'; +import 'package:jmap_dart_client/jmap/jmap_request.dart'; +import 'package:jmap_dart_client/jmap/mail/mailbox/get/get_mailbox_method.dart'; +import 'package:jmap_dart_client/jmap/mail/mailbox/get/get_mailbox_response.dart'; +import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; + +class MailboxAPI { + + final HttpClient httpClient; + + MailboxAPI(this.httpClient); + + Future> getAllMailbox(AccountId accountId, {Properties? properties}) async { + final processingInvocation = ProcessingInvocation(); + + final jmapRequestBuilder = JmapRequestBuilder(httpClient, processingInvocation); + + final getMailboxCreated = GetMailboxMethod(accountId); + + final queryInvocation = jmapRequestBuilder.invocation(getMailboxCreated); + + final result = await (jmapRequestBuilder + ..invocation(getMailboxCreated) + ..usings(getMailboxCreated.requiredCapabilities)) + .build() + .execute(); + + final resultCreated = result.parse( + queryInvocation.methodCallId, + GetMailboxResponse.deserialize); + + return resultCreated == null ? [] : resultCreated.list; + } +} \ No newline at end of file diff --git a/lib/features/mailbox/data/repository/mailbox_repository_impl.dart b/lib/features/mailbox/data/repository/mailbox_repository_impl.dart new file mode 100644 index 000000000..5ccc85b91 --- /dev/null +++ b/lib/features/mailbox/data/repository/mailbox_repository_impl.dart @@ -0,0 +1,17 @@ +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/properties/properties.dart'; +import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; +import 'package:tmail_ui_user/features/mailbox/data/datasource/mailbox_datasource.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart'; + +class MailboxRepositoryImpl extends MailboxRepository { + + final MailboxDataSource mailboxDataSource; + + MailboxRepositoryImpl(this.mailboxDataSource); + + @override + Future> getAllMailbox(AccountId accountId, {Properties? properties}) { + return mailboxDataSource.getAllMailbox(accountId, properties: properties); + } +} \ No newline at end of file