TF-3385 Get & set multiple changes in email cache
This commit is contained in:
@@ -153,9 +153,12 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
|
|||||||
List<EmailId> emailIds,
|
List<EmailId> emailIds,
|
||||||
ReadActions readActions,
|
ReadActions readActions,
|
||||||
) async {
|
) async {
|
||||||
final storedEmails = await Future.wait(emailIds.map(
|
final cacheEmails = await _emailCacheManager.getMultipleStoredEmails(
|
||||||
(emailId) => getStoredEmail(session, accountId, emailId),
|
accountId,
|
||||||
));
|
session.username,
|
||||||
|
emailIds,
|
||||||
|
);
|
||||||
|
final storedEmails = cacheEmails.map((emailCache) => emailCache.toEmail()).toList();
|
||||||
for (var email in storedEmails) {
|
for (var email in storedEmails) {
|
||||||
if (readActions == ReadActions.markAsUnread) {
|
if (readActions == ReadActions.markAsUnread) {
|
||||||
email.keywords?.remove(KeyWordIdentifier.emailSeen);
|
email.keywords?.remove(KeyWordIdentifier.emailSeen);
|
||||||
@@ -163,9 +166,11 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
|
|||||||
email.keywords?[KeyWordIdentifier.emailSeen] = true;
|
email.keywords?[KeyWordIdentifier.emailSeen] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await Future.wait(storedEmails.map(
|
await _emailCacheManager.storeMultipleEmails(
|
||||||
(email) => storeEmail(session, accountId, email),
|
accountId,
|
||||||
));
|
session.username,
|
||||||
|
storedEmails.map((email) => email.toEmailCache()).toList(),
|
||||||
|
);
|
||||||
return (
|
return (
|
||||||
emailIdsSuccess: emailIds,
|
emailIdsSuccess: emailIds,
|
||||||
mapErrors: <Id, SetError>{}
|
mapErrors: <Id, SetError>{}
|
||||||
@@ -182,9 +187,12 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
|
|||||||
List<EmailId> emailIds,
|
List<EmailId> emailIds,
|
||||||
MarkStarAction markStarAction,
|
MarkStarAction markStarAction,
|
||||||
) async {
|
) async {
|
||||||
final storedEmails = await Future.wait(emailIds.map(
|
final cacheEmails = await _emailCacheManager.getMultipleStoredEmails(
|
||||||
(emailId) => getStoredEmail(session, accountId, emailId),
|
accountId,
|
||||||
));
|
session.username,
|
||||||
|
emailIds,
|
||||||
|
);
|
||||||
|
final storedEmails = cacheEmails.map((emailCache) => emailCache.toEmail()).toList();
|
||||||
for (var email in storedEmails) {
|
for (var email in storedEmails) {
|
||||||
if (markStarAction == MarkStarAction.unMarkStar) {
|
if (markStarAction == MarkStarAction.unMarkStar) {
|
||||||
email.keywords?.remove(KeyWordIdentifier.emailFlagged);
|
email.keywords?.remove(KeyWordIdentifier.emailFlagged);
|
||||||
@@ -192,9 +200,11 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
|
|||||||
email.keywords?[KeyWordIdentifier.emailFlagged] = true;
|
email.keywords?[KeyWordIdentifier.emailFlagged] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await Future.wait(storedEmails.map(
|
await _emailCacheManager.storeMultipleEmails(
|
||||||
(email) => storeEmail(session, accountId, email),
|
accountId,
|
||||||
));
|
session.username,
|
||||||
|
storedEmails.map((email) => email.toEmailCache()).toList(),
|
||||||
|
);
|
||||||
return (
|
return (
|
||||||
emailIdsSuccess: emailIds,
|
emailIdsSuccess: emailIds,
|
||||||
mapErrors: <Id, SetError>{}
|
mapErrors: <Id, SetError>{}
|
||||||
@@ -210,24 +220,27 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
|
|||||||
AccountId accountId,
|
AccountId accountId,
|
||||||
MoveToMailboxRequest moveRequest,
|
MoveToMailboxRequest moveRequest,
|
||||||
) async {
|
) async {
|
||||||
final emailIds = moveRequest.currentMailboxes.entries.fold(
|
final emailIds = moveRequest
|
||||||
<EmailId>{},
|
.currentMailboxes
|
||||||
(emailIds, entry) {
|
.values
|
||||||
emailIds.addAll(entry.value);
|
.expand((emails) => emails)
|
||||||
return emailIds;
|
.toList();
|
||||||
},
|
final cacheEmails = await _emailCacheManager.getMultipleStoredEmails(
|
||||||
).toList();
|
accountId,
|
||||||
final storedEmails = await Future.wait(emailIds.map(
|
session.username,
|
||||||
(emailId) => getStoredEmail(session, accountId, emailId),
|
emailIds,
|
||||||
));
|
);
|
||||||
|
final storedEmails = cacheEmails.map((emailCache) => emailCache.toEmail()).toList();
|
||||||
for (int i = 0; i < storedEmails.length; i++) {
|
for (int i = 0; i < storedEmails.length; i++) {
|
||||||
storedEmails[i] = storedEmails[i].updatedEmail(
|
storedEmails[i] = storedEmails[i].updatedEmail(
|
||||||
newMailboxIds: {moveRequest.destinationMailboxId: true},
|
newMailboxIds: {moveRequest.destinationMailboxId: true},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
await Future.wait(storedEmails.map(
|
await _emailCacheManager.storeMultipleEmails(
|
||||||
(email) => storeEmail(session, accountId, email),
|
accountId,
|
||||||
));
|
session.username,
|
||||||
|
storedEmails.map((email) => email.toEmailCache()).toList(),
|
||||||
|
);
|
||||||
return (
|
return (
|
||||||
emailIdsSuccess: emailIds,
|
emailIdsSuccess: emailIds,
|
||||||
mapErrors: <Id, SetError>{}
|
mapErrors: <Id, SetError>{}
|
||||||
|
|||||||
@@ -95,6 +95,14 @@ class EmailCacheManager {
|
|||||||
return _emailCacheClient.insertItem(keyCache, emailCache);
|
return _emailCacheClient.insertItem(keyCache, emailCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> storeMultipleEmails(AccountId accountId, UserName userName, List<EmailCache> emailsCache) {
|
||||||
|
return Future.wait(emailsCache.map((emailCache) => storeEmail(
|
||||||
|
accountId,
|
||||||
|
userName,
|
||||||
|
emailCache,
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
|
||||||
Future<EmailCache> getStoredEmail(AccountId accountId, UserName userName, EmailId emailId) async {
|
Future<EmailCache> getStoredEmail(AccountId accountId, UserName userName, EmailId emailId) async {
|
||||||
final keyCache = TupleKey(emailId.asString, accountId.asString, userName.value).encodeKey;
|
final keyCache = TupleKey(emailId.asString, accountId.asString, userName.value).encodeKey;
|
||||||
final emailCache = await _emailCacheClient.getItem(keyCache, needToReopen: true);
|
final emailCache = await _emailCacheClient.getItem(keyCache, needToReopen: true);
|
||||||
@@ -104,4 +112,16 @@ class EmailCacheManager {
|
|||||||
throw NotFoundStoredEmailException();
|
throw NotFoundStoredEmailException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<List<EmailCache>> getMultipleStoredEmails(
|
||||||
|
AccountId accountId,
|
||||||
|
UserName userName,
|
||||||
|
List<EmailId> emailIds,
|
||||||
|
) async {
|
||||||
|
final keys = emailIds
|
||||||
|
.map((emailId) => TupleKey(emailId.asString, accountId.asString, userName.value).encodeKey)
|
||||||
|
.toList();
|
||||||
|
final emails = await _emailCacheClient.getValuesByListKey(keys);
|
||||||
|
return emails;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user