Use custom mapCapabilitiesConverter to apply some outside capabilities

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-02-03 15:41:13 +07:00
committed by Dat H. Pham
parent e7e89789c7
commit f1d9fa65de
6 changed files with 41 additions and 129 deletions
@@ -1,6 +1,7 @@
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:tmail_ui_user/features/home/data/datasource/session_datasource.dart';
import 'package:tmail_ui_user/features/home/data/network/session_api.dart';
import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart';
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
class SessionDataSourceImpl extends SessionDataSource {
@@ -13,7 +14,9 @@ class SessionDataSourceImpl extends SessionDataSource {
@override
Future<Session> getSession() {
return Future.sync(() async {
return await _sessionAPI.getSession();
return await _sessionAPI.getSession(
converters: SessionExtensions.customMapCapabilitiesConverter,
);
}).catchError(_exceptionThrower.throwException);
}
@@ -1,9 +1,15 @@
import 'dart:convert';
import 'package:jmap_dart_client/http/converter/capabilities_converter.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:tmail_ui_user/features/home/data/model/session_hive_obj.dart';
import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart';
extension SessionHiveObjExtension on SessionHiveObj {
Session toSession() => Session.fromJson(jsonDecode(value));
Session toSession() => Session.fromJson(
jsonDecode(value),
converter: CapabilitiesConverter.defaultConverter
..addConverters(SessionExtensions.customMapCapabilitiesConverter),
);
}
@@ -15,6 +15,10 @@ class SessionAPI {
Future<Session> getSession({Map<CapabilityIdentifier, CapabilityProperties Function(Map<String, dynamic>)>? converters}) async {
final getSessionBuilder = GetSessionBuilder(httpClient);
if (converters != null) {
getSessionBuilder.registerCapabilityConverter(converters);
}
final result = await getSessionBuilder.build().execute();
return result;