import 'dart:async'; import 'dart:typed_data'; import 'package:core/data/network/download/downloaded_response.dart'; import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:dartz/dartz.dart'; import 'package:dio/dio.dart'; import 'package:email_recovery/email_recovery/email_recovery_action.dart'; import 'package:email_recovery/email_recovery/email_recovery_action_id.dart'; 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/user_name.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:model/account/account_request.dart'; import 'package:model/download/download_task_id.dart'; import 'package:model/email/attachment.dart'; import 'package:model/email/mark_star_action.dart'; import 'package:model/email/read_actions.dart'; import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart'; import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart'; import 'package:tmail_ui_user/features/email/domain/model/event_action.dart'; import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart'; import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart'; abstract class EmailDataSource { Future getEmailContent( Session session, AccountId accountId, EmailId emailId, {Properties? additionalProperties}); Future sendEmail( Session session, AccountId accountId, EmailRequest emailRequest, { CreateNewMailboxRequest? mailboxRequest, CancelToken? cancelToken } ); Future<({ List emailIdsSuccess, Map mapErrors, })> markAsRead( Session session, AccountId accountId, List emailIds, ReadActions readActions, ); Future> downloadAttachments( List attachments, AccountId accountId, String baseDownloadUrl, AccountRequest accountRequest ); Future exportAttachment( Attachment attachment, AccountId accountId, String baseDownloadUrl, AccountRequest accountRequest, CancelToken cancelToken ); Future downloadAttachmentForWeb( DownloadTaskId taskId, Attachment attachment, AccountId accountId, String baseDownloadUrl, AccountRequest accountRequest, StreamController> onReceiveController, {CancelToken? cancelToken} ); Future<({ List emailIdsSuccess, Map mapErrors, })> moveToMailbox( Session session, AccountId accountId, MoveToMailboxRequest moveRequest, ); Future<({ List emailIdsSuccess, Map mapErrors, })> markAsStar( Session session, AccountId accountId, List emailIds, MarkStarAction markStarAction ); Future saveEmailAsDrafts( Session session, AccountId accountId, Email email, {CancelToken? cancelToken} ); Future removeEmailDrafts( Session session, AccountId accountId, EmailId emailId, {CancelToken? cancelToken} ); Future updateEmailDrafts( Session session, AccountId accountId, Email newEmail, EmailId oldEmailId, {CancelToken? cancelToken} ); Future<({ List emailIdsSuccess, Map mapErrors, })> deleteMultipleEmailsPermanently( Session session, AccountId accountId, List emailIds, ); Future deleteEmailPermanently( Session session, AccountId accountId, EmailId emailId, {CancelToken? cancelToken} ); Future storeDetailedNewEmail(Session session, AccountId accountId, DetailedEmail detailedEmail); Future getDetailedEmailById(Session session, AccountId accountId, EmailId emailId); Future storeEmail(Session session, AccountId accountId, Email email); Future getStoredEmail(Session session, AccountId accountId, EmailId emailId); Future storeOpenedEmail(Session session, AccountId accountId, DetailedEmail detailedEmail); Future getStoredOpenedEmail(Session session, AccountId accountId, EmailId emailId); Future getStoredNewEmail(Session session, AccountId accountId, EmailId emailId); Future storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail); Future updateSendingEmail(AccountId accountId, UserName userName, SendingEmail newSendingEmail); Future> getAllSendingEmails(AccountId accountId, UserName userName); Future deleteSendingEmail(AccountId accountId, UserName userName, String sendingId); Future deleteMultipleSendingEmail(AccountId accountId, UserName userName, List sendingIds); Future> updateMultipleSendingEmail(AccountId accountId, UserName userName, List newSendingEmails); Future getStoredSendingEmail(AccountId accountId, UserName userName, String sendingId); Future unsubscribeMail(Session session, AccountId accountId, EmailId emailId); Future restoreDeletedMessage(RestoredDeletedMessageRequest restoredDeletedMessageRequest); Future getRestoredDeletedMessage(EmailRecoveryActionId emailRecoveryActionId); Future storeEventAttendanceStatus( Session session, AccountId accountId, EmailId emailId, EventActionType eventActionType); Future markAsAnswered( Session session, AccountId accountId, List emailIds); Future markAsForwarded( Session session, AccountId accountId, List emailIds); Future> parseEmailByBlobIds(AccountId accountId, Set blobIds); }