import 'dart:async'; import 'dart:typed_data'; import 'package:core/core.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/mail/email/email.dart'; import 'package:model/model.dart'; import 'package:tmail_ui_user/features/composer/domain/model/email_request.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'; abstract class EmailDataSource { Future getEmailContent(Session session, AccountId accountId, EmailId emailId); Future sendEmail(AccountId accountId, EmailRequest emailRequest, {CreateNewMailboxRequest? mailboxRequest}); Future> markAsRead(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(AccountId accountId, MoveToMailboxRequest moveRequest); Future> markAsStar( AccountId accountId, List emails, MarkStarAction markStarAction ); Future saveEmailAsDrafts(AccountId accountId, Email email); Future removeEmailDrafts(AccountId accountId, EmailId emailId); Future updateEmailDrafts(AccountId accountId, Email newEmail, EmailId oldEmailId); Future> deleteMultipleEmailsPermanently(AccountId accountId, List emailIds); Future deleteEmailPermanently(AccountId accountId, EmailId emailId); }