Migrate v0.11.3-patch4-dev to master branch
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import 'dart:async' as async;
|
||||
import 'package:async/async.dart';
|
||||
import 'package:core/domain/extensions/media_type_extension.dart';
|
||||
import 'package:core/data/constants/constant.dart';
|
||||
import 'package:desktop_drop/desktop_drop.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:future_loading_dialog/future_loading_dialog.dart';
|
||||
@@ -43,7 +43,7 @@ mixin DragDropFileMixin {
|
||||
fileName: details.files[i].name,
|
||||
type: details.files[i].mimeType,
|
||||
fileSize: bytesList.result![i].length,
|
||||
isInline: details.files[i].mimeType?.startsWith(MediaTypeExtension.imageType) == true
|
||||
isInline: details.files[i].mimeType?.startsWith(Constant.imageType) == true
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -44,6 +44,8 @@ enum EventActionType {
|
||||
KeyWordIdentifierExtension.tentativelyAcceptedEventAttendance.generatePath(): null,
|
||||
KeyWordIdentifierExtension.rejectedEventAttendance.generatePath(): true,
|
||||
});
|
||||
case EventActionType.mailToAttendees:
|
||||
return PatchObject({});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,6 +57,8 @@ enum EventActionType {
|
||||
return AppLocalizations.of(context).youMayAttendThisMeeting;
|
||||
case EventActionType.no:
|
||||
return AppLocalizations.of(context).youWillNotAttendThisMeeting;
|
||||
case EventActionType.mailToAttendees:
|
||||
return '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,8 +74,8 @@ import 'package:tmail_ui_user/features/email/domain/usecases/store_opened_email_
|
||||
import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/bindings/calendar_event_interactor_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/controller/email_supervisor_controller.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/blob_calendar_event.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/extensions/attachment_extension.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/blob_calendar_event.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/email_loaded.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/email_unsubscribe.dart';
|
||||
@@ -1800,7 +1800,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
|
||||
void handleViewAttachmentAction(BuildContext context, Attachment attachment) {
|
||||
if (PlatformInfo.isWeb) {
|
||||
if (PlatformInfo.isCanvasKit && attachment.isDisplayedPDFIcon) {
|
||||
if (PlatformInfo.isCanvasKit && attachment.validatePDFIcon()) {
|
||||
previewPDFFileAction(context, attachment);
|
||||
} else {
|
||||
downloadAttachmentForWeb(attachment);
|
||||
@@ -1839,4 +1839,24 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
void handleMailToAttendees(CalendarOrganizer? organizer, List<CalendarAttendee>? attendees) {
|
||||
final listEmailAddressAttendees = attendees
|
||||
?.map((attendee) => EmailAddress(attendee.name?.name, attendee.mailto?.mailAddress.value))
|
||||
.toList() ?? [];
|
||||
|
||||
if (organizer != null) {
|
||||
listEmailAddressAttendees.add(EmailAddress(organizer.name, organizer.mailto?.value));
|
||||
}
|
||||
|
||||
final listEmailAddressMailTo = listEmailAddressAttendees
|
||||
.where((emailAddress) => emailAddress.emailAddress.isNotEmpty && emailAddress.emailAddress != mailboxDashBoardController.sessionCurrent?.username.value)
|
||||
.toSet()
|
||||
.toList();
|
||||
|
||||
log('SingleEmailController::handleMailToAttendees: listEmailAddressMailTo = $listEmailAddressMailTo');
|
||||
mailboxDashBoardController.goToComposer(
|
||||
ComposerArguments.fromMailtoUri(listEmailAddress: listEmailAddressMailTo)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,6 @@ import 'package:model/extensions/presentation_mailbox_extension.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||
import 'package:tmail_ui_user/features/base/widget/popup_item_widget.dart';
|
||||
import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/controller/single_email_controller.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/extensions/calendar_event_extension.dart';
|
||||
@@ -148,33 +147,30 @@ class EmailView extends GetWidget<SingleEmailController> {
|
||||
child: Obx(() => _buildEmailMessage(
|
||||
context: context,
|
||||
presentationEmail: currentEmail,
|
||||
calendarEvent: controller.calendarEvent.value,
|
||||
calendarEvent: controller.calendarEvent,
|
||||
maxBodyHeight: constraints.maxHeight
|
||||
))
|
||||
)
|
||||
);
|
||||
} else {
|
||||
return Obx(() {
|
||||
final calendarEvent = controller.calendarEvent.value;
|
||||
final calendarEvent = controller.calendarEvent;
|
||||
if (currentEmail.hasCalendarEvent && calendarEvent != null) {
|
||||
return Padding(
|
||||
padding: const EdgeInsetsDirectional.symmetric(horizontal: 4),
|
||||
child: ScrollbarListView(
|
||||
scrollController: controller.emailContentScrollController,
|
||||
child: SingleChildScrollView(
|
||||
physics : const ClampingScrollPhysics(),
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
alignment: Alignment.center,
|
||||
color: Colors.white,
|
||||
child: _buildEmailMessage(
|
||||
context: context,
|
||||
presentationEmail: currentEmail,
|
||||
calendarEvent: calendarEvent,
|
||||
emailAddressSender: currentEmail.listEmailAddressSender.getListAddress(),
|
||||
)
|
||||
child: SingleChildScrollView(
|
||||
physics : const ClampingScrollPhysics(),
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
alignment: Alignment.center,
|
||||
color: Colors.white,
|
||||
child: _buildEmailMessage(
|
||||
context: context,
|
||||
presentationEmail: currentEmail,
|
||||
calendarEvent: calendarEvent,
|
||||
emailAddressSender: currentEmail.listEmailAddressSender.getListAddress(),
|
||||
)
|
||||
),
|
||||
)
|
||||
),
|
||||
);
|
||||
} else {
|
||||
@@ -199,34 +195,31 @@ class EmailView extends GetWidget<SingleEmailController> {
|
||||
child: Obx(() => _buildEmailMessage(
|
||||
context: context,
|
||||
presentationEmail: currentEmail,
|
||||
calendarEvent: controller.calendarEvent.value,
|
||||
calendarEvent: controller.calendarEvent,
|
||||
maxBodyHeight: constraints.maxHeight
|
||||
))
|
||||
)
|
||||
);
|
||||
} else {
|
||||
return Obx(() {
|
||||
final calendarEvent = controller.calendarEvent.value;
|
||||
final calendarEvent = controller.calendarEvent;
|
||||
if (currentEmail.hasCalendarEvent && calendarEvent != null) {
|
||||
return Padding(
|
||||
padding: const EdgeInsetsDirectional.symmetric(horizontal: 4),
|
||||
child: ScrollbarListView(
|
||||
scrollController: controller.emailContentScrollController,
|
||||
child: SingleChildScrollView(
|
||||
physics : const ClampingScrollPhysics(),
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
alignment: Alignment.center,
|
||||
color: Colors.white,
|
||||
child: _buildEmailMessage(
|
||||
context: context,
|
||||
presentationEmail: currentEmail,
|
||||
calendarEvent: calendarEvent,
|
||||
emailAddressSender: currentEmail.listEmailAddressSender.getListAddress(),
|
||||
maxBodyHeight: constraints.maxHeight
|
||||
)
|
||||
child: SingleChildScrollView(
|
||||
physics : const ClampingScrollPhysics(),
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
alignment: Alignment.center,
|
||||
color: Colors.white,
|
||||
child: _buildEmailMessage(
|
||||
context: context,
|
||||
presentationEmail: currentEmail,
|
||||
calendarEvent: calendarEvent,
|
||||
emailAddressSender: currentEmail.listEmailAddressSender.getListAddress(),
|
||||
maxBodyHeight: constraints.maxHeight
|
||||
)
|
||||
),
|
||||
)
|
||||
),
|
||||
);
|
||||
} else {
|
||||
@@ -367,6 +360,7 @@ class EmailView extends GetWidget<SingleEmailController> {
|
||||
controller.onCalendarEventReplyAction(eventActionType, presentationEmail.id!),
|
||||
calendarEventReplying: controller.calendarEventProcessing,
|
||||
presentationEmail: controller.currentEmail,
|
||||
onMailtoAttendeesAction: controller.handleMailToAttendees,
|
||||
)),
|
||||
if (calendarEvent.getTitleEventAction(context, emailAddressSender ?? []).isNotEmpty)
|
||||
CalendarEventActionBannerWidget(
|
||||
@@ -384,6 +378,7 @@ class EmailView extends GetWidget<SingleEmailController> {
|
||||
controller.onCalendarEventReplyAction(eventActionType, presentationEmail.id!),
|
||||
calendarEventReplying: controller.calendarEventProcessing,
|
||||
presentationEmail: controller.currentEmail,
|
||||
onMailtoAttendeesAction: controller.handleMailToAttendees,
|
||||
)),
|
||||
],
|
||||
)
|
||||
|
||||
@@ -4,4 +4,6 @@ import 'package:tmail_ui_user/features/upload/domain/extensions/media_type_exten
|
||||
|
||||
extension AttachmentExtension on Attachment {
|
||||
String getIcon(ImagePaths imagePaths) => type?.getIcon(imagePaths, fileName: name) ?? imagePaths.icFileEPup;
|
||||
|
||||
bool validatePDFIcon() => type?.validatePDFIcon(fileName: name) ?? false;
|
||||
}
|
||||
+8
@@ -97,6 +97,8 @@ class CalendarEventActionButtonWidget extends StatelessWidget {
|
||||
return CalendarEventActionButtonWidgetStyles.loadingBackgroundColor;
|
||||
}
|
||||
|
||||
return CalendarEventActionButtonWidgetStyles.backgroundColor;
|
||||
case EventActionType.mailToAttendees:
|
||||
return CalendarEventActionButtonWidgetStyles.backgroundColor;
|
||||
}
|
||||
}
|
||||
@@ -120,6 +122,8 @@ class CalendarEventActionButtonWidget extends StatelessWidget {
|
||||
return CalendarEventActionButtonWidgetStyles.selectedTextColor;
|
||||
}
|
||||
|
||||
return CalendarEventActionButtonWidgetStyles.textColor;
|
||||
case EventActionType.mailToAttendees:
|
||||
return CalendarEventActionButtonWidgetStyles.textColor;
|
||||
}
|
||||
}
|
||||
@@ -143,6 +147,8 @@ class CalendarEventActionButtonWidget extends StatelessWidget {
|
||||
return CalendarEventActionButtonWidgetStyles.selectedBackgroundColor;
|
||||
}
|
||||
|
||||
return CalendarEventActionButtonWidgetStyles.textColor;
|
||||
case EventActionType.mailToAttendees:
|
||||
return CalendarEventActionButtonWidgetStyles.textColor;
|
||||
}
|
||||
}
|
||||
@@ -164,6 +170,8 @@ class CalendarEventActionButtonWidget extends StatelessWidget {
|
||||
return null;
|
||||
}
|
||||
return () => onCalendarEventReplyActionClick(eventActionType);
|
||||
case EventActionType.mailToAttendees:
|
||||
return onMailToAttendeesAction;
|
||||
}
|
||||
}
|
||||
}
|
||||
+10
@@ -1,6 +1,8 @@
|
||||
import 'package:core/presentation/views/html_viewer/html_content_viewer_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/calendar/calendar_event.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/calendar/properties/attendee/calendar_attendee.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/calendar/properties/calendar_organizer.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/extensions/calendar_event_extension.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/styles/calendar_event_detail_widget_styles.dart';
|
||||
@@ -13,6 +15,8 @@ import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event
|
||||
import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/event_title_widget.dart';
|
||||
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||
|
||||
typedef OnMailtoAttendeesAction = Function(CalendarOrganizer? organizer, List<CalendarAttendee>? participants);
|
||||
|
||||
class CalendarEventDetailWidget extends StatelessWidget {
|
||||
|
||||
final CalendarEvent calendarEvent;
|
||||
@@ -24,6 +28,7 @@ class CalendarEventDetailWidget extends StatelessWidget {
|
||||
final OnCalendarEventReplyActionClick onCalendarEventReplyActionClick;
|
||||
final bool calendarEventReplying;
|
||||
final PresentationEmail? presentationEmail;
|
||||
final OnMailtoAttendeesAction? onMailtoAttendeesAction;
|
||||
|
||||
const CalendarEventDetailWidget({
|
||||
super.key,
|
||||
@@ -36,6 +41,7 @@ class CalendarEventDetailWidget extends StatelessWidget {
|
||||
this.onOpenComposerAction,
|
||||
this.onMailtoDelegateAction,
|
||||
this.presentationEmail,
|
||||
this.onMailtoAttendeesAction,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -99,6 +105,10 @@ class CalendarEventDetailWidget extends StatelessWidget {
|
||||
onCalendarEventReplyActionClick: onCalendarEventReplyActionClick,
|
||||
calendarEventReplying: calendarEventReplying,
|
||||
presentationEmail: presentationEmail,
|
||||
onMailToAttendeesAction: () => onMailtoAttendeesAction?.call(
|
||||
calendarEvent.organizer,
|
||||
calendarEvent.participants,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
+10
@@ -25,6 +25,7 @@ class CalendarEventInformationWidget extends StatelessWidget {
|
||||
final OnCalendarEventReplyActionClick onCalendarEventReplyActionClick;
|
||||
final bool calendarEventReplying;
|
||||
final PresentationEmail? presentationEmail;
|
||||
final OnMailtoAttendeesAction? onMailtoAttendeesAction;
|
||||
|
||||
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
||||
|
||||
@@ -36,6 +37,7 @@ class CalendarEventInformationWidget extends StatelessWidget {
|
||||
this.onOpenNewTabAction,
|
||||
this.onOpenComposerAction,
|
||||
this.presentationEmail,
|
||||
this.onMailtoAttendeesAction,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -123,6 +125,10 @@ class CalendarEventInformationWidget extends StatelessWidget {
|
||||
onCalendarEventReplyActionClick: onCalendarEventReplyActionClick,
|
||||
calendarEventReplying: calendarEventReplying,
|
||||
presentationEmail: presentationEmail,
|
||||
onMailToAttendeesAction: () => onMailtoAttendeesAction?.call(
|
||||
calendarEvent.organizer,
|
||||
calendarEvent.participants,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -194,6 +200,10 @@ class CalendarEventInformationWidget extends StatelessWidget {
|
||||
onCalendarEventReplyActionClick: onCalendarEventReplyActionClick,
|
||||
calendarEventReplying: calendarEventReplying,
|
||||
presentationEmail: presentationEmail,
|
||||
onMailToAttendeesAction: () => onMailtoAttendeesAction?.call(
|
||||
calendarEvent.organizer,
|
||||
calendarEvent.participants,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -4,8 +4,6 @@ import 'package:core/presentation/views/image/avatar_builder.dart';
|
||||
import 'package:core/presentation/views/text/text_overflow_builder.dart';
|
||||
import 'package:core/utils/platform_info.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/extensions/username_extension.dart';
|
||||
import 'package:tmail_ui_user/features/base/widget/material_text_button.dart';
|
||||
|
||||
Reference in New Issue
Block a user