TF-3731 Thread Detail Cache EmailLoaded in memory for web
This commit is contained in:
+8
-17
@@ -1,11 +1,7 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:model/email/email_action_type.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/bindings/email_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/controller/single_email_controller.dart';
|
||||
import 'package:model/email/email_in_thread_status.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/focus_thread_detail_expanded_email.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/thread_detail_on_email_action_click.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.dart';
|
||||
|
||||
extension ToggleThreadDetailCollapeExpand on ThreadDetailController {
|
||||
@@ -18,22 +14,14 @@ extension ToggleThreadDetailCollapeExpand on ThreadDetailController {
|
||||
emailIdsPresentation[emailId] = presentationEmail.copyWith(
|
||||
emailInThreadStatus: EmailInThreadStatus.collapsed,
|
||||
);
|
||||
mailboxDashBoardController.dispatchEmailUIAction(
|
||||
CollapseEmailInThreadDetailAction(emailId),
|
||||
);
|
||||
currentExpandedEmailId.value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
final isInitialized = Get.isRegistered<SingleEmailController>(
|
||||
tag: emailId.id.value,
|
||||
);
|
||||
if (!isInitialized) {
|
||||
EmailBindings(currentEmailId: presentationEmail.id).dependencies();
|
||||
} else {
|
||||
focusExpandedEmail(emailId);
|
||||
threadDetailOnEmailActionClick(
|
||||
presentationEmail,
|
||||
EmailActionType.markAsRead,
|
||||
);
|
||||
}
|
||||
EmailBindings(currentEmailId: presentationEmail.id).dependencies();
|
||||
for (var key in emailIdsPresentation.keys) {
|
||||
if (emailIdsPresentation[key] == null) continue;
|
||||
|
||||
@@ -49,6 +37,9 @@ extension ToggleThreadDetailCollapeExpand on ThreadDetailController {
|
||||
emailIdsPresentation[key] = emailIdsPresentation[key]?.copyWith(
|
||||
emailInThreadStatus: EmailInThreadStatus.collapsed,
|
||||
);
|
||||
mailboxDashBoardController.dispatchEmailUIAction(
|
||||
CollapseEmailInThreadDetailAction(key),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/email_loaded.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.dart';
|
||||
|
||||
extension UpdateCachedEmailLoaded on ThreadDetailController {
|
||||
void cacheEmailLoaded(EmailId emailId, EmailLoaded emailLoaded) {
|
||||
const cacheLimit = 20;
|
||||
|
||||
while (cachedEmailLoaded[emailId] == null &&
|
||||
cachedEmailLoaded.length >= cacheLimit) {
|
||||
cachedEmailLoaded.remove(cachedEmailLoaded.keys.first);
|
||||
}
|
||||
cachedEmailLoaded[emailId] = emailLoaded;
|
||||
}
|
||||
}
|
||||
@@ -89,6 +89,7 @@ class ThreadDetailController extends BaseController {
|
||||
IndividualHeaderIdentifier.listPostHeader.value,
|
||||
IndividualHeaderIdentifier.listUnsubscribeHeader.value,
|
||||
});
|
||||
final cachedEmailLoaded = <EmailId, EmailLoaded>{};
|
||||
|
||||
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
||||
final searchEmailController = Get.find<SearchEmailController>();
|
||||
@@ -221,6 +222,7 @@ class ThreadDetailController extends BaseController {
|
||||
scrollController = null;
|
||||
currentExpandedEmailId.value = null;
|
||||
currentEmailLoaded.value = null;
|
||||
cachedEmailLoaded.clear();
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
Reference in New Issue
Block a user