diff --git a/model/lib/email/presentation_email.dart b/model/lib/email/presentation_email.dart index 9e60e7ed0..abdd78e49 100644 --- a/model/lib/email/presentation_email.dart +++ b/model/lib/email/presentation_email.dart @@ -1,17 +1,86 @@ import 'package:equatable/equatable.dart'; +import 'package:intl/intl.dart'; +import 'package:jmap_dart_client/jmap/core/id.dart'; +import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; +import 'package:jmap_dart_client/jmap/core/utc_date.dart'; +import 'package:jmap_dart_client/jmap/mail/email/email.dart'; +import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; +import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart'; +import 'package:model/mailbox/select_mode.dart'; +import 'package:model/extensions/email_address_extension.dart'; -class PresentationThread with EquatableMixin { +class PresentationEmail with EquatableMixin { - final String id; - final String? message; + static PresentationEmail presentationEmailEmpty = PresentationEmail(EmailId(Id('empty'))); - PresentationThread(this.id, {this.message}); + final EmailId id; + final Map? keywords; + final UnsignedInt? size; + final UTCDate? receivedAt; + final bool? hasAttachment; + final String? preview; + final String? subject; + final UTCDate? sentAt; + final Set? from; + final Set? to; + final Set? cc; + final Set? bcc; + final Set? replyTo; + final SelectMode selectMode; - factory PresentationThread.createThreadEmpty() { - return PresentationThread('empty'); + PresentationEmail( + this.id, + { + this.keywords, + this.size, + this.receivedAt, + this.hasAttachment, + this.preview, + this.subject, + this.sentAt, + this.from, + this.to, + this.cc, + this.bcc, + this.replyTo, + this.selectMode = SelectMode.INACTIVE + } + ); + + String getSenderName() { + if (from != null && from!.isNotEmpty) { + return from!.first.asString(); + } + return ''; } + String getEmailTitle() => subject != null ? subject! : ''; + + String getPartialContent() => preview != null ? preview! : ''; + + String getTimeForToday() => receivedAt != null ? DateFormat('h:mm a').format(receivedAt!.value) : ''; + + String getTimeForYesterday() => receivedAt != null ? DateFormat('EEE').format(receivedAt!.value) : ''; + + String getTimeThisYear() => receivedAt != null ? DateFormat('MMMd').format(receivedAt!.value) : ''; + + String getTimeOtherYear() => receivedAt != null ? DateFormat('yMMMd').format(receivedAt!.value) : ''; + @override - List get props => [id, message]; + List get props => [ + id, + subject, + from, + to, + cc, + bcc, + keywords, + size, + receivedAt, + sentAt, + replyTo, + preview, + hasAttachment + ]; } \ No newline at end of file diff --git a/model/lib/extensions/email_address_extension.dart b/model/lib/extensions/email_address_extension.dart new file mode 100644 index 000000000..3241d3218 --- /dev/null +++ b/model/lib/extensions/email_address_extension.dart @@ -0,0 +1,13 @@ +import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; + +extension EmailAddressExtension on EmailAddress { + + String asString() { + if (name != null && name!.isNotEmpty) { + return name!; + } else if (email != null && email!.isNotEmpty) { + return email!; + } + return ''; + } +} \ No newline at end of file diff --git a/model/lib/mailbox/presentation_mailbox.dart b/model/lib/mailbox/presentation_mailbox.dart index 2f5c3d82b..89a044f23 100644 --- a/model/lib/mailbox/presentation_mailbox.dart +++ b/model/lib/mailbox/presentation_mailbox.dart @@ -6,6 +6,8 @@ import 'package:model/mailbox/select_mode.dart'; class PresentationMailbox with EquatableMixin { + static PresentationMailbox presentationMailboxEmpty = PresentationMailbox(MailboxId(Id('empty'))); + final MailboxId id; final MailboxName? name; final MailboxId? parentId; @@ -36,10 +38,6 @@ class PresentationMailbox with EquatableMixin { } ); - factory PresentationMailbox.createMailboxEmpty() { - return PresentationMailbox(MailboxId(Id("empty"))); - } - bool hasParentId() => parentId != null && parentId!.id.value.isNotEmpty; bool hasRole() => role != null && role!.value.isNotEmpty; diff --git a/model/lib/model.dart b/model/lib/model.dart index 89e73417f..449879aa2 100644 --- a/model/lib/model.dart +++ b/model/lib/model.dart @@ -15,3 +15,6 @@ export 'mailbox/expand_mode.dart'; // Email export 'email/presentation_email.dart'; + +// Extensions +export 'extensions/email_address_extension.dart'; \ No newline at end of file diff --git a/model/pubspec.yaml b/model/pubspec.yaml index 5a8443883..4636fde62 100644 --- a/model/pubspec.yaml +++ b/model/pubspec.yaml @@ -34,11 +34,14 @@ dependencies: # quiver quiver: 3.0.1 + # intl + intl: 0.17.0 + # jmap_dart_client jmap_dart_client: git: - url: git://github.com/dab246/jmap-dart-client.git - ref: fixbug_get_session + url: git://github.com/linagora/jmap-dart-client.git + ref: master dev_dependencies: flutter_test: @@ -93,7 +96,3 @@ flutter: # maintain consistency when adding or modifying assets and plugins. # They also do not have any bearing on your native host application's # identifiers, which may be completely independent or the same as these. - module: - androidX: true - androidPackage: com.linagora.android.tmail.model - iosBundleIdentifier: com.linagora.android.tmail.model diff --git a/pubspec.yaml b/pubspec.yaml index 273072df5..f3b0c0835 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -77,8 +77,8 @@ dependencies: # jmap_dart_client jmap_dart_client: git: - url: git://github.com/dab246/jmap-dart-client.git - ref: fixbug_get_session + url: git://github.com/linagora/jmap-dart-client.git + ref: master dev_dependencies: flutter_test: