Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support cyrus server #3457

Open
wants to merge 16 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 12 commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 11 additions & 14 deletions core/lib/presentation/extensions/uri_extension.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,20 @@ extension URIExtension on Uri {

Uri toQualifiedUrl({required Uri baseUrl}) {
log('SessionUtils::toQualifiedUrl():baseUrl: $baseUrl | sourceUrl: $this');
if (toString().startsWith(baseUrl.toString())) {
final qualifiedUrl = toString().removeLastSlashOfUrl();
if (hasOrigin) {
final qualifiedUrl = toString();
log('SessionUtils::toQualifiedUrl():qualifiedUrl: $qualifiedUrl');
return Uri.parse(qualifiedUrl);
} else if (toString().isEmpty) {
log('SessionUtils::toQualifiedUrl():qualifiedUrl: $baseUrl');
return baseUrl;
} else {
if (!hasOrigin) {
final baseUrlValid = baseUrl.toString().removeLastSlashOfUrl();
final sourceUrlValid = toString().addFirstSlashOfUrl().removeLastSlashOfUrl();
log('SessionUtils::toQualifiedUrl():baseUrlValid: $baseUrlValid | sourceUrlValid: $sourceUrlValid');
final qualifiedUrl = baseUrlValid + sourceUrlValid;
log('SessionUtils::toQualifiedUrl():qualifiedUrl: $qualifiedUrl');
return Uri.parse(qualifiedUrl);
} else {
final qualifiedUrl = toString().removeLastSlashOfUrl();
log('SessionUtils::toQualifiedUrl():qualifiedUrl: $qualifiedUrl');
return Uri.parse(qualifiedUrl);
}
final baseUrlValid = baseUrl.toString().removeLastSlashOfUrl();
final sourceUrlValid = toString().addFirstSlashOfUrl();
log('SessionUtils::toQualifiedUrl():baseUrlValid: $baseUrlValid | sourceUrlValid: $sourceUrlValid');
final qualifiedUrl = baseUrlValid + sourceUrlValid;
log('SessionUtils::toQualifiedUrl():qualifiedUrl: $qualifiedUrl');
return Uri.parse(qualifiedUrl);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What happens if parse failed? Can we use tryParse instead?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any update? @florentos17

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What default behaviour would you expect if the parse fails and null is returned ?

The methods that call toQualifiedUrl (getQualifiedApiUrl, getDownloadUrl, getUploadUrl) mostly cannot work with null, so errors have to be thrown. But then it would be easier to just let toQualifiedUrl throw the error ?

}
}

Expand Down
6 changes: 3 additions & 3 deletions core/test/presentation/extensions/uri_extension_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ void main() {
final baseUrl = Uri.parse('https://domain.com');
final sourceUrl = Uri.parse('/jmap/');

final qualifiedUrlExpected = Uri.parse('https://domain.com/jmap');
final qualifiedUrlExpected = Uri.parse('https://domain.com/jmap/');
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why we need this? In what cases?

IMO, it is our normalization, please keep it in uniform.

Copy link
Collaborator Author

@florentos17 florentos17 Feb 4, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cyrus advertizes the following in the session: "uploadUrl": "/jmap/upload/{accountId}/"

when querying https://localhost/jmap/upload/bob/, the upload works, but with https://localhost/jmap/upload/bob (without the trailing /), I get a 404 Not Found error.

Copy link
Member

@hoangdat hoangdat Feb 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

okie, in this case, make it uniform, keep / for all qualified url, and update all the tests too.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But tmail-backend works the other way around: no / advertized, no / needed, and it does not work if the / is there...

So I feel like the solution is to keep the / if it is advertized, and not add it if not advertized ? But I agree that it is not uniform.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So I feel like the solution is to keep the / if it is advertized

yes. Update tests to include it

final qualifiedUrlResult = sourceUrl.toQualifiedUrl(baseUrl: baseUrl);

expect(qualifiedUrlResult, equals(qualifiedUrlExpected));
Expand Down Expand Up @@ -50,7 +50,7 @@ void main() {
final baseUrl = Uri.parse('https://domain.com/jmap');
final sourceUrl = Uri.parse('/');

final qualifiedUrlExpected = Uri.parse('https://domain.com/jmap');
final qualifiedUrlExpected = Uri.parse('https://domain.com/jmap/');
final qualifiedUrlResult = sourceUrl.toQualifiedUrl(baseUrl: baseUrl);

expect(qualifiedUrlResult, equals(qualifiedUrlExpected));
Expand All @@ -70,7 +70,7 @@ void main() {
final baseUrl = Uri.parse('https://domain.com:2000/jmap');
final sourceUrl = Uri.parse('https://domain.com:2001/jmap/');

final qualifiedUrlExpected = Uri.parse('https://domain.com:2001/jmap');
final qualifiedUrlExpected = Uri.parse('https://domain.com:2001/jmap/');
final qualifiedUrlResult = sourceUrl.toQualifiedUrl(baseUrl: baseUrl);

expect(qualifiedUrlResult, equals(qualifiedUrlExpected));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:dio/dio.dart';
import 'package:model/upload/file_info.dart';
import 'package:model/error_type_handler/unknown_uri_exception.dart';
import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart';
import 'package:tmail_ui_user/features/composer/domain/state/upload_attachment_state.dart';

Expand All @@ -13,10 +14,11 @@ class UploadAttachmentInteractor {

Stream<Either<Failure, Success>> execute(
FileInfo fileInfo,
Uri uploadUri, {
Uri? uploadUri, {
CancelToken? cancelToken,
}) async* {
try {
if (uploadUri == null) throw UnknownUriException();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should not put the uploadUri == null check in this interactor. It is against the interactor's functionality. You should check it before calling this interactor. uploadUri is required in this interactor.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is what I did at first, but it means the interactor is not even called in case of a null uploadUri, so there is no UploadAttachmentFailure, and the red toast notification "upload attachment failed" does not show on the app.

I thought it would be better for the UX to have the red toast notification show up, but I understand the concern. Should I change it to put the check before ? Maybe I can throw a GetUploadUriFailure earlier to still have the toast notification ?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, you check uploadUri != null before calling the interactor. And throw UploadAttachmentFailure(UnknownUriException()) exception as soon as you check it for null

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done !

final uploadAttachment = await _composerRepository.uploadAttachment(
fileInfo,
uploadUri,
Expand Down
8 changes: 4 additions & 4 deletions lib/features/composer/presentation/composer_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -824,15 +824,15 @@ class ComposerController extends BaseController
required EmailActionType actionType,
String? listPost,
}) {
final userName = mailboxDashBoardController.sessionCurrent?.username.value;
final senderEmailAddress = mailboxDashBoardController.sessionCurrent?.getOwnEmailAddress();
final isSender = presentationEmail.from
.asList()
.any((element) => element.emailAddress.isNotEmpty && element.emailAddress == userName);
.any((element) => element.emailAddress.isNotEmpty && element.emailAddress == senderEmailAddress);

final recipients = presentationEmail.generateRecipientsEmailAddressForComposer(
emailActionType: actionType,
isSender: isSender,
userName: userName,
userName: senderEmailAddress,
listPost: listPost,
);

Expand Down Expand Up @@ -1487,7 +1487,7 @@ class ComposerController extends BaseController
if (arguments.emailActionType == EmailActionType.editDraft) {
return arguments.presentationEmail?.firstEmailAddressInFrom ?? '';
} else {
return mailboxDashBoardController.sessionCurrent?.username.value ?? '';
return mailboxDashBoardController.sessionCurrent?.getOwnEmailAddress() ?? '';
}
}
return '';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/email/email_action_type.dart';
import 'package:model/extensions/email_address_extension.dart';
import 'package:model/extensions/username_extension.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
import 'package:tmail_ui_user/features/composer/presentation/extensions/identity_extension.dart';
Expand All @@ -26,23 +26,23 @@ extension CreateEmailRequestExtension on CreateEmailRequest {
if (identity?.email?.isNotEmpty == true) {
return { identity!.toEmailAddress() };
} else {
return { session.username.toEmailAddress() };
return { EmailAddress(null, session.getOwnEmailAddress()) };
}
}

String createMdnEmailAddress() {
if (emailActionType == EmailActionType.editDraft && fromSender.isNotEmpty) {
return fromSender.first.emailAddress;
} else {
return session.username.value;
return session.getOwnEmailAddress();
}
}

Set<EmailAddress> createReplyToRecipients() {
if (identity?.replyTo?.isNotEmpty == true) {
return identity!.replyTo!.toSet();
} else {
return { session.username.toEmailAddress() };
return { EmailAddress(null, session.getOwnEmailAddress()) };
}
}

Expand Down
3 changes: 3 additions & 0 deletions lib/features/contact/presentation/contact_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,9 @@ class ContactController extends BaseController with AutoCompleteResultMixin {
Future<void> _searchContactByNameOrEmail(String query) async {
log('ContactController::_searchContactByNameOrEmail(): query: $query');
final listContact = await _getAutoCompleteSuggestion(query);
if (query.isEmail && !listContact.map((emailAddress) => emailAddress.email).contains(query)) {
listContact.add(EmailAddress(null, query));
}
dab246 marked this conversation as resolved.
Show resolved Hide resolved
searchedContactList.value = listContact;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1347,7 +1347,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
return;
}

final receiverEmailAddress = _getReceiverEmailAddress(currentEmail!) ?? session!.username.value;
final receiverEmailAddress = _getReceiverEmailAddress(currentEmail!) ?? session!.getOwnEmailAddress();
log('SingleEmailController::_handleSendReceiptToSenderAction():receiverEmailAddress: $receiverEmailAddress');
final mdnToSender = _generateMDN(context, currentEmail!, receiverEmailAddress);
final sendReceiptRequest = SendReceiptToSenderRequest(
Expand Down Expand Up @@ -2198,8 +2198,8 @@ class SingleEmailController extends BaseController with AppLoaderMixin {

listEmailAddressAttendees.addAll(listEmailAddress);

final username = mailboxDashBoardController.sessionCurrent?.username.value ?? '';
final listEmailAddressMailTo = listEmailAddressAttendees.removeInvalidEmails(username);
final currentUserEmail = mailboxDashBoardController.sessionCurrent?.getOwnEmailAddress() ?? '';
final listEmailAddressMailTo = listEmailAddressAttendees.removeInvalidEmails(currentUserEmail);
log('SingleEmailController::handleMailToAttendees: listEmailAddressMailTo = $listEmailAddressMailTo');
mailboxDashBoardController.goToComposer(
ComposerArguments.fromMailtoUri(listEmailAddress: listEmailAddressMailTo)
Expand Down
9 changes: 1 addition & 8 deletions lib/features/home/domain/extensions/session_extensions.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import 'package:contact/contact/model/autocomplete_capability.dart';
import 'package:contact/contact/model/capability_contact.dart';
import 'package:core/presentation/extensions/uri_extension.dart';
import 'package:core/utils/app_logger.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/http/converter/state_converter.dart';
import 'package:jmap_dart_client/http/converter/user_name_converter.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
Expand Down Expand Up @@ -55,13 +54,7 @@ extension SessionExtensions on Session {

String get internalDomain {
try {
if (GetUtils.isEmail(username.value)) {
return username.value.split('@').last;
} else if (GetUtils.isEmail(personalAccount.name.value)) {
return personalAccount.name.value.split('@').last;
} else {
return '';
}
return getOwnEmailAddress().split('@').last;
} catch (e) {
logError('SessionExtensions::internalDomain: Exception: $e');
return '';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -353,9 +353,12 @@ class IdentityCreatorController extends BaseController with DragDropFileMixin im
void _getAllIdentitiesSuccess(GetAllIdentitiesSuccess success) {
if (success.identities?.isNotEmpty == true) {
listEmailAddressDefault.value = success.identities!
.where((identity) => (identity.email != null && identity.email!.isNotEmpty))
dab246 marked this conversation as resolved.
Show resolved Hide resolved
.map((identity) => identity.toEmailAddressNoName())
.toSet()
.toList();

listEmailAddressDefault.add(EmailAddress(null, session?.getOwnEmailAddress()));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do we need it?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cyrus does not advertize the address like tmail does, so without the change the list of possible addresses is empty (clicking on the widget does nothing):
image

with the change, the default address appears:
image

and I checked, it does not duplicate the address if it was already there when using tmail

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So you should check if listEmailAddressDefault.isEmpty then add getOwnEmailAddress. Avoid duplicate emails.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no, it is already good, there is already no duplication.
i can add a listEmailAddressDefault.isEmpty but it makes no difference

listEmailAddressOfReplyTo.add(noneEmailAddress);
listEmailAddressOfReplyTo.addAll(listEmailAddressDefault);
_setUpAllFieldEmailAddress();
Expand All @@ -375,11 +378,9 @@ class IdentityCreatorController extends BaseController with DragDropFileMixin im
void _setDefaultEmailAddressList() {
listEmailAddressOfReplyTo.add(noneEmailAddress);

if (session?.username.value.isNotEmpty == true) {
final userEmailAddress = EmailAddress(null, session?.username.value);
listEmailAddressDefault.add(userEmailAddress);
listEmailAddressOfReplyTo.addAll(listEmailAddressDefault);
}
final userEmailAddress = EmailAddress(null, session?.getOwnEmailAddress());
listEmailAddressDefault.add(userEmailAddress);
listEmailAddressOfReplyTo.addAll(listEmailAddressDefault);

_setUpAllFieldEmailAddress();
}
Expand Down
3 changes: 2 additions & 1 deletion lib/features/mailbox/presentation/mailbox_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'package:core/utils/direction_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/base/widget/application_version_widget.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/base_mailbox_view.dart';
Expand Down Expand Up @@ -225,7 +226,7 @@ class MailboxView extends BaseMailboxView {
}
return UserInformationWidget(
userName: controller.mailboxDashBoardController.accountId.value != null
? controller.mailboxDashBoardController.sessionCurrent?.username
? UserName(controller.mailboxDashBoardController.sessionCurrent!.getOwnEmailAddress())
: null,
subtitle: AppLocalizations.of(context).manage_account,
onSubtitleClick: controller.mailboxDashBoardController.goToSettings,
Expand Down
3 changes: 2 additions & 1 deletion lib/features/mailbox/presentation/mailbox_view_web.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'package:core/core.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/base/widget/application_logo_with_text_widget.dart';
import 'package:tmail_ui_user/features/base/widget/application_version_widget.dart';
Expand Down Expand Up @@ -142,7 +143,7 @@ class MailboxView extends BaseMailboxView {
if (!controller.responsiveUtils.isDesktop(context))
Obx(() => UserInformationWidget(
userName: controller.mailboxDashBoardController.accountId.value != null
? controller.mailboxDashBoardController.sessionCurrent?.username
? UserName(controller.mailboxDashBoardController.sessionCurrent!.getOwnEmailAddress())
: null,
subtitle: AppLocalizations.of(context).manage_account,
onSubtitleClick: controller.mailboxDashBoardController.goToSettings,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3118,7 +3118,7 @@ class MailboxDashBoardController extends ReloadableController
isRecoveringDeletedMessage.value = true;
}

String get userEmail => sessionCurrent?.username.value ?? '';
String get userEmail => sessionCurrent?.getOwnEmailAddress() ?? '';

Future<void> _removeComposerCacheOnWeb() async {
await _removeComposerCacheOnWebInteractor.execute();
Expand Down Expand Up @@ -3155,7 +3155,7 @@ class MailboxDashBoardController extends ReloadableController
position,
popupMenuUserSettingActionTile(
context,
sessionCurrent?.username,
sessionCurrent?.getOwnEmailAddress(),
onLogoutAction: () {
popBack();
logout(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ import 'package:jmap_dart_client/jmap/core/filter/filter.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:jmap_dart_client/jmap/core/utc_date.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_comparator.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_comparator_property.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart';
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
import 'package:model/email/presentation_email.dart';
import 'package:model/extensions/email_filter_condition_extension.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/base/mixin/date_range_picker_mixin.dart';
Expand Down Expand Up @@ -98,7 +98,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
sort: <Comparator>{}..add(
EmailComparator(EmailComparatorProperty.receivedAt)
..setIsAscending(false)),
filter: _mappingToFilterOnSuggestionForm(userName: session.username, query: query),
filter: _mappingToFilterOnSuggestionForm(currentUserEmail: session.getOwnEmailAddress(), query: query),
properties: EmailUtils.getPropertiesForEmailGetMethod(session, accountId),
).then((result) => result.fold(
(failure) => <PresentationEmail>[],
Expand All @@ -108,7 +108,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
));
}

Filter? _mappingToFilterOnSuggestionForm({required String query, required UserName userName}) {
Filter? _mappingToFilterOnSuggestionForm({required String query, required String currentUserEmail}) {
log('SearchController::_mappingToFilterOnSuggestionForm():query: $query');
final filterCondition = EmailFilterCondition(
text: query.isNotEmpty == true ? query : null,
Expand All @@ -122,7 +122,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
? true
: null,
from: listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe)
? userName.value
? currentUserEmail
: null,
hasKeyword: listFilterOnSuggestionForm.contains(QuickSearchFilter.starred)
? KeyWordIdentifier.emailFlagged.value
Expand All @@ -134,19 +134,19 @@ class SearchController extends BaseController with DateRangePickerMixin {
: null;
}

void applyFilterSuggestionToSearchFilter(UserName? userName) {
void applyFilterSuggestionToSearchFilter(String? currentUserEmail) {
final receiveTime = listFilterOnSuggestionForm.contains(QuickSearchFilter.last7Days)
? EmailReceiveTimeType.last7Days
: EmailReceiveTimeType.allTime;

final hasAttachment = listFilterOnSuggestionForm.contains(QuickSearchFilter.hasAttachment) ? true : false;

var listFromAddress = searchEmailFilter.value.from;
if (userName != null) {
if (currentUserEmail != null) {
if (listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe)) {
listFromAddress.add(userName.value);
listFromAddress.add(currentUserEmail);
} else {
listFromAddress.remove(userName.value);
listFromAddress.remove(currentUserEmail);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:flutter_portal/flutter_portal.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:model/extensions/presentation_mailbox_extension.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:model/extensions/username_extension.dart';
import 'package:tmail_ui_user/features/base/widget/popup_item_no_icon_widget.dart';
import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.dart';
Expand Down Expand Up @@ -543,7 +544,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
final searchEmailFilter = controller.searchController.searchEmailFilter.value;
final sortOrderType = controller.searchController.sortOrderFiltered;
final listAddressOfFrom = controller.searchController.listAddressOfFromFiltered;
final userName = controller.sessionCurrent?.username;
final currentUserEmail = controller.sessionCurrent?.getOwnEmailAddress();
final startDate = controller.searchController.startDateFiltered;
final endDate = controller.searchController.endDateFiltered;
final receiveTimeType = controller.searchController.receiveTimeFiltered;
Expand All @@ -554,7 +555,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
context,
searchEmailFilter,
sortOrderType,
userName);
currentUserEmail);

EdgeInsetsGeometry? buttonPadding;
if (searchFilter != QuickSearchFilter.sortBy) {
Expand All @@ -573,7 +574,6 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
sortOrderType: sortOrderType,
listAddressOfFrom: listAddressOfFrom,
listAddressOfTo: listAddressOfTo,
userName: userName,
mailbox: mailbox,
buttonPadding: buttonPadding,
onSelectSearchFilterAction: _onSelectSearchFilterAction,
Expand Down
Loading
Loading