TF-996: add limit size listEmailLoaded
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
import 'dart:collection';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:core/core.dart';
|
import 'package:core/core.dart';
|
||||||
@@ -91,7 +92,7 @@ class EmailController extends BaseController with AppLoaderMixin {
|
|||||||
Identity? _identitySelected;
|
Identity? _identitySelected;
|
||||||
List<EmailContent>? initialEmailContents;
|
List<EmailContent>? initialEmailContents;
|
||||||
late Worker emailWorker;
|
late Worker emailWorker;
|
||||||
final Map<EmailId, EmailLoaded> presentationEmailsLoaded = {};
|
final Queue<EmailLoaded> presentationEmailsLoaded = Queue();
|
||||||
PageController? pageController;
|
PageController? pageController;
|
||||||
int currentIndexPageView = 0;
|
int currentIndexPageView = 0;
|
||||||
final canGetNewerEmail = true.obs;
|
final canGetNewerEmail = true.obs;
|
||||||
@@ -147,8 +148,8 @@ class EmailController extends BaseController with AppLoaderMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _setCurrentPositionEmailInListEmail() {
|
void _setCurrentPositionEmailInListEmail() {
|
||||||
currentIndexPageView = mailboxDashBoardController.emailList.indexOf(mailboxDashBoardController.selectedEmail.value);
|
currentIndexPageView = mailboxDashBoardController.emailsInCurrentMailbox.indexOf(mailboxDashBoardController.selectedEmail.value);
|
||||||
if(pageController != null && pageController!.page?.toInt() != currentIndexPageView) {
|
if(pageController != null && pageController!.hasClients && pageController!.page?.toInt() != currentIndexPageView) {
|
||||||
pageController!.jumpToPage(currentIndexPageView);
|
pageController!.jumpToPage(currentIndexPageView);
|
||||||
} else {
|
} else {
|
||||||
pageController = PageController(initialPage: currentIndexPageView);
|
pageController = PageController(initialPage: currentIndexPageView);
|
||||||
@@ -157,12 +158,12 @@ class EmailController extends BaseController with AppLoaderMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void onPageChanged(int index) {
|
void onPageChanged(int index) {
|
||||||
mailboxDashBoardController.selectedEmail.value = mailboxDashBoardController.emailList[index];
|
mailboxDashBoardController.selectedEmail.value = mailboxDashBoardController.emailsInCurrentMailbox[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
void _checkEnableNavigatorPageView() {
|
void _checkEnableNavigatorPageView() {
|
||||||
canGetNewerEmail.value = currentIndexPageView > 0;
|
canGetNewerEmail.value = currentIndexPageView > 0;
|
||||||
canGetOlderEmail.value = mailboxDashBoardController.emailList.length > 1 && currentIndexPageView < mailboxDashBoardController.emailList.length - 1;
|
canGetOlderEmail.value = mailboxDashBoardController.emailsInCurrentMailbox.length > 1 && currentIndexPageView < mailboxDashBoardController.emailsInCurrentMailbox.length - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void getNewerEmail() {
|
void getNewerEmail() {
|
||||||
@@ -259,10 +260,10 @@ class EmailController extends BaseController with AppLoaderMixin {
|
|||||||
void _getEmailContentAction(EmailId emailId) async {
|
void _getEmailContentAction(EmailId emailId) async {
|
||||||
final accountId = mailboxDashBoardController.accountId.value;
|
final accountId = mailboxDashBoardController.accountId.value;
|
||||||
final baseDownloadUrl = mailboxDashBoardController.sessionCurrent?.getDownloadUrl();
|
final baseDownloadUrl = mailboxDashBoardController.sessionCurrent?.getDownloadUrl();
|
||||||
final listEmailIdLoaded = presentationEmailsLoaded.keys.toList();
|
final listEmailIdLoaded = presentationEmailsLoaded.map((e) => e.emailCurrent!.id).toList();
|
||||||
EmailLoaded? emailLoaded;
|
EmailLoaded? emailLoaded;
|
||||||
if(listEmailIdLoaded.contains(_currentEmailId)) {
|
if(listEmailIdLoaded.contains(_currentEmailId)) {
|
||||||
emailLoaded = presentationEmailsLoaded[_currentEmailId];
|
emailLoaded = presentationEmailsLoaded.firstWhere((e) => e.emailCurrent!.id == _currentEmailId);
|
||||||
}
|
}
|
||||||
if (accountId != null && baseDownloadUrl != null) {
|
if (accountId != null && baseDownloadUrl != null) {
|
||||||
consumeState(_getEmailContentInteractor.execute(accountId, emailId, baseDownloadUrl, emailLoaded: emailLoaded));
|
consumeState(_getEmailContentInteractor.execute(accountId, emailId, baseDownloadUrl, emailLoaded: emailLoaded));
|
||||||
@@ -305,7 +306,12 @@ class EmailController extends BaseController with AppLoaderMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _getEmailContentSuccess(GetEmailContentSuccess success) {
|
void _getEmailContentSuccess(GetEmailContentSuccess success) {
|
||||||
presentationEmailsLoaded[success.emailCurrent!.id] = EmailLoaded(success.emailContents.toList(), success.emailContentsDisplayed.toList(), success.attachments.toList(), success.emailCurrent);
|
if(presentationEmailsLoaded.length > 100) {
|
||||||
|
presentationEmailsLoaded.removeFirst();
|
||||||
|
}
|
||||||
|
final emailLoaded = EmailLoaded(success.emailContents.toList(), success.emailContentsDisplayed.toList(), success.attachments.toList(), success.emailCurrent);
|
||||||
|
presentationEmailsLoaded.removeWhere((e) => e.emailCurrent!.id == emailLoaded.emailCurrent!.id);
|
||||||
|
presentationEmailsLoaded.add(emailLoaded);
|
||||||
emailContents.value = success.emailContentsDisplayed;
|
emailContents.value = success.emailContentsDisplayed;
|
||||||
initialEmailContents = success.emailContents;
|
initialEmailContents = success.emailContents;
|
||||||
attachments.value = success.attachments;
|
attachments.value = success.attachments;
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ class EmailView extends GetWidget<EmailController> {
|
|||||||
Expanded(
|
Expanded(
|
||||||
child: PageView.builder(
|
child: PageView.builder(
|
||||||
physics: kIsWeb ? const NeverScrollableScrollPhysics() : null,
|
physics: kIsWeb ? const NeverScrollableScrollPhysics() : null,
|
||||||
itemCount: controller.mailboxDashBoardController.emailList.length,
|
itemCount: controller.mailboxDashBoardController.emailsInCurrentMailbox.length,
|
||||||
controller: controller.pageController,
|
controller: controller.pageController,
|
||||||
onPageChanged: controller.onPageChanged,
|
onPageChanged: controller.onPageChanged,
|
||||||
itemBuilder: (context, _) {
|
itemBuilder: (context, _) {
|
||||||
|
|||||||
+1
-1
@@ -126,7 +126,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
Session? sessionCurrent;
|
Session? sessionCurrent;
|
||||||
Map<Role, MailboxId> mapDefaultMailboxIdByRole = {};
|
Map<Role, MailboxId> mapDefaultMailboxIdByRole = {};
|
||||||
Map<MailboxId, PresentationMailbox> mapMailboxById = {};
|
Map<MailboxId, PresentationMailbox> mapMailboxById = {};
|
||||||
final emailList = <PresentationEmail>[].obs;
|
final emailsInCurrentMailbox = <PresentationEmail>[].obs;
|
||||||
PresentationMailbox? outboxMailbox;
|
PresentationMailbox? outboxMailbox;
|
||||||
RouterArguments? routerArguments;
|
RouterArguments? routerArguments;
|
||||||
|
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ class ThreadController extends BaseController {
|
|||||||
|
|
||||||
SearchQuery? get searchQuery => searchController.searchEmailFilter.value.text;
|
SearchQuery? get searchQuery => searchController.searchEmailFilter.value.text;
|
||||||
|
|
||||||
RxList<PresentationEmail> get emailList => mailboxDashBoardController.emailList;
|
RxList<PresentationEmail> get emailList => mailboxDashBoardController.emailsInCurrentMailbox;
|
||||||
|
|
||||||
ThreadController(
|
ThreadController(
|
||||||
this._getEmailsInMailboxInteractor,
|
this._getEmailsInMailboxInteractor,
|
||||||
|
|||||||
Reference in New Issue
Block a user