TF-939 Depend on accountCapabilities to delete multiple mailboxes

This commit is contained in:
Dat PHAM HOANG
2022-09-13 16:41:00 +07:00
committed by Dat H. Pham
parent 3871b18f00
commit 48ae928b4e
6 changed files with 276 additions and 33 deletions
@@ -138,9 +138,10 @@ class MailboxAPI {
}
Future<bool> deleteMultipleMailbox(Session session, AccountId accountId, List<MailboxId> mailboxIds) async {
requireCapability(session, [CapabilityIdentifier.jmapCore, CapabilityIdentifier.jmapMail]);
requireCapability(session, accountId, [CapabilityIdentifier.jmapCore, CapabilityIdentifier.jmapMail]);
final coreCapability = (session.capabilities[CapabilityIdentifier.jmapCore] as CoreCapability);
final coreCapability = session.getCapabilityProperties<CoreCapability>(
accountId, CapabilityIdentifier.jmapCore);
final maxMethodCount = coreCapability.maxCallsInRequest.value.toInt();
var finalResult = true;
@@ -20,9 +20,11 @@ class DeleteMultipleMailboxInteractor {
mailboxIdDeleted,
currentMailboxState: currentMailboxState));
} else {
logError('DeleteMultipleMailboxInteractor::execute(): failed');
yield Left<Failure, Success>(DeleteMultipleMailboxFailure(null));
}
} catch (e) {
logError('DeleteMultipleMailboxInteractor::execute(): exception: $e');
yield Left<Failure, Success>(DeleteMultipleMailboxFailure(e));
}
}
+10 -4
View File
@@ -1,11 +1,17 @@
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/session/session.dart';
import 'package:tmail_ui_user/main/error/request_error.dart';
void requireCapability(Session session, List<CapabilityIdentifier> requiredCapabilities) {
final matchedCapabilities = session.capabilities.keys
void requireCapability(Session session, AccountId accountId, List<CapabilityIdentifier> requiredCapabilities) {
final account = session.accounts[accountId];
if (account == null) {
throw const InvalidCapability();
}
final matchedCapabilities = account.accountCapabilities.keys
.fold<Set<CapabilityIdentifier>>(
Set<CapabilityIdentifier>(),
<CapabilityIdentifier>{},
(previousValue, element) {
if (requiredCapabilities.contains(element)) {
previousValue.add(element);
@@ -14,7 +20,7 @@ void requireCapability(Session session, List<CapabilityIdentifier> requiredCapab
}
);
final missingCapabilities = requiredCapabilities.toSet().difference(matchedCapabilities);
if (missingCapabilities.length > 0) {
if (missingCapabilities.isNotEmpty) {
throw SessionMissingCapability(missingCapabilities);
}
}
+9 -2
View File
@@ -1,11 +1,18 @@
import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
class SessionMissingCapability extends Equatable implements Exception {
class SessionMissingCapability extends InvalidCapability {
final Set<CapabilityIdentifier> capabilityIdentifiers;
SessionMissingCapability(this.capabilityIdentifiers);
const SessionMissingCapability(this.capabilityIdentifiers) : super();
@override
List<Object?> get props => [capabilityIdentifiers];
}
class InvalidCapability extends Equatable implements Exception {
const InvalidCapability();
@override
List<Object?> get props => [];
}