mirror of
https://gitlab.com/comunic/comunicmobile
synced 2025-06-19 00:05:16 +00:00
Show message files
This commit is contained in:
@ -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
|
||||
|
@ -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"]);
|
||||
}
|
||||
|
Reference in New Issue
Block a user