TF-145 Add data layer for getAllEmail in Caching

This commit is contained in:
dab246
2021-10-07 15:02:07 +07:00
committed by Dat H. Pham
parent 3cac5e4e83
commit bfd5901bf4
16 changed files with 524 additions and 22 deletions
@@ -0,0 +1,8 @@
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:tmail_ui_user/features/thread/data/model/email_address_hive_cache.dart';
extension EmailAddressHiveCacheExtension on EmailAddressHiveCache {
EmailAddress toEmailAddress() => EmailAddress(name, email);
}
@@ -0,0 +1,34 @@
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
import 'package:jmap_dart_client/jmap/core/utc_date.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:tmail_ui_user/features/thread/data/model/email_cache.dart';
import 'package:tmail_ui_user/features/thread/data/extensions/email_address_hive_cache_extension.dart';
extension EmailCacheExtension on EmailCache {
Email toEmail() {
return Email(
EmailId(Id(id)),
keywords: keywords != null
? Map.fromIterables(keywords!.keys.map((value) => KeyWordIdentifier(value)), keywords!.values)
: null,
size: size != null ? UnsignedInt(size!) : null,
receivedAt: receivedAt != null ? UTCDate(receivedAt!) : null,
hasAttachment: hasAttachment,
preview: preview,
subject: subject,
sentAt: sentAt != null ? UTCDate(sentAt!) : null,
from: from?.map((emailAddressCache) => emailAddressCache.toEmailAddress()).toSet(),
to: to?.map((emailAddressCache) => emailAddressCache.toEmailAddress()).toSet(),
cc: cc?.map((emailAddressCache) => emailAddressCache.toEmailAddress()).toSet(),
bcc: bcc?.map((emailAddressCache) => emailAddressCache.toEmailAddress()).toSet(),
replyTo: replyTo?.map((emailAddressCache) => emailAddressCache.toEmailAddress()).toSet(),
mailboxIds: mailboxIds != null
? Map.fromIterables(mailboxIds!.keys.map((value) => MailboxId(Id(value))), mailboxIds!.values)
: null,
);
}
}
@@ -2,12 +2,13 @@ import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:tmail_ui_user/features/thread/data/model/email_cache.dart';
import 'package:tmail_ui_user/features/thread/data/extensions/map_keywords_extension.dart';
import 'package:tmail_ui_user/features/thread/data/extensions/email_address_extension.dart';
import 'package:tmail_ui_user/features/thread/data/extensions/map_mailbox_id_extension.dart';
extension EmailExtension on Email {
EmailCache toEmailCache() {
return EmailCache(
id.toString(),
id.id.value,
keywords: keywords?.toMapString(),
size: size?.value.round(),
receivedAt: receivedAt?.value,
@@ -20,6 +21,7 @@ extension EmailExtension on Email {
cc: cc?.map((emailAddress) => emailAddress.toEmailAddressHiveCache()).toList(),
bcc: bcc?.map((emailAddress) => emailAddress.toEmailAddressHiveCache()).toList(),
replyTo: replyTo?.map((emailAddress) => emailAddress.toEmailAddressHiveCache()).toList(),
mailboxIds: mailboxIds?.toMapString(),
);
}
}
@@ -0,0 +1,11 @@
import 'package:tmail_ui_user/features/thread/data/model/email_cache.dart';
extension ListEmailCacheExtension on List<EmailCache> {
Map<String, EmailCache> toMap() {
return Map<String, EmailCache>.fromIterable(
this,
key: (emailCache) => emailCache.id,
value: (emailCache) => emailCache);
}
}
@@ -0,0 +1,7 @@
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
extension MapMailboxIdExtension on Map<MailboxId, bool> {
Map<String, bool> toMapString() => Map.fromIterables(keys.map((mailboxId) => mailboxId.id.value), values);
}