TF-32 Add domain layer of download attachment for android platform

This commit is contained in:
dab246
2021-09-16 09:07:11 +07:00
committed by Dat H. Pham
parent 9b43417ac8
commit ddf8a32e66
16 changed files with 214 additions and 13 deletions
+10
View File
@@ -0,0 +1,10 @@
import 'package:equatable/equatable.dart';
class DownloadTaskId with EquatableMixin {
final String taskId;
DownloadTaskId(this.taskId);
@override
List<Object> get props => [taskId];
}
+41
View File
@@ -0,0 +1,41 @@
import 'package:equatable/equatable.dart';
import 'package:http_parser/http_parser.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_body_part.dart';
import 'package:uri/uri.dart';
class Attachment with EquatableMixin {
final PartId? partId;
final Id? blobId;
final UnsignedInt? size;
final String? name;
final MediaType? type;
final String? cid;
Attachment(
this.partId,
this.blobId,
this.size,
this.name,
this.type,
this.cid
);
String getDownloadUrl(String baseDownloadUrl, AccountId accountId) {
final downloadUriTemplate = UriTemplate('$baseDownloadUrl');
final downloadUri = downloadUriTemplate.expand({
'accountId' : '${accountId.id.value}',
'blobId' : '${blobId?.value}',
'name' : '$name',
'type' : '${type?.mimeType}',
});
return Uri.decodeFull(downloadUri);
}
@override
List<Object?> get props => [partId, blobId, size, name, type, cid];
}
+6 -10
View File
@@ -1,16 +1,12 @@
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:uri/uri.dart';
extension SessionExtension on Session {
String getDownloadUrl(String accountId, String blobId, String name, String type) {
final downloadUriTemplate = UriTemplate('${downloadUrl.origin}');
return downloadUriTemplate.expand({
'accountId' : '$accountId',
'blobId' : '$blobId',
'name' : '$name',
'type' : '$type',
});
String getDownloadUrl() {
var baseUrl = '${downloadUrl.origin}${downloadUrl.path}';
if (baseUrl.endsWith('/')) {
baseUrl = baseUrl.substring(0, baseUrl.length - 1);
}
return Uri.decodeFull(baseUrl);
}
}
+4
View File
@@ -23,6 +23,7 @@ export 'email/email_action_type.dart';
export 'email/presentation_email_address.dart';
export 'email/email_address_cache.dart';
export 'email/read_actions.dart';
export 'email/attachment.dart';
// Extensions
export 'extensions/email_address_extension.dart';
@@ -34,3 +35,6 @@ export 'extensions/user_profile_extension.dart';
export 'extensions/presentation_email_extension.dart';
export 'extensions/keyword_identifier_extension.dart';
export 'extensions/presentation_mailbox_extension.dart';
// Download
export 'download/download_task_id.dart';
+3
View File
@@ -52,6 +52,9 @@ dependencies:
# json_annotation
json_annotation: 4.0.1
# http_parser
http_parser: 4.0.0
dev_dependencies:
flutter_test:
sdk: flutter