diff --git a/lib/features/mailbox/data/network/mailbox_isolate_worker.dart b/lib/features/mailbox/data/network/mailbox_isolate_worker.dart index 376757f7a..2c627d838 100644 --- a/lib/features/mailbox/data/network/mailbox_isolate_worker.dart +++ b/lib/features/mailbox/data/network/mailbox_isolate_worker.dart @@ -90,61 +90,57 @@ class MailboxIsolateWorker { await HiveCacheConfig.instance.setUp(); List emailIdsCompleted = List.empty(growable: true); - try { - bool mailboxHasEmails = true; - UTCDate? lastReceivedDate; - EmailId? lastEmailId; + bool mailboxHasEmails = true; + UTCDate? lastReceivedDate; + EmailId? lastEmailId; - while (mailboxHasEmails) { - final emailResponse = await args.threadAPI - .getAllEmail( - args.session, - args.accountId, - limit: UnsignedInt(30), - filter: EmailFilterCondition( - inMailbox: args.mailboxId, - notKeyword: KeyWordIdentifier.emailSeen.value, - before: lastReceivedDate), - sort: {}..add( - EmailComparator(EmailComparatorProperty.receivedAt) - ..setIsAscending(false)), - properties: Properties({ - EmailProperty.id, - EmailProperty.keywords, - EmailProperty.receivedAt, - })) - .then((response) { - var listEmails = response.emailList; - if (listEmails != null && listEmails.isNotEmpty && lastEmailId != null) { - listEmails = listEmails - .where((email) => email.id != lastEmailId) - .toList(); - } - return EmailsResponse(emailList: listEmails, state: response.state); - }); - final listEmailUnread = emailResponse.emailList; - - log('MailboxIsolateWorker::_handleMarkAsMailboxRead(): listEmailUnread: ${listEmailUnread?.length}'); - - if (listEmailUnread == null || listEmailUnread.isEmpty) { - mailboxHasEmails = false; - } else { - lastEmailId = listEmailUnread.last.id; - lastReceivedDate = listEmailUnread.last.receivedAt; - - final result = await args.emailAPI.markAsRead( + while (mailboxHasEmails) { + final emailResponse = await args.threadAPI + .getAllEmail( args.session, args.accountId, - listEmailUnread.listEmailIds, - ReadActions.markAsRead); + limit: UnsignedInt(30), + filter: EmailFilterCondition( + inMailbox: args.mailboxId, + notKeyword: KeyWordIdentifier.emailSeen.value, + before: lastReceivedDate), + sort: {}..add( + EmailComparator(EmailComparatorProperty.receivedAt) + ..setIsAscending(false)), + properties: Properties({ + EmailProperty.id, + EmailProperty.keywords, + EmailProperty.receivedAt, + })) + .then((response) { + var listEmails = response.emailList; + if (listEmails != null && listEmails.isNotEmpty && lastEmailId != null) { + listEmails = listEmails + .where((email) => email.id != lastEmailId) + .toList(); + } + return EmailsResponse(emailList: listEmails, state: response.state); + }); + final listEmailUnread = emailResponse.emailList; - log('MailboxIsolateWorker::_handleMarkAsMailboxRead(): MARK_READ: ${result.emailIdsSuccess.length}'); - emailIdsCompleted.addAll(result.emailIdsSuccess); - sendPort.send(emailIdsCompleted); - } + log('MailboxIsolateWorker::_handleMarkAsMailboxRead(): listEmailUnread: ${listEmailUnread?.length}'); + + if (listEmailUnread == null || listEmailUnread.isEmpty) { + mailboxHasEmails = false; + } else { + lastEmailId = listEmailUnread.last.id; + lastReceivedDate = listEmailUnread.last.receivedAt; + + final result = await args.emailAPI.markAsRead( + args.session, + args.accountId, + listEmailUnread.listEmailIds, + ReadActions.markAsRead); + + log('MailboxIsolateWorker::_handleMarkAsMailboxRead(): MARK_READ: ${result.emailIdsSuccess.length}'); + emailIdsCompleted.addAll(result.emailIdsSuccess); + sendPort.send(emailIdsCompleted); } - } catch (e) { - log('MailboxIsolateWorker::_handleMarkAsMailboxRead(): ERROR: $e'); } log('MailboxIsolateWorker::_handleMarkAsMailboxRead(): TOTAL_READ: ${emailIdsCompleted.length}'); return emailIdsCompleted; @@ -158,65 +154,61 @@ class MailboxIsolateWorker { StreamController> onProgressController ) async { List emailIdsCompleted = List.empty(growable: true); - try { - bool mailboxHasEmails = true; - UTCDate? lastReceivedDate; - EmailId? lastEmailId; + bool mailboxHasEmails = true; + UTCDate? lastReceivedDate; + EmailId? lastEmailId; - while (mailboxHasEmails) { - final emailResponse = await _threadApi - .getAllEmail( - session, - accountId, - limit: UnsignedInt(30), - filter: EmailFilterCondition( - inMailbox: mailboxId, - notKeyword: KeyWordIdentifier.emailSeen.value, - before: lastReceivedDate), - sort: {}..add( - EmailComparator(EmailComparatorProperty.receivedAt) - ..setIsAscending(false)), - properties: Properties({ - EmailProperty.id, - EmailProperty.keywords, - EmailProperty.receivedAt, - }) - ).then((response) { - var listEmails = response.emailList; - if (listEmails != null && listEmails.isNotEmpty && lastEmailId != null) { - listEmails = listEmails - .where((email) => email.id != lastEmailId) - .toList(); - } - return EmailsResponse(emailList: listEmails, state: response.state); - }); - final listEmailUnread = emailResponse.emailList; - - log('MailboxIsolateWorker::_handleMarkAsMailboxReadActionOnWeb(): listEmailUnread: ${listEmailUnread?.length}'); - - if (listEmailUnread == null || listEmailUnread.isEmpty) { - mailboxHasEmails = false; - } else { - lastEmailId = listEmailUnread.last.id; - lastReceivedDate = listEmailUnread.last.receivedAt; - - final result = await _emailApi.markAsRead( + while (mailboxHasEmails) { + final emailResponse = await _threadApi + .getAllEmail( session, accountId, - listEmailUnread.listEmailIds, - ReadActions.markAsRead, - ); - log('MailboxIsolateWorker::_handleMarkAsMailboxReadActionOnWeb(): MARK_READ: ${result.emailIdsSuccess.length}'); - emailIdsCompleted.addAll(result.emailIdsSuccess); + limit: UnsignedInt(30), + filter: EmailFilterCondition( + inMailbox: mailboxId, + notKeyword: KeyWordIdentifier.emailSeen.value, + before: lastReceivedDate), + sort: {}..add( + EmailComparator(EmailComparatorProperty.receivedAt) + ..setIsAscending(false)), + properties: Properties({ + EmailProperty.id, + EmailProperty.keywords, + EmailProperty.receivedAt, + }) + ).then((response) { + var listEmails = response.emailList; + if (listEmails != null && listEmails.isNotEmpty && lastEmailId != null) { + listEmails = listEmails + .where((email) => email.id != lastEmailId) + .toList(); + } + return EmailsResponse(emailList: listEmails, state: response.state); + }); + final listEmailUnread = emailResponse.emailList; - onProgressController.add(Right(UpdatingMarkAsMailboxReadState( - mailboxId: mailboxId, - totalUnread: totalEmailUnread, - countRead: emailIdsCompleted.length))); - } + log('MailboxIsolateWorker::_handleMarkAsMailboxReadActionOnWeb(): listEmailUnread: ${listEmailUnread?.length}'); + + if (listEmailUnread == null || listEmailUnread.isEmpty) { + mailboxHasEmails = false; + } else { + lastEmailId = listEmailUnread.last.id; + lastReceivedDate = listEmailUnread.last.receivedAt; + + final result = await _emailApi.markAsRead( + session, + accountId, + listEmailUnread.listEmailIds, + ReadActions.markAsRead, + ); + log('MailboxIsolateWorker::_handleMarkAsMailboxReadActionOnWeb(): MARK_READ: ${result.emailIdsSuccess.length}'); + emailIdsCompleted.addAll(result.emailIdsSuccess); + + onProgressController.add(Right(UpdatingMarkAsMailboxReadState( + mailboxId: mailboxId, + totalUnread: totalEmailUnread, + countRead: emailIdsCompleted.length))); } - } catch (e) { - log('MailboxIsolateWorker::_handleMarkAsMailboxReadActionOnWeb(): ERROR: $e'); } log('MailboxIsolateWorker::_handleMarkAsMailboxReadActionOnWeb(): TOTAL_READ: ${emailIdsCompleted.length}'); return emailIdsCompleted; diff --git a/lib/features/thread/data/network/thread_isolate_worker.dart b/lib/features/thread/data/network/thread_isolate_worker.dart index f95dba31e..b0713dde0 100644 --- a/lib/features/thread/data/network/thread_isolate_worker.dart +++ b/lib/features/thread/data/network/thread_isolate_worker.dart @@ -81,56 +81,51 @@ class ThreadIsolateWorker { EmptyMailboxFolderArguments args, TypeSendPort sendPort ) async { - try { - final rootIsolateToken = args.isolateToken; - BackgroundIsolateBinaryMessenger.ensureInitialized(rootIsolateToken); - await HiveCacheConfig.instance.setUp(); + final rootIsolateToken = args.isolateToken; + BackgroundIsolateBinaryMessenger.ensureInitialized(rootIsolateToken); + await HiveCacheConfig.instance.setUp(); - List emailListCompleted = List.empty(growable: true); + List emailListCompleted = List.empty(growable: true); - var hasEmails = true; - Email? lastEmail; + var hasEmails = true; + Email? lastEmail; - while (hasEmails) { - final emailsResponse = await args.threadAPI.getAllEmail( + while (hasEmails) { + final emailsResponse = await args.threadAPI.getAllEmail( + args.session, + args.accountId, + sort: {}..add( + EmailComparator(EmailComparatorProperty.receivedAt) + ..setIsAscending(false)), + filter: EmailFilterCondition(inMailbox: args.mailboxId, before: lastEmail?.receivedAt), + properties: Properties({ + EmailProperty.id, + EmailProperty.receivedAt + }), + ); + + var newEmailList = emailsResponse.emailList ?? []; + if (lastEmail != null) { + newEmailList = newEmailList.where((email) => email.id != lastEmail!.id).toList(); + } + + log('ThreadIsolateWorker::_emptyMailboxFolderAction(): ${newEmailList.length}'); + + if (newEmailList.isNotEmpty) { + lastEmail = newEmailList.last; + hasEmails = true; + final listEmailIdDeleted = await args.emailAPI.deleteMultipleEmailsPermanently( args.session, args.accountId, - sort: {}..add( - EmailComparator(EmailComparatorProperty.receivedAt) - ..setIsAscending(false)), - filter: EmailFilterCondition(inMailbox: args.mailboxId, before: lastEmail?.receivedAt), - properties: Properties({ - EmailProperty.id, - EmailProperty.receivedAt - }), - ); - - var newEmailList = emailsResponse.emailList ?? []; - if (lastEmail != null) { - newEmailList = newEmailList.where((email) => email.id != lastEmail!.id).toList(); - } - - log('ThreadIsolateWorker::_emptyMailboxFolderAction(): ${newEmailList.length}'); - - if (newEmailList.isNotEmpty) { - lastEmail = newEmailList.last; - hasEmails = true; - final listEmailIdDeleted = await args.emailAPI.deleteMultipleEmailsPermanently( - args.session, - args.accountId, - newEmailList.listEmailIds); - emailListCompleted.addAll(listEmailIdDeleted.emailIdsSuccess); - sendPort.send(emailListCompleted); - } else { - hasEmails = false; - } + newEmailList.listEmailIds); + emailListCompleted.addAll(listEmailIdDeleted.emailIdsSuccess); + sendPort.send(emailListCompleted); + } else { + hasEmails = false; } - log('ThreadIsolateWorker::_emptyMailboxFolderAction(): TOTAL_REMOVE: ${emailListCompleted.length}'); - return emailListCompleted; - } catch (e) { - logError('ThreadIsolateWorker::_emptyMailboxFolderAction(): ERROR: $e'); - rethrow; } + log('ThreadIsolateWorker::_emptyMailboxFolderAction(): TOTAL_REMOVE: ${emailListCompleted.length}'); + return emailListCompleted; } Future> _emptyMailboxFolderOnWeb( @@ -141,49 +136,45 @@ class ThreadIsolateWorker { StreamController> onProgressController ) async { List emailListCompleted = List.empty(growable: true); - try { - var hasEmails = true; - Email? lastEmail; + var hasEmails = true; + Email? lastEmail; - while (hasEmails) { - final emailsResponse = await _threadAPI.getAllEmail( + while (hasEmails) { + final emailsResponse = await _threadAPI.getAllEmail( + session, + accountId, + sort: {}..add( + EmailComparator(EmailComparatorProperty.receivedAt) + ..setIsAscending(false)), + filter: EmailFilterCondition(inMailbox: mailboxId, before: lastEmail?.receivedAt), + properties: Properties({ + EmailProperty.id, + EmailProperty.receivedAt + }), + ); + + var newEmailList = emailsResponse.emailList ?? []; + if (lastEmail != null) { + newEmailList = newEmailList.where((email) => email.id != lastEmail!.id).toList(); + } + + log('ThreadIsolateWorker::_emptyMailboxFolderOnWeb(): ${newEmailList.length}'); + + if (newEmailList.isNotEmpty) { + lastEmail = newEmailList.last; + hasEmails = true; + final listEmailIdDeleted = await _emailAPI.deleteMultipleEmailsPermanently( session, accountId, - sort: {}..add( - EmailComparator(EmailComparatorProperty.receivedAt) - ..setIsAscending(false)), - filter: EmailFilterCondition(inMailbox: mailboxId, before: lastEmail?.receivedAt), - properties: Properties({ - EmailProperty.id, - EmailProperty.receivedAt - }), - ); + newEmailList.listEmailIds); + emailListCompleted.addAll(listEmailIdDeleted.emailIdsSuccess); - var newEmailList = emailsResponse.emailList ?? []; - if (lastEmail != null) { - newEmailList = newEmailList.where((email) => email.id != lastEmail!.id).toList(); - } - - log('ThreadIsolateWorker::_emptyMailboxFolderOnWeb(): ${newEmailList.length}'); - - if (newEmailList.isNotEmpty) { - lastEmail = newEmailList.last; - hasEmails = true; - final listEmailIdDeleted = await _emailAPI.deleteMultipleEmailsPermanently( - session, - accountId, - newEmailList.listEmailIds); - emailListCompleted.addAll(listEmailIdDeleted.emailIdsSuccess); - - onProgressController.add(Right(EmptyingFolderState( - mailboxId, emailListCompleted.length, totalEmails - ))); - } else { - hasEmails = false; - } + onProgressController.add(Right(EmptyingFolderState( + mailboxId, emailListCompleted.length, totalEmails + ))); + } else { + hasEmails = false; } - } catch (e) { - log('ThreadIsolateWorker::_emptyMailboxFolderOnWeb(): ERROR: $e'); } log('ThreadIsolateWorker::_emptyMailboxFolderOnWeb(): TOTAL_REMOVE: ${emailListCompleted.length}'); return emailListCompleted;