TF-939 Depend on accountCapabilities to delete multiple mailboxes
This commit is contained in:
committed by
Dat H. Pham
parent
3871b18f00
commit
48ae928b4e
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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 => [];
|
||||
}
|
||||
Reference in New Issue
Block a user