您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
156 行
4.9 KiB
156 行
4.9 KiB
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace ChatComponents
|
|
{
|
|
public class FileMessage : Message
|
|
{
|
|
/// Creates a custom message.
|
|
|
|
|
|
public readonly string mimeType;
|
|
public readonly string name;
|
|
public readonly int size;
|
|
public readonly string uri;
|
|
|
|
public FileMessage(
|
|
User author,
|
|
string id,
|
|
string name,
|
|
int size,
|
|
string uri,
|
|
int? createdAt = null,
|
|
Dictionary<string, object> metadata = null,
|
|
string mimeType = null,
|
|
string roomId = null,
|
|
Status? status = default
|
|
) : base(
|
|
author,
|
|
createdAt,
|
|
id,
|
|
metadata,
|
|
roomId,
|
|
status,
|
|
MessageType.file
|
|
)
|
|
{
|
|
this.name = name;
|
|
this.size = size;
|
|
this.uri = uri;
|
|
this.mimeType = mimeType;
|
|
}
|
|
|
|
public override List<object> props => new List<object>
|
|
{
|
|
author,
|
|
createdAt,
|
|
id,
|
|
metadata,
|
|
mimeType,
|
|
name,
|
|
roomId,
|
|
size,
|
|
status,
|
|
uri,
|
|
};
|
|
|
|
public FileMessage fromPartial(
|
|
User author,
|
|
string id,
|
|
PartialFile partialFile,
|
|
int? createdAt = null,
|
|
Dictionary<string, object> metadata = null,
|
|
string roomId = null,
|
|
Status? status = default
|
|
)
|
|
{
|
|
return new FileMessage(
|
|
author : author,
|
|
createdAt:createdAt,
|
|
id:id,
|
|
metadata:metadata,
|
|
roomId:roomId,
|
|
status:status,
|
|
mimeType : partialFile.mimeType,
|
|
name : partialFile.name,
|
|
size : partialFile.size,
|
|
uri : partialFile.uri
|
|
);
|
|
|
|
}
|
|
|
|
/// Creates a custom message from a map (decoded JSON).
|
|
public static FileMessage fromJson(Dictionary<string, object> json)
|
|
{
|
|
var test = json["size"];
|
|
return new FileMessage(
|
|
User.fromJson(json["author"] as Dictionary<string, object>),
|
|
createdAt: json["createdAt"] as int?,
|
|
id: json["id"] as string,
|
|
metadata: json["metadata"] as Dictionary<string, object>,
|
|
roomId: json["roomId"] as string,
|
|
status: ChatRoomUtils.getStatusFromString(json["status"] as string),
|
|
mimeType : json["mimeType"] as string,
|
|
name : json["name"] as string,
|
|
size : Convert.ToInt32(json["size"]) ,
|
|
uri : json["uri"] as string
|
|
);
|
|
}
|
|
|
|
/// Converts a custom message to the map representation,
|
|
/// encodable to JSON.
|
|
public override Dictionary<string, object> toJson()
|
|
{
|
|
return new Dictionary<string, object>
|
|
{
|
|
{"author", author.toJson()},
|
|
{"createdAt", createdAt},
|
|
{"id", id},
|
|
{"metadata", metadata},
|
|
{"mimeType", mimeType},
|
|
{"name", name},
|
|
{"roomId", roomId},
|
|
{"size", size},
|
|
{"status", ChatRoomUtils.toShortString(status)},
|
|
{"type", ChatRoomUtils.toShortString(MessageType.file)},
|
|
{"uri", uri}
|
|
};
|
|
}
|
|
|
|
/// Creates a copy of the custom message with an updated data.
|
|
/// [metadata] with null value will nullify existing metadata, otherwise
|
|
/// both metadatas will be merged into one Map, where keys from a passed
|
|
/// metadata will overwite keys from the previous one.
|
|
/// [previewData] is ignored for this message type.
|
|
/// [status] with null value will be overwritten by the previous status.
|
|
/// [text] is ignored for this message type.
|
|
public override Message copyWith(
|
|
Dictionary<string, object> metadata = null,
|
|
PreviewData previewData = null,
|
|
Status? status = null,
|
|
string text = null
|
|
)
|
|
{
|
|
var result = new Dictionary<string, object>();
|
|
if (this.metadata != null)
|
|
foreach (var metaItem in this.metadata)
|
|
result.Add(metaItem.Key, metaItem.Value);
|
|
foreach (var metaItem in metadata) result.Add(metaItem.Key, metaItem.Value);
|
|
return new FileMessage(
|
|
author: author,
|
|
createdAt: createdAt,
|
|
id: id,
|
|
metadata: metadata == null
|
|
? null
|
|
: result,
|
|
mimeType: mimeType,
|
|
name: name,
|
|
roomId: roomId,
|
|
size: size,
|
|
status: status ?? this.status,
|
|
uri: uri
|
|
);
|
|
}
|
|
/// Equatable props
|
|
}
|
|
}
|