TF-1645 Fix can not parse mail capability
(cherry picked from commit fcbe822f76f73cd237dd27069b5f77a1f6b02ff3)
This commit is contained in:
@@ -377,7 +377,7 @@ class EmailAPI with HandleSetErrorMixin {
|
|||||||
|
|
||||||
final coreCapability = moveRequest.session.getCapabilityProperties<CoreCapability>(
|
final coreCapability = moveRequest.session.getCapabilityProperties<CoreCapability>(
|
||||||
accountId, CapabilityIdentifier.jmapCore);
|
accountId, CapabilityIdentifier.jmapCore);
|
||||||
final maxMethodCount = coreCapability.maxCallsInRequest.value.toInt();
|
final maxMethodCount = coreCapability.maxCallsInRequest?.value.toInt() ?? 0;
|
||||||
|
|
||||||
var start = 0;
|
var start = 0;
|
||||||
var end = 0;
|
var end = 0;
|
||||||
|
|||||||
@@ -185,7 +185,7 @@ class MailboxAPI with HandleSetErrorMixin {
|
|||||||
|
|
||||||
final coreCapability = session.getCapabilityProperties<CoreCapability>(
|
final coreCapability = session.getCapabilityProperties<CoreCapability>(
|
||||||
accountId, CapabilityIdentifier.jmapCore);
|
accountId, CapabilityIdentifier.jmapCore);
|
||||||
final maxMethodCount = coreCapability.maxCallsInRequest.value.toInt();
|
final maxMethodCount = coreCapability.maxCallsInRequest?.value.toInt() ?? 0;
|
||||||
|
|
||||||
final Map<Id,SetError> finalDeletedMailboxErrors = {};
|
final Map<Id,SetError> finalDeletedMailboxErrors = {};
|
||||||
var start = 0;
|
var start = 0;
|
||||||
|
|||||||
@@ -64,9 +64,14 @@ class QuotasController extends BaseController {
|
|||||||
void _handleGetQuotasSuccess(GetQuotasSuccess success) {
|
void _handleGetQuotasSuccess(GetQuotasSuccess success) {
|
||||||
try {
|
try {
|
||||||
final quotas = success.quotas.firstWhere((e) => e.resourceType == ResourceType.octets);
|
final quotas = success.quotas.firstWhere((e) => e.resourceType == ResourceType.octets);
|
||||||
usedCapacity.value = DoubleConvert.bytesToGigaBytes(quotas.used.value);
|
if (quotas.used != null) {
|
||||||
warningLimitCapacity.value = DoubleConvert.bytesToGigaBytes(quotas.limit.value * warningProgressConstant);
|
usedCapacity.value = DoubleConvert.bytesToGigaBytes(quotas.used!.value);
|
||||||
limitCapacity.value = DoubleConvert.bytesToGigaBytes(quotas.limit.value);
|
}
|
||||||
|
if (quotas.limit != null) {
|
||||||
|
warningLimitCapacity.value = DoubleConvert.bytesToGigaBytes(quotas.limit!.value * warningProgressConstant);
|
||||||
|
limitCapacity.value = DoubleConvert.bytesToGigaBytes(quotas.limit!.value);
|
||||||
|
}
|
||||||
|
|
||||||
if(usedCapacity.value >= limitCapacity.value) {
|
if(usedCapacity.value >= limitCapacity.value) {
|
||||||
quotasState.value = QuotasState.runOutOfStorage;
|
quotasState.value = QuotasState.runOutOfStorage;
|
||||||
} else if (usedCapacity.value >= warningLimitCapacity.value) {
|
} else if (usedCapacity.value >= warningLimitCapacity.value) {
|
||||||
|
|||||||
@@ -24,17 +24,20 @@ void main() {
|
|||||||
test('when session missing one capability exception should throw', () {
|
test('when session missing one capability exception should throw', () {
|
||||||
final session = Session(
|
final session = Session(
|
||||||
{
|
{
|
||||||
CapabilityIdentifier.jmapSubmission:
|
CapabilityIdentifier.jmapSubmission: SubmissionCapability(
|
||||||
SubmissionCapability(UnsignedInt(0), {}),
|
maxDelayedSend: UnsignedInt(0),
|
||||||
|
submissionExtensions: {}
|
||||||
|
),
|
||||||
CapabilityIdentifier.jmapMail: MailCapability(
|
CapabilityIdentifier.jmapMail: MailCapability(
|
||||||
UnsignedInt(10000000),
|
maxMailboxesPerEmail: UnsignedInt(10000000),
|
||||||
null,
|
maxSizeAttachmentsPerEmail: UnsignedInt(20000000),
|
||||||
UnsignedInt(200),
|
emailQuerySortOptions: {"receivedAt", "sentAt", "size", "from", "to", "subject"},
|
||||||
UnsignedInt(20000000),
|
mayCreateTopLevelMailbox: true
|
||||||
{"receivedAt", "sentAt", "size", "from", "to", "subject"},
|
),
|
||||||
true),
|
CapabilityIdentifier.jmapWebSocket: WebSocketCapability(
|
||||||
CapabilityIdentifier.jmapWebSocket:
|
supportsPush: true,
|
||||||
WebSocketCapability(true, Uri.parse('ws://domain.com/jmap/ws')),
|
url: Uri.parse('ws://domain.com/jmap/ws')
|
||||||
|
),
|
||||||
CapabilityIdentifier(
|
CapabilityIdentifier(
|
||||||
Uri.parse('urn:apache:james:params:jmap:mail:quota')):
|
Uri.parse('urn:apache:james:params:jmap:mail:quota')):
|
||||||
DefaultCapability(<String, dynamic>{}),
|
DefaultCapability(<String, dynamic>{}),
|
||||||
@@ -45,20 +48,21 @@ void main() {
|
|||||||
CapabilityIdentifier.jmapMdn: MdnCapability()
|
CapabilityIdentifier.jmapMdn: MdnCapability()
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
AccountId(Id(
|
AccountId(Id('29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6')): Account(AccountName('bob@domain.tld'), true, false, {
|
||||||
'29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6')):
|
CapabilityIdentifier.jmapSubmission: SubmissionCapability(
|
||||||
Account(AccountName('bob@domain.tld'), true, false, {
|
maxDelayedSend: UnsignedInt(0),
|
||||||
CapabilityIdentifier.jmapSubmission:
|
submissionExtensions: {}
|
||||||
SubmissionCapability(UnsignedInt(0), {}),
|
),
|
||||||
CapabilityIdentifier.jmapWebSocket: WebSocketCapability(
|
CapabilityIdentifier.jmapWebSocket: WebSocketCapability(
|
||||||
true, Uri.parse('ws://domain.com/jmap/ws')),
|
supportsPush: true,
|
||||||
|
url: Uri.parse('ws://domain.com/jmap/ws')
|
||||||
|
),
|
||||||
CapabilityIdentifier.jmapMail: MailCapability(
|
CapabilityIdentifier.jmapMail: MailCapability(
|
||||||
UnsignedInt(10000000),
|
maxMailboxesPerEmail: UnsignedInt(10000000),
|
||||||
null,
|
maxSizeAttachmentsPerEmail: UnsignedInt(20000000),
|
||||||
UnsignedInt(200),
|
emailQuerySortOptions: {"receivedAt", "sentAt", "size", "from", "to", "subject"},
|
||||||
UnsignedInt(20000000),
|
mayCreateTopLevelMailbox: true
|
||||||
{"receivedAt", "sentAt", "size", "from", "to", "subject"},
|
),
|
||||||
true),
|
|
||||||
CapabilityIdentifier(
|
CapabilityIdentifier(
|
||||||
Uri.parse('urn:apache:james:params:jmap:mail:quota')):
|
Uri.parse('urn:apache:james:params:jmap:mail:quota')):
|
||||||
DefaultCapability(<String, dynamic>{}),
|
DefaultCapability(<String, dynamic>{}),
|
||||||
@@ -110,17 +114,20 @@ void main() {
|
|||||||
test('when account capabilities is empty exception should throw', () {
|
test('when account capabilities is empty exception should throw', () {
|
||||||
final session = Session(
|
final session = Session(
|
||||||
{
|
{
|
||||||
CapabilityIdentifier.jmapSubmission:
|
CapabilityIdentifier.jmapSubmission: SubmissionCapability(
|
||||||
SubmissionCapability(UnsignedInt(0), {}),
|
maxDelayedSend: UnsignedInt(0),
|
||||||
|
submissionExtensions: {}
|
||||||
|
),
|
||||||
CapabilityIdentifier.jmapMail: MailCapability(
|
CapabilityIdentifier.jmapMail: MailCapability(
|
||||||
UnsignedInt(10000000),
|
maxMailboxesPerEmail: UnsignedInt(10000000),
|
||||||
null,
|
maxSizeAttachmentsPerEmail: UnsignedInt(20000000),
|
||||||
UnsignedInt(200),
|
emailQuerySortOptions: {"receivedAt", "sentAt", "size", "from", "to", "subject"},
|
||||||
UnsignedInt(20000000),
|
mayCreateTopLevelMailbox: true
|
||||||
{"receivedAt", "sentAt", "size", "from", "to", "subject"},
|
),
|
||||||
true),
|
CapabilityIdentifier.jmapWebSocket: WebSocketCapability(
|
||||||
CapabilityIdentifier.jmapWebSocket:
|
supportsPush: true,
|
||||||
WebSocketCapability(true, Uri.parse('ws://domain.com/jmap/ws')),
|
url: Uri.parse('ws://domain.com/jmap/ws')
|
||||||
|
),
|
||||||
CapabilityIdentifier(
|
CapabilityIdentifier(
|
||||||
Uri.parse('urn:apache:james:params:jmap:mail:quota')):
|
Uri.parse('urn:apache:james:params:jmap:mail:quota')):
|
||||||
DefaultCapability(<String, dynamic>{}),
|
DefaultCapability(<String, dynamic>{}),
|
||||||
@@ -177,17 +184,20 @@ void main() {
|
|||||||
final invalidId = Id("29883977c13473ae7cb7678ef767cbffabfc8a44a6e463d971d23a65c1dc4af6");
|
final invalidId = Id("29883977c13473ae7cb7678ef767cbffabfc8a44a6e463d971d23a65c1dc4af6");
|
||||||
final session = Session(
|
final session = Session(
|
||||||
{
|
{
|
||||||
CapabilityIdentifier.jmapSubmission:
|
CapabilityIdentifier.jmapSubmission: SubmissionCapability(
|
||||||
SubmissionCapability(UnsignedInt(0), {}),
|
maxDelayedSend: UnsignedInt(0),
|
||||||
|
submissionExtensions: {}
|
||||||
|
),
|
||||||
CapabilityIdentifier.jmapMail: MailCapability(
|
CapabilityIdentifier.jmapMail: MailCapability(
|
||||||
UnsignedInt(10000000),
|
maxMailboxesPerEmail: UnsignedInt(10000000),
|
||||||
null,
|
maxSizeAttachmentsPerEmail: UnsignedInt(20000000),
|
||||||
UnsignedInt(200),
|
emailQuerySortOptions: {"receivedAt", "sentAt", "size", "from", "to", "subject"},
|
||||||
UnsignedInt(20000000),
|
mayCreateTopLevelMailbox: true
|
||||||
{"receivedAt", "sentAt", "size", "from", "to", "subject"},
|
),
|
||||||
true),
|
CapabilityIdentifier.jmapWebSocket: WebSocketCapability(
|
||||||
CapabilityIdentifier.jmapWebSocket:
|
supportsPush: true,
|
||||||
WebSocketCapability(true, Uri.parse('ws://domain.com/jmap/ws')),
|
url: Uri.parse('ws://domain.com/jmap/ws')
|
||||||
|
),
|
||||||
CapabilityIdentifier(
|
CapabilityIdentifier(
|
||||||
Uri.parse('urn:apache:james:params:jmap:mail:quota')):
|
Uri.parse('urn:apache:james:params:jmap:mail:quota')):
|
||||||
DefaultCapability(<String, dynamic>{}),
|
DefaultCapability(<String, dynamic>{}),
|
||||||
@@ -201,17 +211,20 @@ void main() {
|
|||||||
AccountId(Id(
|
AccountId(Id(
|
||||||
'29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6')):
|
'29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6')):
|
||||||
Account(AccountName('bob@domain.tld'), true, false, {
|
Account(AccountName('bob@domain.tld'), true, false, {
|
||||||
CapabilityIdentifier.jmapSubmission:
|
CapabilityIdentifier.jmapSubmission: SubmissionCapability(
|
||||||
SubmissionCapability(UnsignedInt(0), {}),
|
maxDelayedSend: UnsignedInt(0),
|
||||||
|
submissionExtensions: {}
|
||||||
|
),
|
||||||
CapabilityIdentifier.jmapWebSocket: WebSocketCapability(
|
CapabilityIdentifier.jmapWebSocket: WebSocketCapability(
|
||||||
true, Uri.parse('ws://domain.com/jmap/ws')),
|
supportsPush: true,
|
||||||
|
url: Uri.parse('ws://domain.com/jmap/ws')
|
||||||
|
),
|
||||||
CapabilityIdentifier.jmapMail: MailCapability(
|
CapabilityIdentifier.jmapMail: MailCapability(
|
||||||
UnsignedInt(10000000),
|
maxMailboxesPerEmail: UnsignedInt(10000000),
|
||||||
null,
|
maxSizeAttachmentsPerEmail: UnsignedInt(20000000),
|
||||||
UnsignedInt(200),
|
emailQuerySortOptions: {"receivedAt", "sentAt", "size", "from", "to", "subject"},
|
||||||
UnsignedInt(20000000),
|
mayCreateTopLevelMailbox: true
|
||||||
{"receivedAt", "sentAt", "size", "from", "to", "subject"},
|
),
|
||||||
true),
|
|
||||||
CapabilityIdentifier(
|
CapabilityIdentifier(
|
||||||
Uri.parse('urn:apache:james:params:jmap:mail:quota')):
|
Uri.parse('urn:apache:james:params:jmap:mail:quota')):
|
||||||
DefaultCapability(<String, dynamic>{}),
|
DefaultCapability(<String, dynamic>{}),
|
||||||
@@ -263,17 +276,20 @@ void main() {
|
|||||||
test('when accounts empty should throw exception', () {
|
test('when accounts empty should throw exception', () {
|
||||||
final session = Session(
|
final session = Session(
|
||||||
{
|
{
|
||||||
CapabilityIdentifier.jmapSubmission:
|
CapabilityIdentifier.jmapSubmission: SubmissionCapability(
|
||||||
SubmissionCapability(UnsignedInt(0), {}),
|
maxDelayedSend: UnsignedInt(0),
|
||||||
|
submissionExtensions: {}
|
||||||
|
),
|
||||||
CapabilityIdentifier.jmapMail: MailCapability(
|
CapabilityIdentifier.jmapMail: MailCapability(
|
||||||
UnsignedInt(10000000),
|
maxMailboxesPerEmail: UnsignedInt(10000000),
|
||||||
null,
|
maxSizeAttachmentsPerEmail: UnsignedInt(20000000),
|
||||||
UnsignedInt(200),
|
emailQuerySortOptions: {"receivedAt", "sentAt", "size", "from", "to", "subject"},
|
||||||
UnsignedInt(20000000),
|
mayCreateTopLevelMailbox: true
|
||||||
{"receivedAt", "sentAt", "size", "from", "to", "subject"},
|
),
|
||||||
true),
|
CapabilityIdentifier.jmapWebSocket: WebSocketCapability(
|
||||||
CapabilityIdentifier.jmapWebSocket:
|
supportsPush: true,
|
||||||
WebSocketCapability(true, Uri.parse('ws://domain.com/jmap/ws')),
|
url: Uri.parse('ws://domain.com/jmap/ws')
|
||||||
|
),
|
||||||
CapabilityIdentifier(
|
CapabilityIdentifier(
|
||||||
Uri.parse('urn:apache:james:params:jmap:mail:quota')):
|
Uri.parse('urn:apache:james:params:jmap:mail:quota')):
|
||||||
DefaultCapability(<String, dynamic>{}),
|
DefaultCapability(<String, dynamic>{}),
|
||||||
@@ -325,27 +341,30 @@ void main() {
|
|||||||
test('when session have all required capabilities exception should not throw', () {
|
test('when session have all required capabilities exception should not throw', () {
|
||||||
final session = Session(
|
final session = Session(
|
||||||
{
|
{
|
||||||
CapabilityIdentifier.jmapSubmission:
|
CapabilityIdentifier.jmapSubmission: SubmissionCapability(
|
||||||
SubmissionCapability(UnsignedInt(0), {}),
|
maxDelayedSend: UnsignedInt(0),
|
||||||
|
submissionExtensions: {}
|
||||||
|
),
|
||||||
CapabilityIdentifier.jmapCore: CoreCapability(
|
CapabilityIdentifier.jmapCore: CoreCapability(
|
||||||
UnsignedInt(20971520),
|
maxSizeUpload: UnsignedInt(20971520),
|
||||||
UnsignedInt(4),
|
maxConcurrentUpload: UnsignedInt(4),
|
||||||
UnsignedInt(10000000),
|
maxSizeRequest: UnsignedInt(10000000),
|
||||||
UnsignedInt(4),
|
maxConcurrentRequests: UnsignedInt(4),
|
||||||
UnsignedInt(16),
|
maxCallsInRequest: UnsignedInt(16),
|
||||||
UnsignedInt(500),
|
maxObjectsInGet: UnsignedInt(500),
|
||||||
UnsignedInt(500),
|
maxObjectsInSet: UnsignedInt(500),
|
||||||
{CollationIdentifier("i;unicode-casemap")}
|
collationAlgorithms: {CollationIdentifier("i;unicode-casemap")}
|
||||||
),
|
),
|
||||||
CapabilityIdentifier.jmapMail: MailCapability(
|
CapabilityIdentifier.jmapMail: MailCapability(
|
||||||
UnsignedInt(10000000),
|
maxMailboxesPerEmail: UnsignedInt(10000000),
|
||||||
null,
|
maxSizeAttachmentsPerEmail: UnsignedInt(20000000),
|
||||||
UnsignedInt(200),
|
emailQuerySortOptions: {"receivedAt", "sentAt", "size", "from", "to", "subject"},
|
||||||
UnsignedInt(20000000),
|
mayCreateTopLevelMailbox: true
|
||||||
{"receivedAt", "sentAt", "size", "from", "to", "subject"},
|
),
|
||||||
true),
|
CapabilityIdentifier.jmapWebSocket: WebSocketCapability(
|
||||||
CapabilityIdentifier.jmapWebSocket:
|
supportsPush: true,
|
||||||
WebSocketCapability(true, Uri.parse('ws://domain.com/jmap/ws')),
|
url: Uri.parse('ws://domain.com/jmap/ws')
|
||||||
|
),
|
||||||
CapabilityIdentifier(
|
CapabilityIdentifier(
|
||||||
Uri.parse('urn:apache:james:params:jmap:mail:quota')):
|
Uri.parse('urn:apache:james:params:jmap:mail:quota')):
|
||||||
DefaultCapability(<String, dynamic>{}),
|
DefaultCapability(<String, dynamic>{}),
|
||||||
@@ -359,26 +378,26 @@ void main() {
|
|||||||
AccountId(Id(
|
AccountId(Id(
|
||||||
'29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6')):
|
'29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6')):
|
||||||
Account(AccountName('bob@domain.tld'), true, false, {
|
Account(AccountName('bob@domain.tld'), true, false, {
|
||||||
CapabilityIdentifier.jmapSubmission:
|
CapabilityIdentifier.jmapSubmission: SubmissionCapability(
|
||||||
SubmissionCapability(UnsignedInt(0), {}),
|
maxDelayedSend: UnsignedInt(0),
|
||||||
CapabilityIdentifier.jmapWebSocket: WebSocketCapability(
|
submissionExtensions: {}
|
||||||
true, Uri.parse('ws://domain.com/jmap/ws')),
|
),
|
||||||
CapabilityIdentifier.jmapCore: CoreCapability(
|
CapabilityIdentifier.jmapCore: CoreCapability(
|
||||||
UnsignedInt(20971520),
|
maxSizeUpload: UnsignedInt(20971520),
|
||||||
UnsignedInt(4),
|
maxConcurrentUpload: UnsignedInt(4),
|
||||||
UnsignedInt(10000000),
|
maxSizeRequest: UnsignedInt(10000000),
|
||||||
UnsignedInt(4),
|
maxConcurrentRequests: UnsignedInt(4),
|
||||||
UnsignedInt(16),
|
maxCallsInRequest: UnsignedInt(16),
|
||||||
UnsignedInt(500),
|
maxObjectsInGet: UnsignedInt(500),
|
||||||
UnsignedInt(500),
|
maxObjectsInSet: UnsignedInt(500),
|
||||||
{CollationIdentifier("i;unicode-casemap")}),
|
collationAlgorithms: {CollationIdentifier("i;unicode-casemap")}
|
||||||
|
),
|
||||||
CapabilityIdentifier.jmapMail: MailCapability(
|
CapabilityIdentifier.jmapMail: MailCapability(
|
||||||
UnsignedInt(10000000),
|
maxMailboxesPerEmail: UnsignedInt(10000000),
|
||||||
null,
|
maxSizeAttachmentsPerEmail: UnsignedInt(20000000),
|
||||||
UnsignedInt(200),
|
emailQuerySortOptions: {"receivedAt", "sentAt", "size", "from", "to", "subject"},
|
||||||
UnsignedInt(20000000),
|
mayCreateTopLevelMailbox: true
|
||||||
{"receivedAt", "sentAt", "size", "from", "to", "subject"},
|
),
|
||||||
true),
|
|
||||||
CapabilityIdentifier(
|
CapabilityIdentifier(
|
||||||
Uri.parse('urn:apache:james:params:jmap:mail:quota')):
|
Uri.parse('urn:apache:james:params:jmap:mail:quota')):
|
||||||
DefaultCapability(<String, dynamic>{}),
|
DefaultCapability(<String, dynamic>{}),
|
||||||
|
|||||||
Reference in New Issue
Block a user