From 2972554be7b5156939950addf81ef6493b254dc8 Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 8 Mar 2022 10:55:31 +0700 Subject: [PATCH] TF-275 Fix bug reload changes colors --- .../email/presentation/email_controller.dart | 4 +- .../presentation/thread_controller.dart | 16 ++---- model/lib/email/presentation_email.dart | 4 -- model/lib/extensions/email_extension.dart | 5 +- .../presentation_email_extension.dart | 50 +++++++------------ 5 files changed, 25 insertions(+), 54 deletions(-) diff --git a/lib/features/email/presentation/email_controller.dart b/lib/features/email/presentation/email_controller.dart index 658e2df6f..3e86cc11d 100644 --- a/lib/features/email/presentation/email_controller.dart +++ b/lib/features/email/presentation/email_controller.dart @@ -53,7 +53,6 @@ class EmailController extends BaseController { final emailContents = [].obs; final attachments = [].obs; EmailId? _currentEmailId; - List? _currentAvatarColor; EmailController( this._getEmailContentInteractor, @@ -73,7 +72,6 @@ class EmailController extends BaseController { mailboxDashBoardController.selectedEmail.listen((presentationEmail) { if (_currentEmailId != presentationEmail?.id) { _currentEmailId = presentationEmail?.id; - _currentAvatarColor = presentationEmail?.avatarColors; _clearEmailContent(); final accountId = mailboxDashBoardController.accountId.value; if (accountId != null && presentationEmail != null) { @@ -163,7 +161,7 @@ class EmailController extends BaseController { void _markAsEmailReadSuccess(Success success) { if (success is MarkAsEmailReadSuccess) { - mailboxDashBoardController.setSelectedEmail(success.updatedEmail.toPresentationEmail(selectMode: SelectMode.ACTIVE, avatarColors: _currentAvatarColor)); + mailboxDashBoardController.setSelectedEmail(success.updatedEmail.toPresentationEmail(selectMode: SelectMode.ACTIVE)); } mailboxDashBoardController.dispatchState(Right(success)); diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 3fac920ad..4fd9ad5c3 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -75,8 +75,6 @@ class ThreadController extends BaseController { final currentSelectMode = SelectMode.INACTIVE.obs; final filterMessageOption = FilterMessageOption.all.obs; - final random = Random(); - bool canLoadMore = true; bool canSearchMore = true; MailboxId? _currentMailboxId; @@ -227,10 +225,7 @@ class ThreadController extends BaseController { void _getAllEmailSuccess(GetAllEmailSuccess success) { _currentEmailState = success.currentEmailState; - final listEmailHaveAvatarGradientColor = success.emailList - .map((email) => email.asAvatarGradientColor(random)) - .toList(); - emailList.value = listEmailHaveAvatarGradientColor; + emailList.value = success.emailList; } void _getAllEmailAction(AccountId accountId, {MailboxId? mailboxId}) { @@ -337,10 +332,7 @@ class ThreadController extends BaseController { void _loadMoreEmailsSuccess(LoadMoreEmailsSuccess success) { if (success.emailList.isNotEmpty) { - final listEmailHaveAvatarGradientColor = success.emailList - .map((email) => email.asAvatarGradientColor(random)) - .toList(); - emailList.addAll(listEmailHaveAvatarGradientColor); + emailList.addAll(success.emailList); } else { canLoadMore = false; } @@ -650,7 +642,7 @@ class ThreadController extends BaseController { void _searchEmailsSuccess(SearchEmailSuccess success) { final resultEmailSearchList = success.emailList - .map((email) => email.toSearchPresentationEmail(mailboxDashBoardController.mapMailbox, random)) + .map((email) => email.toSearchPresentationEmail(mailboxDashBoardController.mapMailbox)) .toList(); emailListSearch.value = resultEmailSearchList; @@ -674,7 +666,7 @@ class ThreadController extends BaseController { void _searchMoreEmailsSuccess(SearchMoreEmailSuccess success) { if (success.emailList.isNotEmpty) { final resultEmailSearchList = success.emailList - .map((email) => email.toSearchPresentationEmail(mailboxDashBoardController.mapMailbox, random)) + .map((email) => email.toSearchPresentationEmail(mailboxDashBoardController.mapMailbox)) .where((email) => !emailListSearch.contains(email)) .toList(); emailListSearch.addAll(resultEmailSearchList); diff --git a/model/lib/email/presentation_email.dart b/model/lib/email/presentation_email.dart index a8222d35e..0fde20751 100644 --- a/model/lib/email/presentation_email.dart +++ b/model/lib/email/presentation_email.dart @@ -1,6 +1,4 @@ -import 'dart:ui'; - import 'package:equatable/equatable.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/core/utc_date.dart'; @@ -28,7 +26,6 @@ class PresentationEmail with EquatableMixin { final Map? mailboxIds; final List? mailboxNames; final SelectMode selectMode; - final List? avatarColors; PresentationEmail( this.id, @@ -48,7 +45,6 @@ class PresentationEmail with EquatableMixin { this.mailboxIds, this.mailboxNames, this.selectMode = SelectMode.INACTIVE, - this.avatarColors, } ); diff --git a/model/lib/extensions/email_extension.dart b/model/lib/extensions/email_extension.dart index bb2d48067..0c6bb7c2d 100644 --- a/model/lib/extensions/email_extension.dart +++ b/model/lib/extensions/email_extension.dart @@ -1,6 +1,4 @@ -import 'dart:ui'; - import 'package:http_parser/http_parser.dart'; import 'package:jmap_dart_client/jmap/core/properties/properties.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; @@ -45,7 +43,7 @@ extension EmailExtension on Email { ); } - PresentationEmail toPresentationEmail({SelectMode selectMode = SelectMode.INACTIVE, List? avatarColors}) { + PresentationEmail toPresentationEmail({SelectMode selectMode = SelectMode.INACTIVE}) { return PresentationEmail( id, keywords: keywords, @@ -62,7 +60,6 @@ extension EmailExtension on Email { replyTo: replyTo, mailboxIds: mailboxIds, selectMode: selectMode, - avatarColors: avatarColors, ); } diff --git a/model/lib/extensions/presentation_email_extension.dart b/model/lib/extensions/presentation_email_extension.dart index 430186294..c18184673 100644 --- a/model/lib/extensions/presentation_email_extension.dart +++ b/model/lib/extensions/presentation_email_extension.dart @@ -1,4 +1,4 @@ -import 'dart:math'; +import 'dart:ui'; import 'package:core/core.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; @@ -6,9 +6,26 @@ import 'package:dartz/dartz.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/model.dart'; +import 'package:collection/collection.dart'; extension PresentationEmailExtension on PresentationEmail { + List get avatarColors { + return AppColor.mapGradientColor[_generateIndexFromSender()]; + } + + int _generateIndexFromSender() { + if (from != null && from?.isNotEmpty == true) { + final codeUnits = from?.first.email?.codeUnits ?? List.empty(); + if (codeUnits.isNotEmpty) { + final sumCodeUnits = codeUnits.sum; + final index = sumCodeUnits % AppColor.mapGradientColor.length; + return index; + } + } + return 0; + } + int numberOfAllEmailAddress() => to.numberEmailAddress() + cc.numberEmailAddress() + bcc.numberEmailAddress(); String getReceivedAt(String newLocale, {String? pattern}) { @@ -39,7 +56,6 @@ extension PresentationEmailExtension on PresentationEmail { mailboxIds: mailboxIds, mailboxNames: mailboxNames, selectMode: selectMode == SelectMode.INACTIVE ? SelectMode.ACTIVE : SelectMode.INACTIVE, - avatarColors: avatarColors, ); } @@ -61,7 +77,6 @@ extension PresentationEmailExtension on PresentationEmail { mailboxIds: mailboxIds, mailboxNames: mailboxNames, selectMode: selectMode, - avatarColors: avatarColors, ); } @@ -113,7 +128,7 @@ extension PresentationEmailExtension on PresentationEmail { } } - PresentationEmail toSearchPresentationEmail(Map mapMailboxes, Random random) { + PresentationEmail toSearchPresentationEmail(Map mapMailboxes) { mailboxIds?.removeWhere((key, value) => !value); final listMailboxId = mailboxIds?.entries @@ -126,8 +141,6 @@ extension PresentationEmailExtension on PresentationEmail { .where((mailboxName) => mailboxName != null) .toList(); - final newAvatarColors = AppColor.mapGradientColor[random.nextInt(AppColor.mapGradientColor.length)]; - return PresentationEmail( this.id, keywords: keywords, @@ -145,31 +158,6 @@ extension PresentationEmailExtension on PresentationEmail { mailboxIds: mailboxIds, mailboxNames: listMailboxName, selectMode: selectMode, - avatarColors: avatarColors ?? newAvatarColors - ); - } - - PresentationEmail asAvatarGradientColor(Random random) { - final newAvatarColors = AppColor.mapGradientColor[random.nextInt(AppColor.mapGradientColor.length)]; - - return PresentationEmail( - this.id, - keywords: keywords, - size: size, - receivedAt: receivedAt, - hasAttachment: hasAttachment, - preview: preview, - subject: subject, - sentAt: sentAt, - from: from, - to: to, - cc: cc, - bcc: bcc, - replyTo: replyTo, - mailboxIds: mailboxIds, - mailboxNames: mailboxNames, - selectMode: selectMode, - avatarColors: avatarColors ?? newAvatarColors, ); } } \ No newline at end of file