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 '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';
|
||||||
|
|||||||
+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: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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+23
-23
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user