handle session when reload
This commit is contained in:
+2
-1
@@ -16,6 +16,7 @@ export 'domain/exceptions/download_file_exception.dart';
|
||||
export 'data/extensions/options_extensions.dart';
|
||||
export 'domain/exceptions/remote_exception.dart';
|
||||
export 'data/network/remote_exception_thrower.dart';
|
||||
export 'domain/exceptions/web_session_exception.dart';
|
||||
|
||||
// Utils
|
||||
export 'presentation/utils/theme_utils.dart';
|
||||
@@ -88,7 +89,7 @@ export 'data/network/download/download_client.dart';
|
||||
export 'data/network/download/download_manager.dart';
|
||||
export 'data/network/download/downloaded_response.dart';
|
||||
export 'data/network/download/download_client.dart';
|
||||
export 'data/model/exception/session_web_exception.dart';
|
||||
export 'domain/exceptions/web_session_exception.dart';
|
||||
|
||||
// State
|
||||
export 'presentation/state/success.dart';
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
class SessionWebException implements Exception {
|
||||
final String? errorMessage;
|
||||
|
||||
SessionWebException({this.errorMessage});
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
|
||||
class NotFoundInWebSessionException with EquatableMixin implements Exception {
|
||||
final String? errorMessage;
|
||||
|
||||
NotFoundInWebSessionException({this.errorMessage});
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class SaveToWebSessionFailException with EquatableMixin implements Exception {
|
||||
final String? errorMessage;
|
||||
|
||||
SaveToWebSessionFailException({this.errorMessage});
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
@@ -165,7 +165,9 @@ class ComposerController extends BaseController {
|
||||
await FkUserAgent.init();
|
||||
});
|
||||
} else {
|
||||
_listenBrowserTabRefresh();
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
_listenBrowserTabRefresh();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -251,6 +253,7 @@ class ComposerController extends BaseController {
|
||||
_removeComposerCacheOnWebInteractor.execute();
|
||||
if (userProfile != null) {
|
||||
final draftEmail = await _generateEmail(
|
||||
currentContext!,
|
||||
mailboxDashBoardController.mapDefaultMailboxId,
|
||||
userProfile,
|
||||
);
|
||||
@@ -258,7 +261,7 @@ class ComposerController extends BaseController {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
void _initEmail() {
|
||||
final arguments = kIsWeb ? mailboxDashBoardController.routerArguments : Get.arguments;
|
||||
if (arguments is ComposerArguments) {
|
||||
@@ -815,7 +818,8 @@ class ComposerController extends BaseController {
|
||||
|
||||
void _getEmailContentAction(ComposerArguments arguments) async {
|
||||
if(arguments.emailContents != null && arguments.emailContents!.isNotEmpty){
|
||||
emailContents.value = arguments.emailContents;
|
||||
_emailContents = arguments.emailContents;
|
||||
emailContentsViewState.value = Right(GetEmailContentSuccess(_emailContents!,[],[]));
|
||||
} else {
|
||||
final baseDownloadUrl = mailboxDashBoardController.sessionCurrent?.getDownloadUrl();
|
||||
final accountId = mailboxDashBoardController.sessionCurrent?.accounts.keys.first;
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/model.dart';
|
||||
|
||||
+8
-6
@@ -6,7 +6,8 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cac
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart';
|
||||
import 'package:universal_html/html.dart' as html;
|
||||
|
||||
class SessionStorageComposerDatasourceImpl extends SessionStorageComposerDatasource {
|
||||
class SessionStorageComposerDatasourceImpl
|
||||
extends SessionStorageComposerDatasource {
|
||||
@override
|
||||
ComposerCache getComposerCacheOnWeb() {
|
||||
try {
|
||||
@@ -14,14 +15,15 @@ class SessionStorageComposerDatasourceImpl extends SessionStorageComposerDatasou
|
||||
.where((e) => e.key == EmailActionType.edit.name)
|
||||
.toList();
|
||||
if (result.isNotEmpty) {
|
||||
final jsonHandle = json.decode(result.first.value) as Map<String, dynamic>;
|
||||
final jsonHandle =
|
||||
json.decode(result.first.value) as Map<String, dynamic>;
|
||||
final emailCache = ComposerCache.fromJson(jsonHandle);
|
||||
return emailCache;
|
||||
} else {
|
||||
throw SessionWebException();
|
||||
throw NotFoundInWebSessionException();
|
||||
}
|
||||
} catch (e) {
|
||||
throw SessionWebException(errorMessage: e.toString());
|
||||
throw NotFoundInWebSessionException(errorMessage: e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +33,7 @@ class SessionStorageComposerDatasourceImpl extends SessionStorageComposerDatasou
|
||||
html.window.sessionStorage
|
||||
.removeWhere((key, value) => key == EmailActionType.edit.name);
|
||||
} catch (e) {
|
||||
throw SessionWebException(errorMessage: e.toString());
|
||||
throw NotFoundInWebSessionException(errorMessage: e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,7 +45,7 @@ class SessionStorageComposerDatasourceImpl extends SessionStorageComposerDatasou
|
||||
};
|
||||
html.window.sessionStorage.addAll(entries);
|
||||
} catch (e) {
|
||||
throw SessionWebException(errorMessage: e.toString());
|
||||
throw SaveToWebSessionFailException(errorMessage: e.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+23
-23
@@ -125,26 +125,28 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
}
|
||||
|
||||
void _handleComposerCache() async {
|
||||
_getEmailCacheOnWebInteractor.execute().fold(
|
||||
(failure) {},
|
||||
(success) {
|
||||
if(success is GetComposerCacheSuccess){
|
||||
final ComposerArguments composerArguments = ComposerArguments(
|
||||
emailActionType: EmailActionType.edit,
|
||||
presentationEmail: PresentationEmail(
|
||||
success.composerCache.id,
|
||||
subject: success.composerCache.subject,
|
||||
from: success.composerCache.from,
|
||||
to: success.composerCache.to,
|
||||
cc: success.composerCache.cc,
|
||||
bcc: success.composerCache.bcc,
|
||||
),
|
||||
emailContents: success.composerCache.emailContentList,
|
||||
);
|
||||
openComposerOverlay(composerArguments);
|
||||
}
|
||||
},
|
||||
);
|
||||
if (kIsWeb && userProfile.value != null) {
|
||||
_getEmailCacheOnWebInteractor.execute().fold(
|
||||
(failure) {},
|
||||
(success) {
|
||||
if(success is GetComposerCacheSuccess){
|
||||
final ComposerArguments composerArguments = ComposerArguments(
|
||||
emailActionType: EmailActionType.edit,
|
||||
presentationEmail: PresentationEmail(
|
||||
success.composerCache.id,
|
||||
subject: success.composerCache.subject,
|
||||
from: success.composerCache.from,
|
||||
to: success.composerCache.to,
|
||||
cc: success.composerCache.cc,
|
||||
bcc: success.composerCache.bcc,
|
||||
),
|
||||
emailContents: success.composerCache.emailContentList,
|
||||
);
|
||||
openComposerOverlay(composerArguments);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -247,9 +249,6 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
|
||||
void _getUserProfile() async {
|
||||
userProfile.value = sessionCurrent != null ? UserProfile(sessionCurrent!.username.value) : null;
|
||||
if (kIsWeb && userProfile.value != null) {
|
||||
_handleComposerCache();
|
||||
}
|
||||
}
|
||||
|
||||
void _setSessionCurrent() {
|
||||
@@ -427,6 +426,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
sessionCurrent = session;
|
||||
accountId.value = sessionCurrent?.accounts.keys.first;
|
||||
_getUserProfile();
|
||||
_handleComposerCache();
|
||||
}
|
||||
|
||||
UnsignedInt? get maxSizeAttachmentsPerEmail {
|
||||
|
||||
Reference in New Issue
Block a user