From 8a216be80ed9fb2dd76b4b88e34995f01c69d2c9 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 27 Oct 2023 20:46:31 +0700 Subject: [PATCH] TF-2280 Fix empty trash when token expired on mobile Signed-off-by: dab246 (cherry picked from commit a48e68b38096236df92f71cc17859e1f1592a144) --- .../model/empty_mailbox_folder_arguments.dart | 6 ++++- .../data/network/thread_isolate_worker.dart | 26 +++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/lib/features/thread/data/model/empty_mailbox_folder_arguments.dart b/lib/features/thread/data/model/empty_mailbox_folder_arguments.dart index d45d8f24e..83dd22a73 100644 --- a/lib/features/thread/data/model/empty_mailbox_folder_arguments.dart +++ b/lib/features/thread/data/model/empty_mailbox_folder_arguments.dart @@ -1,4 +1,5 @@ import 'package:equatable/equatable.dart'; +import 'package:flutter/services.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; @@ -11,6 +12,7 @@ class EmptyMailboxFolderArguments with EquatableMixin { final MailboxId mailboxId; final ThreadAPI threadAPI; final EmailAPI emailAPI; + final RootIsolateToken isolateToken; EmptyMailboxFolderArguments( this.session, @@ -18,6 +20,7 @@ class EmptyMailboxFolderArguments with EquatableMixin { this.emailAPI, this.accountId, this.mailboxId, + this.isolateToken, ); @override @@ -26,6 +29,7 @@ class EmptyMailboxFolderArguments with EquatableMixin { accountId, emailAPI, threadAPI, - mailboxId + mailboxId, + isolateToken, ]; } diff --git a/lib/features/thread/data/network/thread_isolate_worker.dart b/lib/features/thread/data/network/thread_isolate_worker.dart index 89c75ea49..028bbdfb6 100644 --- a/lib/features/thread/data/network/thread_isolate_worker.dart +++ b/lib/features/thread/data/network/thread_isolate_worker.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:core/utils/app_logger.dart'; import 'package:core/utils/platform_info.dart'; +import 'package:flutter/services.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/properties/properties.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; @@ -13,10 +14,12 @@ import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/email/email_property.dart'; import 'package:model/extensions/list_email_extension.dart'; +import 'package:tmail_ui_user/features/caching/config/hive_cache_config.dart'; import 'package:tmail_ui_user/features/email/data/network/email_api.dart'; import 'package:tmail_ui_user/features/thread/data/model/empty_mailbox_folder_arguments.dart'; import 'package:tmail_ui_user/features/thread/data/network/thread_api.dart'; import 'package:tmail_ui_user/features/thread/domain/exceptions/thread_exceptions.dart'; +import 'package:tmail_ui_user/main/exceptions/isolate_exception.dart'; import 'package:worker_manager/worker_manager.dart'; class ThreadIsolateWorker { @@ -35,8 +38,20 @@ class ThreadIsolateWorker { if (PlatformInfo.isWeb) { return _emptyMailboxFolderOnWeb(session, accountId, mailboxId, updateDestroyedEmailCache); } else { + final rootIsolateToken = RootIsolateToken.instance; + if (rootIsolateToken == null) { + throw CanNotGetRootIsolateToken(); + } + final result = await _isolateExecutor.execute( - arg1: EmptyMailboxFolderArguments(session, _threadAPI, _emailAPI, accountId, mailboxId), + arg1: EmptyMailboxFolderArguments( + session, + _threadAPI, + _emailAPI, + accountId, + mailboxId, + rootIsolateToken + ), fun1: _emptyMailboxFolderAction, notification: (value) { if (value is List) { @@ -54,7 +69,14 @@ class ThreadIsolateWorker { } } - static Future> _emptyMailboxFolderAction(EmptyMailboxFolderArguments args, TypeSendPort sendPort) async { + static Future> _emptyMailboxFolderAction( + EmptyMailboxFolderArguments args, + TypeSendPort sendPort + ) async { + final rootIsolateToken = args.isolateToken; + BackgroundIsolateBinaryMessenger.ensureInitialized(rootIsolateToken); + await HiveCacheConfig().setUp(); + List emailListCompleted = List.empty(growable: true); try { var hasEmails = true;