handle session when reload

This commit is contained in:
ManhNTX
2022-07-12 16:10:07 +07:00
committed by Dat H. Pham
parent 269e8dbfef
commit 8735001010
7 changed files with 59 additions and 39 deletions
+2 -1
View File
@@ -16,6 +16,7 @@ export 'domain/exceptions/download_file_exception.dart';
export 'data/extensions/options_extensions.dart'; export 'data/extensions/options_extensions.dart';
export 'domain/exceptions/remote_exception.dart'; export 'domain/exceptions/remote_exception.dart';
export 'data/network/remote_exception_thrower.dart'; export 'data/network/remote_exception_thrower.dart';
export 'domain/exceptions/web_session_exception.dart';
// Utils // Utils
export 'presentation/utils/theme_utils.dart'; 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/download_manager.dart';
export 'data/network/download/downloaded_response.dart'; export 'data/network/download/downloaded_response.dart';
export 'data/network/download/download_client.dart'; export 'data/network/download/download_client.dart';
export 'data/model/exception/session_web_exception.dart'; export 'domain/exceptions/web_session_exception.dart';
// State // State
export 'presentation/state/success.dart'; 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(); await FkUserAgent.init();
}); });
} else { } else {
_listenBrowserTabRefresh(); WidgetsBinding.instance.addPostFrameCallback((_) {
_listenBrowserTabRefresh();
});
} }
} }
@@ -251,6 +253,7 @@ class ComposerController extends BaseController {
_removeComposerCacheOnWebInteractor.execute(); _removeComposerCacheOnWebInteractor.execute();
if (userProfile != null) { if (userProfile != null) {
final draftEmail = await _generateEmail( final draftEmail = await _generateEmail(
currentContext!,
mailboxDashBoardController.mapDefaultMailboxId, mailboxDashBoardController.mapDefaultMailboxId,
userProfile, userProfile,
); );
@@ -815,7 +818,8 @@ class ComposerController extends BaseController {
void _getEmailContentAction(ComposerArguments arguments) async { void _getEmailContentAction(ComposerArguments arguments) async {
if(arguments.emailContents != null && arguments.emailContents!.isNotEmpty){ if(arguments.emailContents != null && arguments.emailContents!.isNotEmpty){
emailContents.value = arguments.emailContents; _emailContents = arguments.emailContents;
emailContentsViewState.value = Right(GetEmailContentSuccess(_emailContents!,[],[]));
} else { } else {
final baseDownloadUrl = mailboxDashBoardController.sessionCurrent?.getDownloadUrl(); final baseDownloadUrl = mailboxDashBoardController.sessionCurrent?.getDownloadUrl();
final accountId = mailboxDashBoardController.sessionCurrent?.accounts.keys.first; 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/email/email_address.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart'; import 'package:model/model.dart';
@@ -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:tmail_ui_user/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart';
import 'package:universal_html/html.dart' as html; import 'package:universal_html/html.dart' as html;
class SessionStorageComposerDatasourceImpl extends SessionStorageComposerDatasource { class SessionStorageComposerDatasourceImpl
extends SessionStorageComposerDatasource {
@override @override
ComposerCache getComposerCacheOnWeb() { ComposerCache getComposerCacheOnWeb() {
try { try {
@@ -14,14 +15,15 @@ class SessionStorageComposerDatasourceImpl extends SessionStorageComposerDatasou
.where((e) => e.key == EmailActionType.edit.name) .where((e) => e.key == EmailActionType.edit.name)
.toList(); .toList();
if (result.isNotEmpty) { 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); final emailCache = ComposerCache.fromJson(jsonHandle);
return emailCache; return emailCache;
} else { } else {
throw SessionWebException(); throw NotFoundInWebSessionException();
} }
} catch (e) { } catch (e) {
throw SessionWebException(errorMessage: e.toString()); throw NotFoundInWebSessionException(errorMessage: e.toString());
} }
} }
@@ -31,7 +33,7 @@ class SessionStorageComposerDatasourceImpl extends SessionStorageComposerDatasou
html.window.sessionStorage html.window.sessionStorage
.removeWhere((key, value) => key == EmailActionType.edit.name); .removeWhere((key, value) => key == EmailActionType.edit.name);
} catch (e) { } 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); html.window.sessionStorage.addAll(entries);
} catch (e) { } catch (e) {
throw SessionWebException(errorMessage: e.toString()); throw SaveToWebSessionFailException(errorMessage: e.toString());
} }
} }
} }
@@ -125,26 +125,28 @@ class MailboxDashBoardController extends ReloadableController {
} }
void _handleComposerCache() async { void _handleComposerCache() async {
_getEmailCacheOnWebInteractor.execute().fold( if (kIsWeb && userProfile.value != null) {
(failure) {}, _getEmailCacheOnWebInteractor.execute().fold(
(success) { (failure) {},
if(success is GetComposerCacheSuccess){ (success) {
final ComposerArguments composerArguments = ComposerArguments( if(success is GetComposerCacheSuccess){
emailActionType: EmailActionType.edit, final ComposerArguments composerArguments = ComposerArguments(
presentationEmail: PresentationEmail( emailActionType: EmailActionType.edit,
success.composerCache.id, presentationEmail: PresentationEmail(
subject: success.composerCache.subject, success.composerCache.id,
from: success.composerCache.from, subject: success.composerCache.subject,
to: success.composerCache.to, from: success.composerCache.from,
cc: success.composerCache.cc, to: success.composerCache.to,
bcc: success.composerCache.bcc, cc: success.composerCache.cc,
), bcc: success.composerCache.bcc,
emailContents: success.composerCache.emailContentList, ),
); emailContents: success.composerCache.emailContentList,
openComposerOverlay(composerArguments); );
} openComposerOverlay(composerArguments);
}, }
); },
);
}
} }
@override @override
@@ -247,9 +249,6 @@ class MailboxDashBoardController extends ReloadableController {
void _getUserProfile() async { void _getUserProfile() async {
userProfile.value = sessionCurrent != null ? UserProfile(sessionCurrent!.username.value) : null; userProfile.value = sessionCurrent != null ? UserProfile(sessionCurrent!.username.value) : null;
if (kIsWeb && userProfile.value != null) {
_handleComposerCache();
}
} }
void _setSessionCurrent() { void _setSessionCurrent() {
@@ -427,6 +426,7 @@ class MailboxDashBoardController extends ReloadableController {
sessionCurrent = session; sessionCurrent = session;
accountId.value = sessionCurrent?.accounts.keys.first; accountId.value = sessionCurrent?.accounts.keys.first;
_getUserProfile(); _getUserProfile();
_handleComposerCache();
} }
UnsignedInt? get maxSizeAttachmentsPerEmail { UnsignedInt? get maxSizeAttachmentsPerEmail {