From b4721a3a07c2fae46bb572d1a3ead50176c70f3b Mon Sep 17 00:00:00 2001 From: Dat PHAM HOANG Date: Tue, 26 Apr 2022 19:34:08 +0700 Subject: [PATCH] Not update the email in cache if cache not hit --- .../repository/thread_repository_impl.dart | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/lib/features/thread/data/repository/thread_repository_impl.dart b/lib/features/thread/data/repository/thread_repository_impl.dart index e3e852ae4..b18b70925 100644 --- a/lib/features/thread/data/repository/thread_repository_impl.dart +++ b/lib/features/thread/data/repository/thread_repository_impl.dart @@ -1,5 +1,6 @@ import 'package:core/core.dart'; +import 'package:dartz/dartz.dart' as dartz; import 'package:flutter/foundation.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/filter/filter.dart'; @@ -143,24 +144,29 @@ class ThreadRepositoryImpl extends ThreadRepository { List? emailCacheList }) async { if (emailUpdated != null && emailUpdated.isNotEmpty) { - final newEmailUpdated = emailUpdated.map((email) { - if (updatedProperties == null) { - return email; - } else { - final emailOld = emailCacheList?.findEmailById(email.id); - if (emailOld != null) { - return emailOld.combineEmail(email, updatedProperties); - } else { - return email; - } - } - }).toList(); + if (updatedProperties == null) { + return null; + } + final newEmailUpdated = emailUpdated + .map((updatedEmail) => _combineUpdatedWithEmailInCache(updatedEmail, emailCacheList)) + .where((tuple) => tuple.value2 != null) + .map((tuple) => tuple.value2!.combineEmail(tuple.value1, updatedProperties)) + .toList(); return newEmailUpdated; } return emailUpdated; } + dartz.Tuple2 _combineUpdatedWithEmailInCache(Email updatedEmail, List? emailCacheList) { + final emailOld = emailCacheList?.findEmailById(updatedEmail.id); + if (emailOld != null) { + return dartz.Tuple2(updatedEmail, emailOld); + } else { + return dartz.Tuple2(updatedEmail, null); + } + } + Future _updateEmailCache({ List? newUpdated, List? newCreated,