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:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/sort/comparator.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/move_to_mailbox_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); Future sendEmail( Session session, AccountId accountId, EmailRequest emailRequest, {CreateNewMailboxRequest? mailboxRequest} ); Future> markAsRead(Session session, AccountId accountId, List emails, 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 ); Future> moveToMailbox(Session session, AccountId accountId, MoveToMailboxRequest moveRequest); Future> markAsStar( Session session, AccountId accountId, List emails, MarkStarAction markStarAction ); Future saveEmailAsDrafts(Session session, AccountId accountId, Email email); Future removeEmailDrafts(Session session, AccountId accountId, EmailId emailId); Future updateEmailDrafts(Session session, AccountId accountId, Email newEmail, EmailId oldEmailId); Future> deleteMultipleEmailsPermanently(Session session, AccountId accountId, List emailIds); Future deleteEmailPermanently(Session session, AccountId accountId, EmailId emailId); Future storeDetailedNewEmail(Session session, AccountId accountId, DetailedEmail detailedEmail); Future> getListDetailedEmailById(Session session, AccountId accountId, Set emailIds, {Set? sort}); 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); }