Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
10 changes: 10 additions & 0 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.

# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import 'package:jmap_dart_client/jmap/mail/calendar/properties/attendee/calendar_attendee_expect_reply.dart';
import 'package:json_annotation/json_annotation.dart';

class CalendarAttendeeExpectReplyNullableConverter implements JsonConverter<CalendarAttendeeExpectReply?, bool?> {
const CalendarAttendeeExpectReplyNullableConverter();

@override
CalendarAttendeeExpectReply? fromJson(bool? json) => json != null ? CalendarAttendeeExpectReply(json) : null;

@override
bool? toJson(CalendarAttendeeExpectReply? object) => object?.value;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import 'package:jmap_dart_client/jmap/mail/calendar/properties/attendee/calendar_attendee_kind.dart';
import 'package:json_annotation/json_annotation.dart';

class CalendarAttendeeKindNullableConverter implements JsonConverter<CalendarAttendeeKind?, String?> {
const CalendarAttendeeKindNullableConverter();

@override
CalendarAttendeeKind? fromJson(String? json) => json != null ? CalendarAttendeeKind(json) : null;

@override
String? toJson(CalendarAttendeeKind? object) => object?.value;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import 'package:jmap_dart_client/jmap/mail/calendar/properties/attendee/calendar_attendee_mail_to.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/properties/mail_address.dart';
import 'package:json_annotation/json_annotation.dart';

class CalendarAttendeeMailToNullableConverter implements JsonConverter<CalendarAttendeeMailTo?, String?> {
const CalendarAttendeeMailToNullableConverter();

@override
CalendarAttendeeMailTo? fromJson(String? json) => json != null ? CalendarAttendeeMailTo(MailAddress(json)) : null;

@override
String? toJson(CalendarAttendeeMailTo? object) => object?.mailAddress.value;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import 'package:jmap_dart_client/jmap/mail/calendar/properties/attendee/calendar_attendee_name.dart';
import 'package:json_annotation/json_annotation.dart';

class CalendarAttendeeNameNullableConverter implements JsonConverter<CalendarAttendeeName?, String?> {
const CalendarAttendeeNameNullableConverter();

@override
CalendarAttendeeName? fromJson(String? json) => json != null ? CalendarAttendeeName(json) : null;

@override
String? toJson(CalendarAttendeeName? object) => object?.name;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import 'package:jmap_dart_client/jmap/mail/calendar/properties/attendee/calendar_attendee_participation_status.dart';
import 'package:json_annotation/json_annotation.dart';

class CalendarAttendeeParticipationStatusNullableConverter implements JsonConverter<CalendarAttendeeParticipationStatus?, String?> {
const CalendarAttendeeParticipationStatusNullableConverter();

@override
CalendarAttendeeParticipationStatus? fromJson(String? json) => json != null ? CalendarAttendeeParticipationStatus(json) : null;

@override
String? toJson(CalendarAttendeeParticipationStatus? object) => object?.value;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import 'package:jmap_dart_client/jmap/mail/calendar/properties/attendee/calendar_attendee_role.dart';
import 'package:json_annotation/json_annotation.dart';

class CalendarAttendeeRoleNullableConverter implements JsonConverter<CalendarAttendeeRole?, String?> {
const CalendarAttendeeRoleNullableConverter();

@override
CalendarAttendeeRole? fromJson(String? json) => json != null ? CalendarAttendeeRole(json) : null;

@override
String? toJson(CalendarAttendeeRole? object) => object?.value;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import 'package:jmap_dart_client/jmap/mail/calendar/properties/calendar_duration.dart';
import 'package:json_annotation/json_annotation.dart';

class CalendarDurationNullableConverter implements JsonConverter<CalendarDuration?, String?> {
const CalendarDurationNullableConverter();

@override
CalendarDuration? fromJson(String? json) => json != null ? CalendarDuration(json) : null;

@override
String? toJson(CalendarDuration? object) => object?.value;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import 'package:jmap_dart_client/jmap/mail/calendar/properties/calendar_extension_fields.dart';
import 'package:json_annotation/json_annotation.dart';

class CalendarAttendeeExtensionFieldsNullableConverter implements JsonConverter<CalendarExtensionFields?, dynamic> {
const CalendarAttendeeExtensionFieldsNullableConverter();

@override
CalendarExtensionFields? fromJson(dynamic json) {
if (json is Map<String, dynamic>) {
final mapExtensionFields = json.map((key, values) {
final listFields = (values as List<dynamic>).map((value) => value as String).toList();
return MapEntry(key, listFields);
});
return CalendarExtensionFields(mapExtensionFields);
} else {
return null;
}
}

@override
dynamic toJson(CalendarExtensionFields? object) => object?.mapFields.toString();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import 'package:jmap_dart_client/jmap/mail/calendar/properties/calendar_priority.dart';
import 'package:json_annotation/json_annotation.dart';

class CalendarPriorityNullableConverter implements JsonConverter<CalendarPriority?, int?> {
const CalendarPriorityNullableConverter();

@override
CalendarPriority? fromJson(int? json) => json != null ? CalendarPriority(json) : null;

@override
int? toJson(CalendarPriority? object) => object?.value;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import 'package:jmap_dart_client/jmap/mail/calendar/properties/calendar_sequence.dart';
import 'package:json_annotation/json_annotation.dart';

class CalendarSequenceNullableConverter implements JsonConverter<CalendarSequence?, int?> {
const CalendarSequenceNullableConverter();

@override
CalendarSequence? fromJson(int? json) => json != null ? CalendarSequence(json) : null;

@override
int? toJson(CalendarSequence? object) => object?.value;
}
12 changes: 12 additions & 0 deletions lib/http/converter/calendar/event_id_nullable_converter.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import 'package:jmap_dart_client/jmap/mail/calendar/properties/event_id.dart';
import 'package:json_annotation/json_annotation.dart';

class EventIdNullableConverter implements JsonConverter<EventId?, String?> {
const EventIdNullableConverter();

@override
EventId? fromJson(String? json) => json != null ? EventId(json) : null;

@override
String? toJson(EventId? object) => object?.id;
}
12 changes: 12 additions & 0 deletions lib/http/converter/calendar/mail_address_nullable_converter.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import 'package:jmap_dart_client/jmap/mail/calendar/properties/mail_address.dart';
import 'package:json_annotation/json_annotation.dart';

class MailAddressNullableConverter implements JsonConverter<MailAddress?, String?> {
const MailAddressNullableConverter();

@override
MailAddress? fromJson(String? json) => json != null ? MailAddress(json) : null;

@override
String? toJson(MailAddress? object) => object?.value;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/properties/recurrence_rule/recurrence_rule_count.dart';
import 'package:json_annotation/json_annotation.dart';

class RecurrenceRuleCountNullableConverter implements JsonConverter<RecurrenceRuleCount?, int?> {
const RecurrenceRuleCountNullableConverter();

@override
RecurrenceRuleCount? fromJson(int? json) => json != null ? RecurrenceRuleCount(UnsignedInt(json)) : null;

@override
int? toJson(RecurrenceRuleCount? object) => object?.value.value.toInt();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/properties/recurrence_rule/recurrence_rule_interval.dart';
import 'package:json_annotation/json_annotation.dart';

class RecurrenceRuleIntervalNullableConverter implements JsonConverter<RecurrenceRuleInterval?, int?> {
const RecurrenceRuleIntervalNullableConverter();

@override
RecurrenceRuleInterval? fromJson(int? json) => json != null ? RecurrenceRuleInterval(UnsignedInt(json)) : null;

@override
int? toJson(RecurrenceRuleInterval? object) => object?.value.value.toInt();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import 'package:jmap_dart_client/jmap/mail/calendar/properties/recurrence_rule/recurrence_rule_rscale.dart';
import 'package:json_annotation/json_annotation.dart';

class RecurrenceRuleRScaleNullableConverter implements JsonConverter<RecurrenceRuleRScale?, String?> {
const RecurrenceRuleRScaleNullableConverter();

@override
RecurrenceRuleRScale? fromJson(String? json) => json != null ? RecurrenceRuleRScale(json) : null;

@override
String? toJson(RecurrenceRuleRScale? object) => object?.value;
}
1 change: 1 addition & 0 deletions lib/jmap/core/capability/capability_identifier.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ class CapabilityIdentifier with EquatableMixin {
static final jmapQuota = CapabilityIdentifier(Uri.parse('urn:ietf:params:jmap:quota'));
static final jmapTeamMailboxes = CapabilityIdentifier(Uri.parse('urn:apache:james:params:jmap:mail:shares'));
static final jamesSortOrder = CapabilityIdentifier(Uri.parse('urn:apache:james:params:jmap:mail:identity:sortorder'));
static final jamesCalendarEvent = CapabilityIdentifier(Uri.parse('com:linagora:params:calendar:event'));

final Uri value;

Expand Down
107 changes: 107 additions & 0 deletions lib/jmap/mail/calendar/calendar_event.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@

import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/http/converter/calendar/calendar_duration_nullable_converter.dart';
import 'package:jmap_dart_client/http/converter/calendar/calendar_extension_fields_nullable_converter.dart';
import 'package:jmap_dart_client/http/converter/calendar/calendar_priority_nullable_converter.dart';
import 'package:jmap_dart_client/http/converter/calendar/calendar_sequence_nullable_converter.dart';
import 'package:jmap_dart_client/http/converter/calendar/event_id_nullable_converter.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/properties/attendee/calendar_attendee.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/properties/calendar_duration.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/properties/calendar_event_status.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/properties/calendar_extension_fields.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/properties/calendar_free_busy_status.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/properties/calendar_organizer.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/properties/calendar_privacy.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/properties/calendar_priority.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/properties/calendar_sequence.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/properties/event_id.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/properties/event_method.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/properties/recurrence_rule/recurrence_rule.dart';
import 'package:json_annotation/json_annotation.dart';

part 'calendar_event.g.dart';

@CalendarPriorityNullableConverter()
@CalendarSequenceNullableConverter()
@CalendarDurationNullableConverter()
@EventIdNullableConverter()
@CalendarAttendeeExtensionFieldsNullableConverter()
@JsonSerializable(explicitToJson: true, includeIfNull: false)
class CalendarEvent with EquatableMixin {

@JsonKey(name: 'uid')
final EventId? eventId;

final String? title;
final String? description;

@JsonKey(name: 'start')
final DateTime? startDate;

@JsonKey(name: 'end')
final DateTime? endDate;

final CalendarDuration? duration;
final String? timeZone;
final String? location;
final EventMethod? method;
final CalendarSequence? sequence;
final CalendarPrivacy? privacy;
final CalendarPriority? priority;
final CalendarFreeBusyStatus? freeBusyStatus;
final CalendarEventStatus? status;
final CalendarOrganizer? organizer;
final List<CalendarAttendee>? participants;
final CalendarExtensionFields? extensionFields;
final List<RecurrenceRule>? recurrenceRules;
final List<RecurrenceRule>? excludedCalendarEvents;

CalendarEvent({
this.eventId,
this.title,
this.description,
this.startDate,
this.endDate,
this.duration,
this.timeZone,
this.location,
this.method,
this.sequence,
this.privacy,
this.priority,
this.freeBusyStatus,
this.status,
this.organizer,
this.participants,
this.extensionFields,
this.recurrenceRules,
this.excludedCalendarEvents
});

factory CalendarEvent.fromJson(Map<String, dynamic> json) => _$CalendarEventFromJson(json);

Map<String, dynamic> toJson() => _$CalendarEventToJson(this);

@override
List<Object?> get props => [
eventId,
title,
description,
startDate,
endDate,
duration,
timeZone,
location,
method,
sequence,
privacy,
priority,
freeBusyStatus,
status,
organizer,
participants,
extensionFields,
recurrenceRules,
excludedCalendarEvents
];
}
Loading