fix: Email content disappears after marking as star/unstar when thread is disabled

This commit is contained in:
dab246
2025-10-17 10:08:43 +07:00
committed by Dat H. Pham
parent 474a8806e2
commit bfe80bdc78
5 changed files with 55 additions and 19 deletions
@@ -228,6 +228,9 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
GlobalObjectKey? get htmlViewKey => _threadDetailController?.expandedEmailHtmlViewKey;
bool get isThreadDetailEnabled =>
_threadDetailController?.isThreadDetailEnabled == true;
SingleEmailController(
this._getEmailContentInteractor,
this._markAsEmailReadInteractor,
@@ -1343,32 +1346,28 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
}
}
void markAsStarEmail(
PresentationEmail presentationEmail,
MarkStarAction markStarAction,
) {
if (accountId != null && session != null) {
consumeState(_markAsStarEmailInteractor.execute(
session!,
accountId!,
presentationEmail.id!,
markStarAction,
));
}
}
void _markAsEmailStarSuccess(MarkAsStarEmailSuccess success) {
final newEmail = currentEmail?.updateKeywords({
KeyWordIdentifier.emailFlagged: success.markStarAction == MarkStarAction.markStar,
});
final newKeywords = {
KeyWordIdentifier.emailFlagged:
success.markStarAction == MarkStarAction.markStar,
};
final newEmail = currentEmail?.updateKeywords(newKeywords);
final emailId = newEmail?.id;
if (emailId == null) return;
_threadDetailController?.emailIdsPresentation[emailId] = newEmail;
if (PlatformInfo.isMobile && !isThreadDetailEnabled) {
mailboxDashBoardController.selectedEmail.value?.resyncKeywords(newKeywords);
} else {
_threadDetailController?.emailIdsPresentation[emailId] = newEmail;
}
mailboxDashBoardController.updateEmailFlagByEmailIds(
[emailId],
markStarAction: success.markStarAction,
);
toastManager.showMessageSuccess(success);
}
void handleEmailAction(BuildContext context, PresentationEmail presentationEmail, EmailActionType actionType) {
+13 -1
View File
@@ -1,5 +1,5 @@
{
"@@last_modified": "2025-10-14T15:18:48.964794",
"@@last_modified": "2025-10-17T09:52:08.303266",
"initializing_data": "Initializing data...",
"@initializing_data": {
"type": "text",
@@ -4925,5 +4925,17 @@
"placeholders": {
"count": {}
}
},
"mailHasBeenStarred": "Mail has been starred",
"@mailHasBeenStarred": {
"type": "text",
"placeholders_order": [],
"placeholders": {}
},
"mailHasBeenUnstarred": "Mail has been unstarred",
"@mailHasBeenUnstarred": {
"type": "text",
"placeholders_order": [],
"placeholders": {}
}
}
@@ -5198,4 +5198,18 @@ class AppLocalizations {
args: [count],
);
}
String get mailHasBeenStarred {
return Intl.message(
'Mail has been starred',
name: 'mailHasBeenStarred',
);
}
String get mailHasBeenUnstarred {
return Intl.message(
'Mail has been unstarred',
name: 'mailHasBeenUnstarred',
);
}
}
+6
View File
@@ -12,11 +12,13 @@ import 'package:jmap_dart_client/jmap/core/error/method/error_method_response.da
import 'package:jmap_dart_client/jmap/core/error/method/exception/error_method_response_exception.dart';
import 'package:jmap_dart_client/jmap/core/error/set_error.dart';
import 'package:model/email/email_action_type.dart';
import 'package:model/email/mark_star_action.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:tmail_ui_user/features/composer/domain/exceptions/set_method_exception.dart';
import 'package:tmail_ui_user/features/email/domain/exceptions/calendar_event_exceptions.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
import 'package:tmail_ui_user/features/email/domain/state/calendar_event_reply_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_star_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/parse_email_by_blob_id_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/preview_email_from_eml_file_state.dart';
import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart';
@@ -244,6 +246,10 @@ class ToastManager {
} else {
message = appLocalizations.you_are_changed_your_identity_successfully;
}
} else if (success is MarkAsStarEmailSuccess) {
message = success.markStarAction == MarkStarAction.markStar
? appLocalizations.mailHasBeenStarred
: appLocalizations.mailHasBeenUnstarred;
}
log('ToastManager::showMessageSuccess: Message: $message');
if (message?.trim().isNotEmpty == true) {
@@ -202,4 +202,9 @@ extension PresentationEmailExtension on PresentationEmail {
MailboxId? get firstMailboxIdAvailable =>
mailboxIds?.entries.firstWhereOrNull((element) => element.value)?.key;
void resyncKeywords(Map<KeyWordIdentifier, bool> newKeywords) {
keywords?.addAll(newKeywords);
keywords?.removeWhere((key, value) => !value);
}
}