TF-1625 Get capability supported for Identity/set method
(cherry picked from commit 16a77edba891a628b728d05ddd3a61c9ba45b8dc)
This commit is contained in:
@@ -409,8 +409,9 @@ class ComposerController extends BaseController {
|
||||
|
||||
void _getAllIdentities() {
|
||||
final accountId = mailboxDashBoardController.accountId.value;
|
||||
if (accountId != null) {
|
||||
consumeState(_getAllIdentitiesInteractor.execute(accountId));
|
||||
final session = mailboxDashBoardController.sessionCurrent;
|
||||
if (accountId != null && session != null) {
|
||||
consumeState(_getAllIdentitiesInteractor.execute(session, accountId));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -253,8 +253,9 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
|
||||
void _getAllIdentities() {
|
||||
final accountId = mailboxDashBoardController.accountId.value;
|
||||
if (accountId != null) {
|
||||
consumeState(_getAllIdentitiesInteractor.execute(accountId));
|
||||
final session = mailboxDashBoardController.sessionCurrent;
|
||||
if (accountId != null && session != null) {
|
||||
consumeState(_getAllIdentitiesInteractor.execute(session, accountId));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@ class IdentityCreatorController extends BaseController {
|
||||
final bccOfIdentity = Rxn<EmailAddress>();
|
||||
final actionType = IdentityActionType.create.obs;
|
||||
final isDefaultIdentity = RxBool(false);
|
||||
final isDefaultIdentitySupported = RxBool(false);
|
||||
|
||||
late RichTextController keyboardRichTextController;
|
||||
late RichTextWebController richTextWebController;
|
||||
@@ -120,6 +121,7 @@ class IdentityCreatorController extends BaseController {
|
||||
userProfile = arguments!.userProfile;
|
||||
identity = arguments!.identity;
|
||||
actionType.value = arguments!.actionType;
|
||||
_checkDefaultIdentityIsSupported();
|
||||
_setUpValueFromIdentity();
|
||||
_getAllIdentities();
|
||||
}
|
||||
@@ -147,6 +149,12 @@ class IdentityCreatorController extends BaseController {
|
||||
);
|
||||
}
|
||||
|
||||
void _checkDefaultIdentityIsSupported() {
|
||||
if (session != null && accountId != null) {
|
||||
isDefaultIdentitySupported.value = [CapabilityIdentifier.jamesSortOrder].isSupported(session!, accountId!);
|
||||
}
|
||||
}
|
||||
|
||||
void _setUpValueFromIdentity() {
|
||||
_nameIdentity = identity?.name ?? '';
|
||||
inputNameIdentityController?.text = identity?.name ?? '';
|
||||
@@ -160,21 +168,12 @@ class IdentityCreatorController extends BaseController {
|
||||
}
|
||||
|
||||
void _getAllIdentities() {
|
||||
log('IdentityCreatorController::_getAllIdentities() ');
|
||||
if (accountId != null) {
|
||||
try {
|
||||
requireCapability(session!, accountId!, [CapabilityIdentifier.jamesSortOrder]);
|
||||
consumeState(_getAllIdentitiesInteractor.execute(
|
||||
accountId!,
|
||||
properties: Properties({'email', 'sortOrder'})
|
||||
));
|
||||
} catch (e) {
|
||||
logError('IdentityCreatorController::_getAllIdentities(): exception: $e');
|
||||
consumeState(_getAllIdentitiesInteractor.execute(
|
||||
accountId!,
|
||||
properties: Properties({'email'})
|
||||
));
|
||||
}
|
||||
if (accountId != null && session != null) {
|
||||
final propertiesRequired = isDefaultIdentitySupported.isTrue
|
||||
? Properties({'email', 'sortOrder'})
|
||||
: Properties({'email'});
|
||||
|
||||
consumeState(_getAllIdentitiesInteractor.execute(session!, accountId!, properties: propertiesRequired));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,7 +186,10 @@ class IdentityCreatorController extends BaseController {
|
||||
listEmailAddressOfReplyTo.add(noneEmailAddress);
|
||||
listEmailAddressOfReplyTo.addAll(listEmailAddressDefault);
|
||||
_setUpAllFieldEmailAddress();
|
||||
_setUpDefaultIdentity(success.identities);
|
||||
|
||||
if (isDefaultIdentitySupported.isTrue) {
|
||||
_setUpDefaultIdentity(success.identities);
|
||||
}
|
||||
} else {
|
||||
_setDefaultEmailAddressList();
|
||||
}
|
||||
@@ -319,9 +321,9 @@ class IdentityCreatorController extends BaseController {
|
||||
? {replyToOfIdentity.value!}
|
||||
: <EmailAddress>{};
|
||||
|
||||
final sortOrder = isDefaultIdentity.value
|
||||
? UnsignedInt(0)
|
||||
: UnsignedInt(100);
|
||||
final sortOrder = isDefaultIdentitySupported.isTrue
|
||||
? UnsignedInt(isDefaultIdentity.value ? 0 : 100)
|
||||
: null;
|
||||
|
||||
final newIdentity = Identity(
|
||||
name: _nameIdentity,
|
||||
|
||||
@@ -271,13 +271,20 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController> {
|
||||
child: _buildSignatureHtmlTemplate(context),
|
||||
),
|
||||
if (_responsiveUtils.isTablet(context) || _responsiveUtils.isMobile(context))...[
|
||||
Obx(() => Padding(
|
||||
padding: const EdgeInsets.only(top: 27),
|
||||
child: SetDefaultIdentityCheckboxBuilder(
|
||||
imagePaths: _imagePaths,
|
||||
isCheck: controller.isDefaultIdentity.value,
|
||||
onCheckboxChanged: controller.onCheckboxChanged),
|
||||
)),
|
||||
Obx(() {
|
||||
if (controller.isDefaultIdentitySupported.isTrue) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(top: 27),
|
||||
child: SetDefaultIdentityCheckboxBuilder(
|
||||
imagePaths: _imagePaths,
|
||||
isCheck: controller.isDefaultIdentity.value,
|
||||
onCheckboxChanged: controller.onCheckboxChanged
|
||||
)
|
||||
);
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
}),
|
||||
const SizedBox(height: 24),
|
||||
Container(
|
||||
alignment: Alignment.center,
|
||||
@@ -467,10 +474,15 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController> {
|
||||
return Row(
|
||||
children: [
|
||||
Obx(() {
|
||||
return SetDefaultIdentityCheckboxBuilder(
|
||||
imagePaths: _imagePaths,
|
||||
isCheck: controller.isDefaultIdentity.value,
|
||||
onCheckboxChanged: controller.onCheckboxChanged);
|
||||
if (controller.isDefaultIdentitySupported.isTrue) {
|
||||
return SetDefaultIdentityCheckboxBuilder(
|
||||
imagePaths: _imagePaths,
|
||||
isCheck: controller.isDefaultIdentity.value,
|
||||
onCheckboxChanged: controller.onCheckboxChanged
|
||||
);
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
}),
|
||||
Expanded(
|
||||
child: Padding(
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_identity_request.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/edit_identity_request.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/identities_response.dart';
|
||||
|
||||
abstract class IdentityDataSource {
|
||||
Future<IdentitiesResponse> getAllIdentities(AccountId accountId, {Properties? properties});
|
||||
Future<IdentitiesResponse> getAllIdentities(Session session, AccountId accountId, {Properties? properties});
|
||||
|
||||
Future<Identity> createNewIdentity(AccountId accountId, CreateNewIdentityRequest identityRequest);
|
||||
Future<Identity> createNewIdentity(Session session, AccountId accountId, CreateNewIdentityRequest identityRequest);
|
||||
|
||||
Future<bool> deleteIdentity(AccountId accountId, IdentityId identityId);
|
||||
Future<bool> deleteIdentity(Session session, AccountId accountId, IdentityId identityId);
|
||||
|
||||
Future<bool> editIdentity(AccountId accountId, EditIdentityRequest editIdentityRequest);
|
||||
Future<bool> editIdentity(Session session, AccountId accountId, EditIdentityRequest editIdentityRequest);
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/data/datasource/identity_data_source.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/data/network/identity_api.dart';
|
||||
@@ -16,31 +17,30 @@ class IdentityDataSourceImpl extends IdentityDataSource {
|
||||
IdentityDataSourceImpl(this._identityAPI, this._exceptionThrower);
|
||||
|
||||
@override
|
||||
Future<IdentitiesResponse> getAllIdentities(AccountId accountId,
|
||||
{Properties? properties}) {
|
||||
Future<IdentitiesResponse> getAllIdentities(Session session, AccountId accountId, {Properties? properties}) {
|
||||
return Future.sync(() async {
|
||||
return await _identityAPI.getAllIdentities(accountId, properties: properties);
|
||||
return await _identityAPI.getAllIdentities(session, accountId, properties: properties);
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Identity> createNewIdentity(AccountId accountId, CreateNewIdentityRequest identityRequest) {
|
||||
Future<Identity> createNewIdentity(Session session, AccountId accountId, CreateNewIdentityRequest identityRequest) {
|
||||
return Future.sync(() async {
|
||||
return await _identityAPI.createNewIdentity(accountId, identityRequest);
|
||||
return await _identityAPI.createNewIdentity(session, accountId, identityRequest);
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> deleteIdentity(AccountId accountId, IdentityId identityId) {
|
||||
Future<bool> deleteIdentity(Session session, AccountId accountId, IdentityId identityId) {
|
||||
return Future.sync(() async {
|
||||
return await _identityAPI.deleteIdentity(accountId, identityId);
|
||||
return await _identityAPI.deleteIdentity(session, accountId, identityId);
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> editIdentity(AccountId accountId, EditIdentityRequest editIdentityRequest) {
|
||||
Future<bool> editIdentity(Session session, AccountId accountId, EditIdentityRequest editIdentityRequest) {
|
||||
return Future.sync(() async {
|
||||
return await _identityAPI.editIdentity(accountId, editIdentityRequest);
|
||||
return await _identityAPI.editIdentity(session, accountId, editIdentityRequest);
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,7 @@ import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||
import 'package:jmap_dart_client/jmap/identities/set/set_identity_method.dart';
|
||||
import 'package:jmap_dart_client/jmap/identities/set/set_identity_response.dart';
|
||||
import 'package:jmap_dart_client/jmap/jmap_request.dart';
|
||||
import 'package:model/identity/identity_request_dto.dart';
|
||||
import 'package:model/extensions/list_identity_id_extension.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_default_identity_request.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_identity_request.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/edit_default_identity_request.dart';
|
||||
@@ -31,7 +31,9 @@ class IdentityAPI {
|
||||
if (properties != null) {
|
||||
getIdentityMethod.addProperties(properties);
|
||||
}
|
||||
final capabilitySupported = [CapabilityIdentifier.jamesSortOrder].isSupported(session, accountId)
|
||||
|
||||
final jamesSortOrderIsSupported = [CapabilityIdentifier.jamesSortOrder].isSupported(session, accountId);
|
||||
final capabilitySupported = jamesSortOrderIsSupported
|
||||
? getIdentityMethod.requiredCapabilitiesSupportSortOrder
|
||||
: getIdentityMethod.requiredCapabilities;
|
||||
|
||||
@@ -49,14 +51,22 @@ class IdentityAPI {
|
||||
return IdentitiesResponse(identities: response?.list, state: response?.state);
|
||||
}
|
||||
|
||||
Future<Identity> createNewIdentity(AccountId accountId, CreateNewIdentityRequest identityRequest) async {
|
||||
Future<Identity> createNewIdentity(Session session, AccountId accountId, CreateNewIdentityRequest identityRequest) async {
|
||||
final setIdentityMethod = SetIdentityMethod(accountId)
|
||||
..addCreate(identityRequest.creationId, identityRequest.newIdentity);
|
||||
|
||||
var capabilities = setIdentityMethod.requiredCapabilities;
|
||||
if (identityRequest is CreateNewDefaultIdentityRequest) {
|
||||
capabilities = setIdentityMethod.requiredCapabilitiesSupportSortOrder;
|
||||
_addUpdatesToCreateDefaultIdentityMethod(setIdentityMethod, identityRequest);
|
||||
|
||||
final jamesSortOrderIsSupported = [CapabilityIdentifier.jamesSortOrder].isSupported(session, accountId);
|
||||
final capabilitySupported = jamesSortOrderIsSupported
|
||||
? setIdentityMethod.requiredCapabilitiesSupportSortOrder
|
||||
: setIdentityMethod.requiredCapabilities;
|
||||
|
||||
if (jamesSortOrderIsSupported &&
|
||||
identityRequest is CreateNewDefaultIdentityRequest &&
|
||||
identityRequest.oldDefaultIdentityIds != null
|
||||
) {
|
||||
setIdentityMethod.addUpdates(
|
||||
identityRequest.oldDefaultIdentityIds!.generateMapUpdateObjectSortOrder(sortOrder: UnsignedInt(100))
|
||||
);
|
||||
}
|
||||
|
||||
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
|
||||
@@ -64,7 +74,7 @@ class IdentityAPI {
|
||||
final setIdentityInvocation = requestBuilder.invocation(setIdentityMethod);
|
||||
|
||||
final response = await (requestBuilder
|
||||
..usings(capabilities))
|
||||
..usings(capabilitySupported))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
@@ -75,27 +85,21 @@ class IdentityAPI {
|
||||
return setIdentityResponse!.created![identityRequest.creationId]!;
|
||||
}
|
||||
|
||||
void _addUpdatesToCreateDefaultIdentityMethod(
|
||||
SetIdentityMethod setIdentityMethod,
|
||||
CreateNewDefaultIdentityRequest identityRequest
|
||||
) {
|
||||
for (var i = 0; i < (identityRequest.oldDefaultIdentityIds?.length ?? 0); i++) {
|
||||
setIdentityMethod.addUpdates({
|
||||
identityRequest.oldDefaultIdentityIds![i].id : PatchObject(IdentityRequestDto(sortOrder: UnsignedInt(100)).toJson())
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> deleteIdentity(AccountId accountId, IdentityId identityId) async {
|
||||
Future<bool> deleteIdentity(Session session, AccountId accountId, IdentityId identityId) async {
|
||||
final setIdentityMethod = SetIdentityMethod(accountId)
|
||||
..addDestroy({identityId.id});
|
||||
|
||||
final jamesSortOrderIsSupported = [CapabilityIdentifier.jamesSortOrder].isSupported(session, accountId);
|
||||
final capabilitySupported = jamesSortOrderIsSupported
|
||||
? setIdentityMethod.requiredCapabilitiesSupportSortOrder
|
||||
: setIdentityMethod.requiredCapabilities;
|
||||
|
||||
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
|
||||
|
||||
final setIdentityInvocation = requestBuilder.invocation(setIdentityMethod);
|
||||
|
||||
final response = await (requestBuilder
|
||||
..usings(setIdentityMethod.requiredCapabilities))
|
||||
..usings(capabilitySupported))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
@@ -106,21 +110,24 @@ class IdentityAPI {
|
||||
return setIdentityResponse?.destroyed?.contains(identityId.id) == true;
|
||||
}
|
||||
|
||||
Future<bool> editIdentity(AccountId accountId, EditIdentityRequest editIdentityRequest) async {
|
||||
Future<bool> editIdentity(Session session, AccountId accountId, EditIdentityRequest editIdentityRequest) async {
|
||||
final setIdentityMethod = SetIdentityMethod(accountId)
|
||||
..addUpdates({
|
||||
editIdentityRequest.identityId.id : PatchObject(editIdentityRequest.identityRequest.toJson())
|
||||
});
|
||||
|
||||
var capabilities = setIdentityMethod.requiredCapabilities;
|
||||
|
||||
if (editIdentityRequest is EditDefaultIdentityRequest) {
|
||||
for (var identityId in editIdentityRequest.oldDefaultIdentityIds ?? []) {
|
||||
setIdentityMethod.addUpdates({
|
||||
identityId.id: PatchObject(IdentityRequestDto(sortOrder: UnsignedInt(100)).toJson())
|
||||
});
|
||||
}
|
||||
capabilities = setIdentityMethod.requiredCapabilitiesSupportSortOrder;
|
||||
final jamesSortOrderIsSupported = [CapabilityIdentifier.jamesSortOrder].isSupported(session, accountId);
|
||||
final capabilitySupported = jamesSortOrderIsSupported
|
||||
? setIdentityMethod.requiredCapabilitiesSupportSortOrder
|
||||
: setIdentityMethod.requiredCapabilities;
|
||||
|
||||
if (jamesSortOrderIsSupported &&
|
||||
editIdentityRequest is EditDefaultIdentityRequest &&
|
||||
editIdentityRequest.oldDefaultIdentityIds != null
|
||||
) {
|
||||
setIdentityMethod.addUpdates(
|
||||
editIdentityRequest.oldDefaultIdentityIds!.generateMapUpdateObjectSortOrder(sortOrder: UnsignedInt(100))
|
||||
);
|
||||
}
|
||||
|
||||
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
|
||||
@@ -128,7 +135,7 @@ class IdentityAPI {
|
||||
final setIdentityInvocation = requestBuilder.invocation(setIdentityMethod);
|
||||
|
||||
final response = await (requestBuilder
|
||||
..usings(capabilities))
|
||||
..usings(capabilitySupported))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/data/datasource/identity_data_source.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_identity_request.dart';
|
||||
@@ -15,22 +16,22 @@ class IdentityRepositoryImpl extends IdentityRepository {
|
||||
IdentityRepositoryImpl(this._dataSource);
|
||||
|
||||
@override
|
||||
Future<IdentitiesResponse> getAllIdentities(AccountId accountId, {Properties? properties}) {
|
||||
return _dataSource.getAllIdentities(accountId, properties: properties);
|
||||
Future<IdentitiesResponse> getAllIdentities(Session session, AccountId accountId, {Properties? properties}) {
|
||||
return _dataSource.getAllIdentities(session, accountId, properties: properties);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Identity> createNewIdentity(AccountId accountId, CreateNewIdentityRequest identityRequest) {
|
||||
return _dataSource.createNewIdentity(accountId, identityRequest);
|
||||
Future<Identity> createNewIdentity(Session session, AccountId accountId, CreateNewIdentityRequest identityRequest) {
|
||||
return _dataSource.createNewIdentity(session, accountId, identityRequest);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> deleteIdentity(AccountId accountId, IdentityId identityId) {
|
||||
return _dataSource.deleteIdentity(accountId, identityId);
|
||||
Future<bool> deleteIdentity(Session session, AccountId accountId, IdentityId identityId) {
|
||||
return _dataSource.deleteIdentity(session, accountId, identityId);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> editIdentity(AccountId accountId, EditIdentityRequest editIdentityRequest) {
|
||||
return _dataSource.editIdentity(accountId, editIdentityRequest);
|
||||
Future<bool> editIdentity(Session session, AccountId accountId, EditIdentityRequest editIdentityRequest) {
|
||||
return _dataSource.editIdentity(session, accountId, editIdentityRequest);
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,17 @@
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_identity_request.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/edit_identity_request.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/identities_response.dart';
|
||||
|
||||
abstract class IdentityRepository {
|
||||
Future<IdentitiesResponse> getAllIdentities(AccountId accountId, {Properties? properties});
|
||||
Future<IdentitiesResponse> getAllIdentities(Session session, AccountId accountId, {Properties? properties});
|
||||
|
||||
Future<Identity> createNewIdentity(AccountId accountId, CreateNewIdentityRequest identityRequest);
|
||||
Future<Identity> createNewIdentity(Session session, AccountId accountId, CreateNewIdentityRequest identityRequest);
|
||||
|
||||
Future<bool> deleteIdentity(AccountId accountId, IdentityId identityId);
|
||||
Future<bool> deleteIdentity(Session session, AccountId accountId, IdentityId identityId);
|
||||
|
||||
Future<bool> editIdentity(AccountId accountId, EditIdentityRequest editIdentityRequest);
|
||||
Future<bool> editIdentity(Session session, AccountId accountId, EditIdentityRequest editIdentityRequest);
|
||||
}
|
||||
+16
-9
@@ -1,9 +1,11 @@
|
||||
import 'dart:core';
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_default_identity_request.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_identity_request.dart';
|
||||
@@ -19,26 +21,31 @@ class CreateNewDefaultIdentityInteractor {
|
||||
this._identityRepository,
|
||||
this._identityUtils);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId, CreateNewIdentityRequest identityRequest) async* {
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
CreateNewIdentityRequest identityRequest
|
||||
) async* {
|
||||
try {
|
||||
yield Right(CreateNewDefaultIdentityLoading());
|
||||
final listDefaultIdentities = await _getDefaultIdentities(accountId);
|
||||
final listDefaultIdentities = await _getDefaultIdentities(session, accountId);
|
||||
|
||||
final defaultRequest = _createNewIdentityDefault(identityRequest, listDefaultIdentities);
|
||||
|
||||
final newIdentity = await _identityRepository.createNewIdentity(accountId, defaultRequest);
|
||||
final newIdentity = await _identityRepository.createNewIdentity(session, accountId, defaultRequest);
|
||||
yield Right(CreateNewDefaultIdentitySuccess(newIdentity));
|
||||
} catch (exception) {
|
||||
yield Left(CreateNewDefaultIdentityFailure(exception));
|
||||
}
|
||||
}
|
||||
|
||||
Future<List<Identity>?> _getDefaultIdentities(AccountId accountId) async {
|
||||
Future<List<Identity>?> _getDefaultIdentities(Session session, AccountId accountId) async {
|
||||
final listIdentities = await _identityRepository
|
||||
.getAllIdentities(
|
||||
accountId,
|
||||
properties: Properties({'sortOrder', 'mayDelete'})
|
||||
);
|
||||
.getAllIdentities(
|
||||
session,
|
||||
accountId,
|
||||
properties: Properties({'sortOrder', 'mayDelete'})
|
||||
);
|
||||
listIdentities.identities?.removeWhere(_isIdentityUnDeletable);
|
||||
return _identityUtils.getSmallestOrderedIdentity(listIdentities.identities);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'dart:core';
|
||||
import 'package:core/core.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_identity_request.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/repository/identity_repository.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/create_new_identity_state.dart';
|
||||
@@ -12,10 +13,14 @@ class CreateNewIdentityInteractor {
|
||||
|
||||
CreateNewIdentityInteractor(this._identityRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId, CreateNewIdentityRequest identityRequest) async* {
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
CreateNewIdentityRequest identityRequest
|
||||
) async* {
|
||||
try {
|
||||
yield Right(CreateNewIdentityLoading());
|
||||
final newIdentity = await _identityRepository.createNewIdentity(accountId, identityRequest);
|
||||
final newIdentity = await _identityRepository.createNewIdentity(session, accountId, identityRequest);
|
||||
yield Right(CreateNewIdentitySuccess(newIdentity));
|
||||
} catch (exception) {
|
||||
yield Left(CreateNewIdentityFailure(exception));
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import 'dart:core';
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/repository/identity_repository.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/delete_identity_state.dart';
|
||||
@@ -12,10 +14,14 @@ class DeleteIdentityInteractor {
|
||||
|
||||
DeleteIdentityInteractor(this._identityRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId, IdentityId identityId) async* {
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
IdentityId identityId
|
||||
) async* {
|
||||
try {
|
||||
yield Right(DeleteIdentityLoading());
|
||||
final result = await _identityRepository.deleteIdentity(accountId, identityId);
|
||||
final result = await _identityRepository.deleteIdentity(session, accountId, identityId);
|
||||
yield result ? Right(DeleteIdentitySuccess()) : Left(DeleteIdentityFailure(null));
|
||||
} catch (exception) {
|
||||
yield Left(DeleteIdentityFailure(exception));
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'package:core/core.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/edit_default_identity_request.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/edit_identity_request.dart';
|
||||
@@ -21,13 +22,14 @@ class EditDefaultIdentityInteractor {
|
||||
);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
AccountId accountId,
|
||||
EditIdentityRequest editIdentityRequest
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
EditIdentityRequest editIdentityRequest
|
||||
) async* {
|
||||
try {
|
||||
yield Right(EditDefaultIdentityLoading());
|
||||
|
||||
final defaultIdentities = await _getDefaultIdentities(accountId);
|
||||
final defaultIdentities = await _getDefaultIdentities(session, accountId);
|
||||
_removeEditIdentityFromDefaultIdentities(defaultIdentities, editIdentityRequest.identityId);
|
||||
|
||||
final editDefaultRequest = EditDefaultIdentityRequest(
|
||||
@@ -38,19 +40,20 @@ class EditDefaultIdentityInteractor {
|
||||
?.map((identity) => identity.id!)
|
||||
.toList());
|
||||
|
||||
final result = await _identityRepository.editIdentity(accountId, editDefaultRequest);
|
||||
final result = await _identityRepository.editIdentity(session, accountId, editDefaultRequest);
|
||||
yield result ? Right(EditDefaultIdentitySuccess()) : Left(EditDefaultIdentityFailure(null));
|
||||
} catch (exception) {
|
||||
yield Left(EditDefaultIdentityFailure(exception));
|
||||
}
|
||||
}
|
||||
|
||||
Future<List<Identity>?> _getDefaultIdentities(AccountId accountId) async {
|
||||
Future<List<Identity>?> _getDefaultIdentities(Session session, AccountId accountId) async {
|
||||
final listIdentities = await _identityRepository
|
||||
.getAllIdentities(
|
||||
accountId,
|
||||
properties: Properties({'sortOrder'})
|
||||
);
|
||||
.getAllIdentities(
|
||||
session,
|
||||
accountId,
|
||||
properties: Properties({'sortOrder'})
|
||||
);
|
||||
return _identityUtils
|
||||
.getSmallestOrderedIdentity(listIdentities.identities)
|
||||
?.toList();
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import 'dart:core';
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/edit_identity_request.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/repository/identity_repository.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/edit_identity_state.dart';
|
||||
@@ -13,12 +15,13 @@ class EditIdentityInteractor {
|
||||
EditIdentityInteractor(this._identityRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
AccountId accountId,
|
||||
EditIdentityRequest editIdentityRequest
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
EditIdentityRequest editIdentityRequest
|
||||
) async* {
|
||||
try {
|
||||
yield Right(EditIdentityLoading());
|
||||
final result = await _identityRepository.editIdentity(accountId, editIdentityRequest);
|
||||
final result = await _identityRepository.editIdentity(session, accountId, editIdentityRequest);
|
||||
yield result ? Right(EditIdentitySuccess()) : Left(EditIdentityFailure(null));
|
||||
} catch (exception) {
|
||||
yield Left(EditIdentityFailure(exception));
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
import 'dart:core';
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/repository/identity_repository.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_identities_state.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/utils/identity_utils.dart';
|
||||
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
||||
|
||||
class GetAllIdentitiesInteractor {
|
||||
final IdentityRepository _identityRepository;
|
||||
@@ -14,11 +18,12 @@ class GetAllIdentitiesInteractor {
|
||||
|
||||
GetAllIdentitiesInteractor(this._identityRepository, this._identityUtils);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId, {Properties? properties}) async* {
|
||||
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, {Properties? properties}) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(GetAllIdentitiesLoading());
|
||||
final identitiesResponse = await _identityRepository.getAllIdentities(accountId, properties: properties);
|
||||
if (identitiesResponse.identities != null) {
|
||||
final identitiesResponse = await _identityRepository.getAllIdentities(session, accountId, properties: properties);
|
||||
final sortOrderIsSupported = [CapabilityIdentifier.jamesSortOrder].isSupported(session, accountId);
|
||||
if (sortOrderIsSupported && identitiesResponse.identities != null) {
|
||||
_identityUtils.sortListIdentities(identitiesResponse.identities!);
|
||||
}
|
||||
yield Right(GetAllIdentitiesSuccess(identitiesResponse.identities, identitiesResponse.state));
|
||||
|
||||
+28
-20
@@ -9,6 +9,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||
import 'package:tmail_ui_user/features/identity_creator/presentation/model/identity_creator_arguments.dart';
|
||||
@@ -100,7 +101,10 @@ class IdentitiesController extends BaseController {
|
||||
void _initWorker() {
|
||||
accountIdWorker = ever(_accountDashBoardController.accountId, (accountId) {
|
||||
if (accountId is AccountId) {
|
||||
_getAllIdentities(accountId);
|
||||
final session = _accountDashBoardController.sessionCurrent.value;
|
||||
if (session != null) {
|
||||
_getAllIdentities(session, accountId);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -113,8 +117,8 @@ class IdentitiesController extends BaseController {
|
||||
accountIdWorker.call();
|
||||
}
|
||||
|
||||
void _getAllIdentities(AccountId accountId) {
|
||||
consumeState(_getAllIdentitiesInteractor.execute(accountId));
|
||||
void _getAllIdentities(Session session, AccountId accountId) {
|
||||
consumeState(_getAllIdentitiesInteractor.execute(session, accountId));
|
||||
}
|
||||
|
||||
void _refreshAllIdentities() {
|
||||
@@ -122,8 +126,9 @@ class IdentitiesController extends BaseController {
|
||||
listAllIdentities.clear();
|
||||
|
||||
final accountId = _accountDashBoardController.accountId.value;
|
||||
if (accountId != null) {
|
||||
_getAllIdentities(accountId);
|
||||
final session = _accountDashBoardController.sessionCurrent.value;
|
||||
if (accountId != null && session != null) {
|
||||
_getAllIdentities(session, accountId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -157,9 +162,9 @@ class IdentitiesController extends BaseController {
|
||||
arguments: arguments,
|
||||
onCreatedIdentity: (arguments) {
|
||||
if (arguments is CreateNewIdentityRequest) {
|
||||
_createNewIdentityAction(accountId, arguments);
|
||||
_createNewIdentityAction(session, accountId, arguments);
|
||||
} else if (arguments is EditIdentityRequest) {
|
||||
_editIdentityAction(accountId, arguments);
|
||||
_editIdentityAction(session, accountId, arguments);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
@@ -168,22 +173,23 @@ class IdentitiesController extends BaseController {
|
||||
arguments: arguments);
|
||||
|
||||
if (newIdentityArguments is CreateNewIdentityRequest) {
|
||||
_createNewIdentityAction(accountId, newIdentityArguments);
|
||||
_createNewIdentityAction(session, accountId, newIdentityArguments);
|
||||
} else if (newIdentityArguments is EditIdentityRequest) {
|
||||
_editIdentityAction(accountId, newIdentityArguments);
|
||||
_editIdentityAction(session, accountId, newIdentityArguments);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void _createNewIdentityAction(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
CreateNewIdentityRequest identityRequest
|
||||
) async {
|
||||
if (identityRequest.isDefaultIdentity) {
|
||||
consumeState(_createNewDefaultIdentityInteractor.execute(accountId, identityRequest));
|
||||
consumeState(_createNewDefaultIdentityInteractor.execute(session, accountId, identityRequest));
|
||||
} else {
|
||||
consumeState(_createNewIdentityInteractor.execute(accountId, identityRequest));
|
||||
consumeState(_createNewIdentityInteractor.execute(session, accountId, identityRequest));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -221,9 +227,10 @@ class IdentitiesController extends BaseController {
|
||||
void _deleteIdentityAction(Identity identity) {
|
||||
popBack();
|
||||
|
||||
final session = _accountDashBoardController.sessionCurrent.value;
|
||||
final accountId = _accountDashBoardController.accountId.value;
|
||||
if (accountId != null && identity.id != null) {
|
||||
consumeState(_deleteIdentityInteractor.execute(accountId, identity.id!));
|
||||
if (accountId != null && session != null && identity.id != null) {
|
||||
consumeState(_deleteIdentityInteractor.execute(session, accountId, identity.id!));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -280,9 +287,9 @@ class IdentitiesController extends BaseController {
|
||||
arguments: arguments,
|
||||
onCreatedIdentity: (arguments) {
|
||||
if (arguments is CreateNewIdentityRequest) {
|
||||
_createNewIdentityAction(accountId, arguments);
|
||||
_createNewIdentityAction(session, accountId, arguments);
|
||||
} else if (arguments is EditIdentityRequest) {
|
||||
_editIdentityAction(accountId, arguments);
|
||||
_editIdentityAction(session, accountId, arguments);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
@@ -291,22 +298,23 @@ class IdentitiesController extends BaseController {
|
||||
arguments: arguments);
|
||||
|
||||
if (newIdentityArguments is CreateNewIdentityRequest) {
|
||||
_createNewIdentityAction(accountId, newIdentityArguments);
|
||||
_createNewIdentityAction(session, accountId, newIdentityArguments);
|
||||
} else if (newIdentityArguments is EditIdentityRequest) {
|
||||
_editIdentityAction(accountId, newIdentityArguments);
|
||||
_editIdentityAction(session, accountId, newIdentityArguments);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void _editIdentityAction(
|
||||
AccountId accountId,
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
EditIdentityRequest editIdentityRequest
|
||||
) async {
|
||||
if (editIdentityRequest.isDefaultIdentity) {
|
||||
consumeState(_editDefaultIdentityInteractor.execute(accountId, editIdentityRequest));
|
||||
consumeState(_editDefaultIdentityInteractor.execute(session, accountId, editIdentityRequest));
|
||||
} else {
|
||||
consumeState(_editIdentityInteractor.execute(accountId, editIdentityRequest));
|
||||
consumeState(_editIdentityInteractor.execute(session, accountId, editIdentityRequest));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/patch_object.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
||||
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||
import 'package:model/identity/identity_request_dto.dart';
|
||||
|
||||
extension ListIdentityIdExtension on List<IdentityId> {
|
||||
|
||||
Map<Id, PatchObject> generateMapUpdateObjectSortOrder({UnsignedInt? sortOrder}) {
|
||||
final Map<Id, PatchObject> maps = {};
|
||||
forEach((identityId) {
|
||||
maps[identityId.id] = PatchObject(IdentityRequestDto(sortOrder: sortOrder).toJson());
|
||||
});
|
||||
return maps;
|
||||
}
|
||||
}
|
||||
@@ -54,6 +54,7 @@ export 'extensions/email_filter_condition_extension.dart';
|
||||
export 'extensions/list_email_header_extension.dart';
|
||||
export 'extensions/account_extension.dart';
|
||||
export 'extensions/list_presentation_mailbox_extension.dart';
|
||||
export 'extensions/list_identity_id_extension.dart';
|
||||
// Identity
|
||||
export 'identity/identity_request_dto.dart';
|
||||
export 'mailbox/expand_mode.dart';
|
||||
|
||||
Reference in New Issue
Block a user