import 'dart:async'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/filter/filter.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/sort/comparator.dart'; import 'package:jmap_dart_client/jmap/core/state.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/email/presentation_email.dart'; import 'package:tmail_ui_user/features/thread/data/model/email_change_response.dart'; import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart'; import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart'; abstract class ThreadDataSource { Future getAllEmail( Session session, AccountId accountId, { UnsignedInt? limit, Set? sort, Filter? filter, Properties? properties } ); Future getChanges( Session session, AccountId accountId, State sinceState, { Properties? propertiesCreated, Properties? propertiesUpdated } ); Future> getAllEmailCache( AccountId accountId, UserName userName, { MailboxId? inMailboxId, Set? sort, FilterMessageOption? filterOption, UnsignedInt? limit } ); Future update(AccountId accountId, UserName userName, {List? updated, List? created, List? destroyed}); Future> emptyTrashFolder( Session session, AccountId accountId, MailboxId mailboxId, Future Function(List? newDestroyed) updateDestroyedEmailCache, ); Future getEmailById(Session session, AccountId accountId, EmailId emailId, {Properties? properties}); }