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 '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';
@@ -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());
}
}
}
@@ -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 {