import 'dart:async'; import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:dartz/dartz.dart' as dartz; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/error/set_error.dart'; import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:jmap_dart_client/jmap/core/properties/properties.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/state.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:tmail_ui_user/features/mailbox/data/model/mailbox_change_response.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_response.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/move_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/rename_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_multiple_mailbox_request.dart'; abstract class MailboxDataSource { Future getAllMailbox(Session session, AccountId accountId, {Properties? properties}); Future> getAllMailboxCache(); Future getChanges(Session session, AccountId accountId, State sinceState); Future update({List? updated, List? created, List? destroyed}); Future createNewMailbox(Session session, AccountId accountId, CreateNewMailboxRequest newMailboxRequest); Future> deleteMultipleMailbox(Session session, AccountId accountId, List mailboxIds); Future renameMailbox(Session session, AccountId accountId, RenameMailboxRequest request); Future moveMailbox(Session session, AccountId accountId, MoveMailboxRequest request); Future> markAsMailboxRead( Session session, AccountId accountId, MailboxId mailboxId, int totalEmailUnread, StreamController> onProgressController); Future subscribeMailbox(Session session, AccountId accountId, SubscribeMailboxRequest request); Future> subscribeMultipleMailbox(Session session, AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest); }