From ee5f103048adb10f4936d2ff9146b6993fb09886 Mon Sep 17 00:00:00 2001 From: dab246 Date: Mon, 25 Sep 2023 11:04:04 +0700 Subject: [PATCH] Fix can not open new tab for email (cherry picked from commit f5c569ad340d66d27cf676b4de9602a41ed93fb5) --- .../mailbox_dashboard_controller.dart | 81 +++++++++---------- lib/main/pages/app_pages.dart | 8 ++ lib/main/routes/app_routes.dart | 1 + 3 files changed, 46 insertions(+), 44 deletions(-) diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index c0c90bda9..133c9a94c 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -3,7 +3,6 @@ import 'dart:convert'; import 'package:core/core.dart'; import 'package:dartz/dartz.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -256,22 +255,20 @@ class MailboxDashBoardController extends ReloadableController { _registerPendingEmailAddress(); _registerPendingEmailContents(); _registerPendingFileInfo(); - _getSessionCurrent(); + _handleArguments(); _getAppVersion(); super.onReady(); } void _handleComposerCache() async { - if (kIsWeb && userProfile.value != null) { - _getEmailCacheOnWebInteractor.execute().fold( - (failure) {}, - (success) { - if(success is GetComposerCacheSuccess){ - openComposerOverlay(ComposerArguments.fromSessionStorageBrowser(success.composerCache)); - } - }, - ); - } + _getEmailCacheOnWebInteractor.execute().fold( + (failure) {}, + (success) { + if(success is GetComposerCacheSuccess){ + openComposerOverlay(ComposerArguments.fromSessionStorageBrowser(success.composerCache)); + } + }, + ); } @override @@ -415,11 +412,7 @@ class MailboxDashBoardController extends ReloadableController { _handleMessageFromNotification(notificationResponse?.payload, onForeground: false); } - void _getUserProfile() async { - userProfile.value = sessionCurrent != null ? UserProfile(sessionCurrent!.username.value) : null; - } - - void _getSessionCurrent() { + void _handleArguments() { final arguments = Get.arguments; log('MailboxDashBoardController::_getSessionCurrent(): arguments = $arguments'); if (arguments is Session) { @@ -455,25 +448,15 @@ class MailboxDashBoardController extends ReloadableController { } void _handleSession(Session session) { - sessionCurrent = session; - final personalAccount = sessionCurrent!.personalAccount; - accountId.value = personalAccount.accountId; - _getUserProfile(); + log('MailboxDashBoardController::_handleSession:'); + _setUpComponentsFromSession(session); + updateAuthenticationAccount( sessionCurrent!, accountId.value!, sessionCurrent!.username ); - injectAutoCompleteBindings(sessionCurrent, accountId.value); - injectRuleFilterBindings(sessionCurrent, accountId.value); - injectVacationBindings(sessionCurrent, accountId.value); - injectFCMBindings(sessionCurrent, accountId.value); - _getVacationResponse(); - spamReportController.getSpamReportStateAction(); - if (PlatformInfo.isMobile) { - getAllSendingEmails(); - _storeSessionAction(sessionCurrent!); - } + if (PlatformInfo.isMobile && !_notificationManager.isNotificationClickedOnTerminate) { _handleClickLocalNotificationOnTerminated(); } else { @@ -481,7 +464,27 @@ class MailboxDashBoardController extends ReloadableController { } } + void _setUpComponentsFromSession(Session session) { + sessionCurrent = session; + accountId.value = sessionCurrent!.personalAccount.accountId; + userProfile.value = UserProfile(sessionCurrent!.username.value); + + injectAutoCompleteBindings(sessionCurrent, accountId.value); + injectRuleFilterBindings(sessionCurrent, accountId.value); + injectVacationBindings(sessionCurrent, accountId.value); + injectFCMBindings(sessionCurrent, accountId.value); + + _getVacationResponse(); + spamReportController.getSpamReportStateAction(); + + if (PlatformInfo.isMobile) { + getAllSendingEmails(); + _storeSessionAction(sessionCurrent!); + } + } + void _handleMailtoURL(MailtoArguments arguments) { + log('MailboxDashBoardController::_handleMailtoURL:'); routerParameters.value = arguments.toMapRouter(); _handleSession(arguments.session); } @@ -1244,19 +1247,9 @@ class MailboxDashBoardController extends ReloadableController { void handleReloaded(Session session) { log('MailboxDashBoardController::handleReloaded():'); _getRouteParameters(); - sessionCurrent = session; - accountId.value = sessionCurrent?.accounts.keys.first; - _getUserProfile(); - _handleComposerCache(); - injectAutoCompleteBindings(sessionCurrent, accountId.value); - injectRuleFilterBindings(sessionCurrent, accountId.value); - injectFCMBindings(sessionCurrent, accountId.value); - injectVacationBindings(sessionCurrent, accountId.value); - _getVacationResponse(); - spamReportController.getSpamReportStateAction(); - if (PlatformInfo.isMobile) { - getAllSendingEmails(); - _storeSessionAction(sessionCurrent!); + _setUpComponentsFromSession(session); + if (PlatformInfo.isWeb) { + _handleComposerCache(); } } diff --git a/lib/main/pages/app_pages.dart b/lib/main/pages/app_pages.dart index 786420489..99455f643 100644 --- a/lib/main/pages/app_pages.dart +++ b/lib/main/pages/app_pages.dart @@ -55,6 +55,14 @@ class AppPages { mailbox_dashboard.loadLibrary, () => mailbox_dashboard.MailboxDashBoardView()), binding: MailboxDashBoardBindings()), + GetPage( + name: AppRoutes.dashboardWithParameter, + page: () => DeferredWidget( + mailbox_dashboard.loadLibrary, + () => mailbox_dashboard.MailboxDashBoardView() + ), + binding: MailboxDashBoardBindings() + ), GetPage( name: AppRoutes.mailtoURL, page: () => DeferredWidget( diff --git a/lib/main/routes/app_routes.dart b/lib/main/routes/app_routes.dart index b5be314af..7fbf482c2 100644 --- a/lib/main/routes/app_routes.dart +++ b/lib/main/routes/app_routes.dart @@ -3,6 +3,7 @@ abstract class AppRoutes { static const login = '/login'; static const session = '/session'; static const dashboard = '/dashboard'; + static const dashboardWithParameter = '/dashboard/:id'; static const settings = '/settings'; static const composer = '/composer'; static const destinationPicker = '/destination_picker';