1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2025-06-19 00:05:16 +00:00

Show message files

This commit is contained in:
2021-03-11 00:02:41 +01:00
parent 2989e98c50
commit 6c00e0bcab
12 changed files with 498 additions and 30 deletions

View File

@ -68,7 +68,8 @@ class Conversation extends SerializableElement<Conversation> {
lastActivity = map["lastActivity"],
members = map["members"]
.map((el) => ConversationMember.fromJSON(el))
.toList(),
.toList()
.cast<ConversationMember>(),
canEveryoneAddMembers = map["canEveryoneAddMembers"],
// By default, we can not do any call

View File

@ -3,12 +3,33 @@ import 'package:comunic/lists/users_list.dart';
import 'package:comunic/models/displayed_content.dart';
import 'package:comunic/utils/account_utils.dart' as account;
import 'package:comunic/utils/intl_utils.dart';
import 'package:flutter/material.dart';
import 'package:meta/meta.dart';
/// Single conversation message
///
/// @author Pierre HUBERT
enum ConversationMessageFileType {
IMAGE,
VIDEO,
AUDIO,
PDF,
ZIP,
OTHER,
}
const _ConversationFileMimeTypeMapping = {
"image/jpeg": ConversationMessageFileType.IMAGE,
"image/png": ConversationMessageFileType.IMAGE,
"image/gif": ConversationMessageFileType.IMAGE,
"video/mp4": ConversationMessageFileType.VIDEO,
"audio/m4a": ConversationMessageFileType.AUDIO,
"audio/mpeg": ConversationMessageFileType.AUDIO,
"application/pdf": ConversationMessageFileType.PDF,
"application/zip": ConversationMessageFileType.ZIP,
};
class ConversationMessageFile {
final String url;
final int size;
@ -27,6 +48,38 @@ class ConversationMessageFile {
assert(name != null),
assert(type != null);
/// Get the type of file
ConversationMessageFileType get fileType {
if (type != null && _ConversationFileMimeTypeMapping.containsKey(type))
return _ConversationFileMimeTypeMapping[type];
else
return ConversationMessageFileType.OTHER;
}
/// Get the icon associated with file type
IconData get icon {
switch (fileType) {
case ConversationMessageFileType.IMAGE:
return Icons.image;
case ConversationMessageFileType.VIDEO:
return Icons.video_library;
case ConversationMessageFileType.AUDIO:
return Icons.audiotrack;
case ConversationMessageFileType.PDF:
return Icons.picture_as_pdf;
case ConversationMessageFileType.ZIP:
return Icons.archive;
default:
return Icons.insert_drive_file;
}
}
bool get hasThumbnail => thumbnail != null;
bool get downloadable => fileType == ConversationMessageFileType.AUDIO;
Map<String, dynamic> toJson() => {
"url": url,
"size": size,
@ -165,10 +218,6 @@ class ConversationMessage extends SerializableElement<ConversationMessage> {
bool get hasFile => file != null;
bool get hasThumbnail => hasFile && file.thumbnail != null;
bool get hasImage => hasFile && file.type.startsWith("image/");
bool get isOwner => account.userID() == userID;
bool get isServerMessage => serverMessage != null;
@ -203,6 +252,10 @@ class ConversationMessage extends SerializableElement<ConversationMessage> {
userID = map["userID"],
timeSent = map["timeSent"],
message = DisplayedString(map["message"]),
file = map["file"],
serverMessage = map["serverMessage"];
file = map["file"] == null
? null
: ConversationMessageFile.fromJson(map["file"]),
serverMessage = map["serverMessage"] == null
? null
: ConversationServerMessage.fromJson(map["serverMessage"]);
}