TF-56 Add object upload request & response and widget builder
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:model/model.dart';
|
||||
|
||||
@@ -12,6 +14,8 @@ class AccountRequest with EquatableMixin {
|
||||
'password': password.value,
|
||||
};
|
||||
|
||||
String basicAuth() => 'Basic ${base64Encode(utf8.encode('${userName.userName}:${password.value}'))}';
|
||||
|
||||
@override
|
||||
List<Object> get props => [userName, password];
|
||||
}
|
||||
@@ -16,14 +16,14 @@ class Attachment with EquatableMixin {
|
||||
final MediaType? type;
|
||||
final String? cid;
|
||||
|
||||
Attachment(
|
||||
Attachment({
|
||||
this.partId,
|
||||
this.blobId,
|
||||
this.size,
|
||||
this.name,
|
||||
this.type,
|
||||
this.cid
|
||||
);
|
||||
});
|
||||
|
||||
String getDownloadUrl(String baseDownloadUrl, AccountId accountId) {
|
||||
final downloadUriTemplate = UriTemplate('$baseDownloadUrl');
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:uri/uri.dart';
|
||||
|
||||
extension SessionExtension on Session {
|
||||
String getDownloadUrl() {
|
||||
@@ -9,4 +11,13 @@ extension SessionExtension on Session {
|
||||
}
|
||||
return Uri.decodeFull(baseUrl);
|
||||
}
|
||||
|
||||
Uri getUploadUrl(AccountId accountId) {
|
||||
final baseUrl = '${uploadUrl.origin}${uploadUrl.path}';
|
||||
final uploadUriTemplate = UriTemplate('${Uri.decodeFull(baseUrl)}');
|
||||
final uploadUri = uploadUriTemplate.expand({
|
||||
'accountId' : '${accountId.id.value}'
|
||||
});
|
||||
return Uri.parse(uploadUri);
|
||||
}
|
||||
}
|
||||
@@ -41,4 +41,9 @@ export 'download/download_task_id.dart';
|
||||
|
||||
// Contact
|
||||
export 'contact/contact.dart';
|
||||
export 'contact/device_contact.dart';
|
||||
export 'contact/device_contact.dart';
|
||||
|
||||
// Upload
|
||||
export 'upload/file_info.dart';
|
||||
export 'upload/upload_request.dart';
|
||||
export 'upload/upload_response.dart';
|
||||
@@ -0,0 +1,17 @@
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
|
||||
class FileInfo with EquatableMixin {
|
||||
final String fileName;
|
||||
final String filePath;
|
||||
final int fileSize;
|
||||
|
||||
FileInfo(this.fileName, this.filePath, this.fileSize);
|
||||
|
||||
factory FileInfo.empty() {
|
||||
return FileInfo('', '', 0);
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object> get props => [fileName, filePath, fileSize];
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:model/model.dart';
|
||||
|
||||
class UploadRequest with EquatableMixin {
|
||||
|
||||
final Uri uploadUrl;
|
||||
final FileInfo fileInfo;
|
||||
final AccountId accountId;
|
||||
final AccountRequest accountRequest;
|
||||
|
||||
UploadRequest(this.uploadUrl, this.accountId, this.fileInfo, this.accountRequest);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [uploadUrl, accountId, fileInfo, accountRequest];
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:http_parser/http_parser.dart';
|
||||
import 'package:jmap_dart_client/http/converter/account_id_converter.dart';
|
||||
import 'package:jmap_dart_client/http/converter/id_converter.dart';
|
||||
import 'package:jmap_dart_client/http/converter/media_type_converter.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:json_annotation/json_annotation.dart';
|
||||
import 'package:model/email/attachment.dart';
|
||||
|
||||
part 'upload_response.g.dart';
|
||||
|
||||
@AccountIdConverter()
|
||||
@MediaTypeConverter()
|
||||
@IdConverter()
|
||||
@JsonSerializable()
|
||||
class UploadResponse with EquatableMixin {
|
||||
|
||||
final AccountId accountId;
|
||||
final Id blobId;
|
||||
final MediaType type;
|
||||
final int size;
|
||||
|
||||
UploadResponse(this.accountId, this.blobId, this.type, this.size);
|
||||
|
||||
factory UploadResponse.fromJson(Map<String, dynamic> json) => _$UploadResponseFromJson(json);
|
||||
|
||||
Map<String, dynamic> toJson() => _$UploadResponseToJson(this);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [accountId, blobId, type, size];
|
||||
}
|
||||
|
||||
extension UploadResponseExtension on UploadResponse {
|
||||
Attachment toAttachmentFile(String nameFile) {
|
||||
return Attachment(blobId: blobId, size: UnsignedInt(size), name: nameFile, type: type);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user