TF-32 Add data layer of export attachment for ios platform
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:dio/dio.dart';
|
||||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:model/email/read_actions.dart';
|
import 'package:model/email/read_actions.dart';
|
||||||
@@ -17,4 +18,12 @@ abstract class EmailDataSource {
|
|||||||
String baseDownloadUrl,
|
String baseDownloadUrl,
|
||||||
AccountRequest accountRequest
|
AccountRequest accountRequest
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Future<String> exportAttachment(
|
||||||
|
Attachment attachment,
|
||||||
|
AccountId accountId,
|
||||||
|
String baseDownloadUrl,
|
||||||
|
AccountRequest accountRequest,
|
||||||
|
CancelToken cancelToken
|
||||||
|
);
|
||||||
}
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:dio/dio.dart';
|
||||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:model/email/read_actions.dart';
|
import 'package:model/email/read_actions.dart';
|
||||||
@@ -54,4 +55,19 @@ class EmailDataSourceImpl extends EmailDataSource {
|
|||||||
throw error;
|
throw error;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<String> exportAttachment(
|
||||||
|
Attachment attachment,
|
||||||
|
AccountId accountId,
|
||||||
|
String baseDownloadUrl,
|
||||||
|
AccountRequest accountRequest,
|
||||||
|
CancelToken cancelToken
|
||||||
|
) {
|
||||||
|
return Future.sync(() async {
|
||||||
|
return await emailAPI.exportAttachment(attachment, accountId, baseDownloadUrl, accountRequest, cancelToken);
|
||||||
|
}).catchError((error) {
|
||||||
|
throw error;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,7 @@ import 'dart:convert';
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:core/core.dart';
|
import 'package:core/core.dart';
|
||||||
|
import 'package:dio/dio.dart';
|
||||||
import 'package:external_path/external_path.dart';
|
import 'package:external_path/external_path.dart';
|
||||||
import 'package:flutter_downloader/flutter_downloader.dart';
|
import 'package:flutter_downloader/flutter_downloader.dart';
|
||||||
import 'package:jmap_dart_client/http/http_client.dart';
|
import 'package:jmap_dart_client/http/http_client.dart';
|
||||||
@@ -29,14 +30,15 @@ import 'package:model/model.dart';
|
|||||||
|
|
||||||
class EmailAPI {
|
class EmailAPI {
|
||||||
|
|
||||||
final HttpClient httpClient;
|
final HttpClient _httpClient;
|
||||||
|
final DownloadManager _downloadManager;
|
||||||
|
|
||||||
EmailAPI(this.httpClient);
|
EmailAPI(this._httpClient, this._downloadManager);
|
||||||
|
|
||||||
Future<Email> getEmailContent(AccountId accountId, EmailId emailId) async {
|
Future<Email> getEmailContent(AccountId accountId, EmailId emailId) async {
|
||||||
final processingInvocation = ProcessingInvocation();
|
final processingInvocation = ProcessingInvocation();
|
||||||
|
|
||||||
final jmapRequestBuilder = JmapRequestBuilder(httpClient, processingInvocation);
|
final jmapRequestBuilder = JmapRequestBuilder(_httpClient, processingInvocation);
|
||||||
|
|
||||||
final getEmailMethod = GetEmailMethod(accountId)
|
final getEmailMethod = GetEmailMethod(accountId)
|
||||||
..addIds({emailId.id})
|
..addIds({emailId.id})
|
||||||
@@ -84,7 +86,7 @@ class EmailAPI {
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
final requestBuilder = JmapRequestBuilder(httpClient, ProcessingInvocation());
|
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
|
||||||
|
|
||||||
final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
|
final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
|
||||||
final setEmailSubmissionInvocation = requestBuilder.invocation(setEmailSubmissionMethod);
|
final setEmailSubmissionInvocation = requestBuilder.invocation(setEmailSubmissionMethod);
|
||||||
@@ -172,4 +174,21 @@ class EmailAPI {
|
|||||||
.map((taskId) => DownloadTaskId(taskId!))
|
.map((taskId) => DownloadTaskId(taskId!))
|
||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<String> exportAttachment(
|
||||||
|
Attachment attachment,
|
||||||
|
AccountId accountId,
|
||||||
|
String baseDownloadUrl,
|
||||||
|
AccountRequest accountRequest,
|
||||||
|
CancelToken cancelToken
|
||||||
|
) async {
|
||||||
|
final basicAuth = 'Basic ' + base64Encode(utf8.encode('${accountRequest.userName.userName}:${accountRequest.password.value}'));
|
||||||
|
|
||||||
|
return _downloadManager.downloadFile(
|
||||||
|
attachment.getDownloadUrl(baseDownloadUrl, accountId),
|
||||||
|
getTemporaryDirectory(),
|
||||||
|
attachment.name ?? '',
|
||||||
|
basicAuth,
|
||||||
|
cancelToken: cancelToken);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
|
|
||||||
|
import 'package:dio/src/cancel_token.dart';
|
||||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:model/email/read_actions.dart';
|
import 'package:model/email/read_actions.dart';
|
||||||
@@ -39,4 +40,20 @@ class EmailRepositoryImpl extends EmailRepository {
|
|||||||
) {
|
) {
|
||||||
return emailDataSource.downloadAttachments(attachments, accountId, baseDownloadUrl, accountRequest);
|
return emailDataSource.downloadAttachments(attachments, accountId, baseDownloadUrl, accountRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<String> exportAttachment(
|
||||||
|
Attachment attachment,
|
||||||
|
AccountId accountId,
|
||||||
|
String baseDownloadUrl,
|
||||||
|
AccountRequest accountRequest,
|
||||||
|
CancelToken cancelToken
|
||||||
|
) {
|
||||||
|
return emailDataSource.exportAttachment(
|
||||||
|
attachment,
|
||||||
|
accountId,
|
||||||
|
baseDownloadUrl,
|
||||||
|
accountRequest,
|
||||||
|
cancelToken);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user