TF-3578 Calendar event show free busy status
This commit is contained in:
@@ -1,9 +1,14 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:jmap_dart_client/http/http_client.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/request/request_invocation.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/response/response_object.dart';
|
||||
import 'package:jmap_dart_client/jmap/jmap_request.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/calendar/attendance/get_calendar_event_attendance_method.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/calendar/attendance/get_calendar_event_attendance_response.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/calendar/parse/calendar_event_parse_method.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/calendar/parse/calendar_event_parse_response.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/calendar/reply/calendar_event_accept_method.dart';
|
||||
@@ -23,8 +28,20 @@ class CalendarEventAPI {
|
||||
|
||||
Future<List<BlobCalendarEvent>> parse(AccountId accountId, Set<Id> blobIds) async {
|
||||
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
|
||||
|
||||
// Parse
|
||||
final calendarEventParseMethod = CalendarEventParseMethod(accountId, blobIds);
|
||||
final calendarEventParseInvocation = requestBuilder.invocation(calendarEventParseMethod);
|
||||
|
||||
// Free/Busy query
|
||||
final calendarEventAttendanceGetMethod = GetCalendarEventAttendanceMethod(
|
||||
accountId,
|
||||
blobIds.toList(),
|
||||
);
|
||||
final calendarEventAttendanceGetInvocation = requestBuilder.invocation(
|
||||
calendarEventAttendanceGetMethod,
|
||||
);
|
||||
|
||||
final response = await (requestBuilder
|
||||
..usings(calendarEventParseMethod.requiredCapabilities))
|
||||
.build()
|
||||
@@ -33,11 +50,24 @@ class CalendarEventAPI {
|
||||
final calendarEventParseResponse = response.parse<CalendarEventParseResponse>(
|
||||
calendarEventParseInvocation.methodCallId,
|
||||
CalendarEventParseResponse.deserialize);
|
||||
final calendarEventAttendanceGetResponse = _parseCalendarEventAttendance(
|
||||
response,
|
||||
calendarEventAttendanceGetInvocation.methodCallId,
|
||||
);
|
||||
final calendarBlobIdStatusMap = Map.fromEntries(
|
||||
(calendarEventAttendanceGetResponse?.list ?? []).map(
|
||||
(calendarEventAttendance) => MapEntry(
|
||||
calendarEventAttendance.blobId,
|
||||
calendarEventAttendance.isFree,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
if (calendarEventParseResponse?.parsed?.isNotEmpty == true) {
|
||||
return calendarEventParseResponse!.parsed!.entries
|
||||
.map((entry) => BlobCalendarEvent(
|
||||
blobId: entry.key,
|
||||
isFree: calendarBlobIdStatusMap[entry.key] ?? true,
|
||||
calendarEventList: entry.value))
|
||||
.toList();
|
||||
} else if (calendarEventParseResponse?.notParsable?.isNotEmpty == true) {
|
||||
@@ -49,6 +79,20 @@ class CalendarEventAPI {
|
||||
}
|
||||
}
|
||||
|
||||
GetCalendarEventAttendanceResponse? _parseCalendarEventAttendance(
|
||||
ResponseObject response,
|
||||
MethodCallId methodCallId,
|
||||
) {
|
||||
try {
|
||||
return response.parse<GetCalendarEventAttendanceResponse>(
|
||||
methodCallId,
|
||||
GetCalendarEventAttendanceResponse.deserialize);
|
||||
} catch (e) {
|
||||
logError('CalendarEventAPI.parse free/busy query error: $e');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Future<CalendarEventAcceptResponse> acceptEventInvitation(
|
||||
AccountId accountId,
|
||||
Set<Id> blobIds,
|
||||
|
||||
Reference in New Issue
Block a user