您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

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
}
}