Skip to content

Commit a34ab5f

Browse files
committed
TF-1362: Query mailbox spam report
1 parent b848fdd commit a34ab5f

File tree

7 files changed

+398
-1
lines changed

7 files changed

+398
-1
lines changed

lib/jmap/mail/email/email_filter_condition.g.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import 'package:jmap_dart_client/http/converter/mailbox_id_converter.dart';
2+
import 'package:jmap_dart_client/http/converter/mailbox_id_nullable_converter.dart';
3+
import 'package:jmap_dart_client/http/converter/mailbox_name_converter.dart';
4+
import 'package:jmap_dart_client/http/converter/role_converter.dart';
5+
import 'package:jmap_dart_client/jmap/core/filter/filter_condition.dart';
6+
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
7+
import 'package:json_annotation/json_annotation.dart';
8+
9+
part 'mailbox_filter_condition.g.dart';
10+
11+
@RoleConverter()
12+
@MailboxNameConverter()
13+
@JsonSerializable()
14+
@MailboxIdNullableConverter()
15+
@MailboxIdConverter()
16+
class MailboxFilterCondition extends FilterCondition {
17+
18+
@JsonKey(includeIfNull: false)
19+
final Role? role;
20+
@JsonKey(includeIfNull: false)
21+
final MailboxName? name;
22+
@JsonKey(includeIfNull: false)
23+
final bool? hasAnyRole;
24+
@JsonKey(includeIfNull: false)
25+
final bool? isSubscribed;
26+
@JsonKey(includeIfNull: false)
27+
final MailboxId? parentId;
28+
29+
MailboxFilterCondition({
30+
this.role,
31+
this.parentId,
32+
this.name,
33+
this.hasAnyRole,
34+
this.isSubscribed,
35+
});
36+
37+
@override
38+
List<Object?> get props => [
39+
role,
40+
parentId,
41+
name,
42+
hasAnyRole,
43+
parentId
44+
];
45+
46+
factory MailboxFilterCondition.fromJson(Map<String, dynamic> json) =>
47+
_$MailboxFilterConditionFromJson(json);
48+
49+
@override
50+
Map<String, dynamic> toJson() => _$MailboxFilterConditionToJson(this);
51+
}

lib/jmap/mail/mailbox/mailbox_filter_condition.g.dart

Lines changed: 37 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
2+
import 'package:jmap_dart_client/http/converter/account_id_converter.dart';
3+
import 'package:jmap_dart_client/http/converter/unsigned_int_nullable_converter.dart';
4+
import 'package:jmap_dart_client/jmap/account_id.dart';
5+
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
6+
import 'package:jmap_dart_client/jmap/core/method/request/query_method.dart';
7+
import 'package:jmap_dart_client/jmap/core/request/request_invocation.dart';
8+
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_filter_condition.dart';
9+
import 'package:json_annotation/json_annotation.dart';
10+
11+
class QueryMailboxMethod extends QueryMethod with FilterAsTree, SortAsTree {
12+
13+
QueryMailboxMethod(AccountId accountId) : super(accountId);
14+
15+
@override
16+
MethodName get methodName => MethodName('Mailbox/query');
17+
18+
@override
19+
Set<CapabilityIdentifier> get requiredCapabilities => {
20+
CapabilityIdentifier.jmapCore,
21+
CapabilityIdentifier.jmapMail
22+
};
23+
24+
@override
25+
List<Object?> get props => [methodName, accountId, filter, limit];
26+
27+
factory QueryMailboxMethod.fromJson(Map<String, dynamic> json) {
28+
return QueryMailboxMethod(
29+
const AccountIdConverter().fromJson(json['accountId'] as String)
30+
)
31+
..sortAsTree = json['sortAsTree'] as bool?
32+
..filterAsTree = json['filterAsTree'] as bool?
33+
..filter = json['filter'] == null
34+
? null
35+
: MailboxFilterCondition.fromJson(json['filter'] as Map<String, dynamic>)
36+
..limit = const UnsignedIntNullableConverter().fromJson(json['limit'] as int);
37+
}
38+
39+
@override
40+
Map<String, dynamic> toJson() {
41+
final val = <String, dynamic>{
42+
'accountId': const AccountIdConverter().toJson(accountId),
43+
};
44+
45+
void writeNotNull(String key, dynamic value) {
46+
if (value != null) {
47+
val[key] = value;
48+
}
49+
}
50+
51+
writeNotNull('sortAsTree', sortAsTree);
52+
writeNotNull('filterAsTree', filterAsTree);
53+
writeNotNull('filter', filter?.toJson());
54+
writeNotNull('limit', const UnsignedIntNullableConverter().toJson(limit));
55+
return val;
56+
}
57+
}
58+
mixin FilterAsTree {
59+
@JsonKey(includeIfNull: false)
60+
bool? filterAsTree;
61+
62+
void addFilterAsTree(bool value) {
63+
filterAsTree = value;
64+
}
65+
}
66+
67+
mixin SortAsTree {
68+
@JsonKey(includeIfNull: false)
69+
bool? sortAsTree;
70+
71+
void addSortAsTree(bool value) {
72+
sortAsTree = value;
73+
}
74+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import 'package:jmap_dart_client/http/converter/account_id_converter.dart';
2+
import 'package:jmap_dart_client/http/converter/id_converter.dart';
3+
import 'package:jmap_dart_client/http/converter/state_converter.dart';
4+
import 'package:jmap_dart_client/http/converter/unsigned_int_converter.dart';
5+
import 'package:jmap_dart_client/jmap/account_id.dart';
6+
import 'package:jmap_dart_client/jmap/core/id.dart';
7+
import 'package:jmap_dart_client/jmap/core/method/response/query_response.dart';
8+
import 'package:jmap_dart_client/jmap/core/state.dart';
9+
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
10+
import 'package:json_annotation/json_annotation.dart';
11+
12+
part 'query_mailbox_response.g.dart';
13+
14+
@UnsignedIntConverter()
15+
@IdConverter()
16+
@StateConverter()
17+
@AccountIdConverter()
18+
@JsonSerializable()
19+
class QueryMailboxResponse extends QueryResponse {
20+
21+
QueryMailboxResponse(
22+
AccountId accountId,
23+
State queryState,
24+
bool canCalculateChanges,
25+
UnsignedInt position,
26+
Set<Id> ids,
27+
UnsignedInt total,
28+
UnsignedInt limit,
29+
) : super(accountId, queryState, canCalculateChanges, position, ids, total, limit);
30+
31+
factory QueryMailboxResponse.fromJson(Map<String, dynamic> json) => _$QueryMailboxResponseFromJson(json);
32+
33+
static QueryMailboxResponse deserialize(Map<String, dynamic> json) {
34+
return QueryMailboxResponse.fromJson(json);
35+
}
36+
37+
Map<String, dynamic> toJson() => _$QueryMailboxResponseToJson(this);
38+
39+
@override
40+
List<Object?> get props => [accountId, queryState, canCalculateChanges, position, total, ids];
41+
}

lib/jmap/mail/mailbox/query/query_mailbox_response.g.dart

Lines changed: 33 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)