chore: support MIME in file factory

- defaultly generate MatrixFile based on the present MIME type

Related: https://gitlab.com/famedly/company/frontend/famedly-web/-/merge_requests/598

Signed-off-by: Lanna Michalke <l.michalke@famedly.com>
This commit is contained in:
Lanna Michalke 2022-08-17 11:34:07 +02:00
parent 61466c82c9
commit ca68c28d41
1 changed files with 29 additions and 7 deletions

View File

@ -45,9 +45,37 @@ class MatrixFile {
'application/octet-stream', 'application/octet-stream',
name = name.split('/').last.toLowerCase(); name = name.split('/').last.toLowerCase();
/// derivatives the MIME type from the [bytes] and correspondingly creates a
/// [MatrixFile], [MatrixImageFile], [MatrixAudioFile] or a [MatrixVideoFile]
factory MatrixFile.fromMimeType(
{required Uint8List bytes, required String name, String? mimeType}) {
final msgType = msgTypeFromMime(mimeType ??
lookupMimeType(name, headerBytes: bytes) ??
'application/octet-stream');
if (msgType == MessageTypes.Image) {
return MatrixImageFile(bytes: bytes, name: name, mimeType: mimeType);
}
if (msgType == MessageTypes.Video) {
return MatrixVideoFile(bytes: bytes, name: name, mimeType: mimeType);
}
if (msgType == MessageTypes.Audio) {
return MatrixAudioFile(bytes: bytes, name: name, mimeType: mimeType);
}
return MatrixFile(bytes: bytes, name: name, mimeType: mimeType);
}
int get size => bytes.length; int get size => bytes.length;
String get msgType { String get msgType {
return msgTypeFromMime(mimeType);
}
Map<String, dynamic> get info => ({
'mimetype': mimeType,
'size': size,
});
static String msgTypeFromMime(String mimeType) {
if (mimeType.toLowerCase().startsWith('image/')) { if (mimeType.toLowerCase().startsWith('image/')) {
return MessageTypes.Image; return MessageTypes.Image;
} }
@ -59,11 +87,6 @@ class MatrixFile {
} }
return MessageTypes.File; return MessageTypes.File;
} }
Map<String, dynamic> get info => ({
'mimetype': mimeType,
'size': size,
});
} }
class MatrixImageFile extends MatrixFile { class MatrixImageFile extends MatrixFile {
@ -374,7 +397,6 @@ class MatrixAudioFile extends MatrixFile {
extension ToMatrixFile on EncryptedFile { extension ToMatrixFile on EncryptedFile {
MatrixFile toMatrixFile() { MatrixFile toMatrixFile() {
return MatrixFile( return MatrixFile.fromMimeType(bytes: data, name: 'crypt');
bytes: data, name: 'crypt', mimeType: 'application/octet-stream');
} }
} }