* LCIMFileMessage.cs:

* LCIMAudioMessage.cs:
* LCIMImageMessage.cs:

* LCIMVideoMessage.cs: chore: 完善富媒体消息
oneRain 2020-04-28 11:12:25 +08:00
parent c66ce32f9a
commit 63552e17de
4 changed files with 85 additions and 32 deletions

View File

@ -24,7 +24,8 @@ namespace LeanCloud.Realtime {
Dictionary<string, object> data = base.Encode(); Dictionary<string, object> data = base.Encode();
Dictionary<string, object> fileData = data[MessageFileKey] as Dictionary<string, object>; Dictionary<string, object> fileData = data[MessageFileKey] as Dictionary<string, object>;
Dictionary<string, object> metaData = fileData[MessageDataMetaDataKey] as Dictionary<string, object>; Dictionary<string, object> metaData = fileData[MessageDataMetaDataKey] as Dictionary<string, object>;
if (File.MetaData.TryGetValue(MessageDataMetaDurationKey, out object duration)) { if (File.MetaData != null &&
File.MetaData.TryGetValue(MessageDataMetaDurationKey, out object duration)) {
metaData[MessageDataMetaDurationKey] = duration; metaData[MessageDataMetaDurationKey] = duration;
} }
return data; return data;
@ -32,6 +33,10 @@ namespace LeanCloud.Realtime {
internal override void Decode(Dictionary<string, object> msgData) { internal override void Decode(Dictionary<string, object> msgData) {
base.Decode(msgData); base.Decode(msgData);
if (File.MetaData == null) {
return;
}
if (File.MetaData.TryGetValue(MessageDataMetaDurationKey, out object duration) && if (File.MetaData.TryGetValue(MessageDataMetaDurationKey, out object duration) &&
double.TryParse(duration as string, out double d)) { double.TryParse(duration as string, out double d)) {
Duration = d; Duration = d;

View File

@ -1,4 +1,5 @@
using System; using System;
using System.IO;
using System.Collections.Generic; using System.Collections.Generic;
using LeanCloud.Storage; using LeanCloud.Storage;
@ -18,21 +19,14 @@ namespace LeanCloud.Realtime {
/// 文件大小 /// 文件大小
/// </summary> /// </summary>
public int Size { public int Size {
get { get; private set;
if (int.TryParse(File.MetaData[MessageDataMetaSizeKey] as string, out int size)) {
return size;
}
return 0;
}
} }
/// <summary> /// <summary>
/// 文件类型 /// 文件扩展名
/// </summary> /// </summary>
public string Format { public string Format {
get { get; private set;
return File.MimeType;
}
} }
/// <summary> /// <summary>
@ -58,18 +52,47 @@ namespace LeanCloud.Realtime {
if (File == null) { if (File == null) {
throw new Exception("File MUST NOT be null before sent."); throw new Exception("File MUST NOT be null before sent.");
} }
if (string.IsNullOrEmpty(File.ObjectId)) {
throw new Exception("File MUST be saved before sent.");
}
Dictionary<string, object> fileData = new Dictionary<string, object> { Dictionary<string, object> fileData = new Dictionary<string, object> {
{ MessageDataObjectIdKey, File.ObjectId }, { MessageDataObjectIdKey, File.ObjectId }
{ MessageDataUrlKey, File.Url },
{ MessageDataMetaDataKey, new Dictionary<string, object> {
{ MessageDataMetaNameKey, File.Name },
{ MessageDataMetaFormatKey, File.MimeType }
} }
}; };
if (File.MetaData.TryGetValue(MessageDataMetaSizeKey, out object size)) { // 链接
Dictionary<string, object> metaData = fileData[MessageDataMetaDataKey] as Dictionary<string, object>; if (!string.IsNullOrEmpty(File.Url)) {
fileData[MessageDataUrlKey] = File.Url;
}
// 元数据
Dictionary<string, object> metaData = new Dictionary<string, object>();
// 文件名
if (!string.IsNullOrEmpty(File.Name)) {
metaData[MessageDataMetaNameKey] = File.Name;
}
// 文件扩展名
string format = null;
if (File.MetaData != null &&
File.MetaData.TryGetValue(MessageDataMetaFormatKey, out object f)) {
// 优先使用用户设置值
format = f as string;
} else if (File.Name != null &&
!string.IsNullOrEmpty(Path.GetExtension(File.Name))) {
// 根据文件名推测
format = Path.GetExtension(File.Name)?.Replace(".", string.Empty);
} else if (File.Url != null &&
!string.IsNullOrEmpty(Path.GetExtension(File.Url))) {
// 根据 url 推测
format = Path.GetExtension(File.Url)?.Replace(".", string.Empty);
}
if (!string.IsNullOrEmpty(format)) {
metaData[MessageDataMetaFormatKey] = format;
}
// 文件大小
if (File.MetaData != null &&
File.MetaData.TryGetValue(MessageDataMetaSizeKey, out object size)) {
metaData[MessageDataMetaSizeKey] = size; metaData[MessageDataMetaSizeKey] = size;
} }
fileData[MessageDataMetaDataKey] = metaData;
Dictionary<string, object> data = base.Encode(); Dictionary<string, object> data = base.Encode();
data[MessageFileKey] = fileData; data[MessageFileKey] = fileData;
return data; return data;
@ -80,6 +103,9 @@ namespace LeanCloud.Realtime {
if (msgData.TryGetValue(MessageFileKey, out object fileDataObject)) { if (msgData.TryGetValue(MessageFileKey, out object fileDataObject)) {
Dictionary<string, object> fileData = fileDataObject as Dictionary<string, object>; Dictionary<string, object> fileData = fileDataObject as Dictionary<string, object>;
if (fileData == null) {
return;
}
if (fileData.TryGetValue(MessageDataObjectIdKey, out object objectIdObject)) { if (fileData.TryGetValue(MessageDataObjectIdKey, out object objectIdObject)) {
string objectId = objectIdObject as string; string objectId = objectIdObject as string;
File = LCObject.CreateWithoutData(LCFile.CLASS_NAME, objectId) as LCFile; File = LCObject.CreateWithoutData(LCFile.CLASS_NAME, objectId) as LCFile;
@ -88,9 +114,19 @@ namespace LeanCloud.Realtime {
} }
if (fileData.TryGetValue(MessageDataMetaDataKey, out object metaData)) { if (fileData.TryGetValue(MessageDataMetaDataKey, out object metaData)) {
File.MetaData = metaData as Dictionary<string, object>; File.MetaData = metaData as Dictionary<string, object>;
if (File.MetaData == null) {
return;
}
if (File.MetaData.TryGetValue(MessageDataMetaNameKey, out object name)) { if (File.MetaData.TryGetValue(MessageDataMetaNameKey, out object name)) {
File.Name = name as string; File.Name = name as string;
} }
if (File.MetaData.TryGetValue(MessageDataMetaSizeKey, out object size) &&
int.TryParse(size as string, out int s)) {
Size = s;
}
if (File.MetaData.TryGetValue(MessageDataMetaFormatKey, out object format)) {
Format = format as string;
}
} }
} }
} }

View File

@ -31,17 +31,23 @@ namespace LeanCloud.Realtime {
Dictionary<string, object> data = base.Encode(); Dictionary<string, object> data = base.Encode();
Dictionary<string, object> fileData = data[MessageFileKey] as Dictionary<string, object>; Dictionary<string, object> fileData = data[MessageFileKey] as Dictionary<string, object>;
Dictionary<string, object> metaData = fileData[MessageDataMetaDataKey] as Dictionary<string, object>; Dictionary<string, object> metaData = fileData[MessageDataMetaDataKey] as Dictionary<string, object>;
if (File.MetaData != null) {
if (File.MetaData.TryGetValue(MessageDataMetaWidthKey, out object width)) { if (File.MetaData.TryGetValue(MessageDataMetaWidthKey, out object width)) {
metaData[MessageDataMetaWidthKey] = width; metaData[MessageDataMetaWidthKey] = width;
} }
if (File.MetaData.TryGetValue(MessageDataMetaHeightKey, out object height)) { if (File.MetaData.TryGetValue(MessageDataMetaHeightKey, out object height)) {
metaData[MessageDataMetaHeightKey] = height; metaData[MessageDataMetaHeightKey] = height;
} }
}
return data; return data;
} }
internal override void Decode(Dictionary<string, object> msgData) { internal override void Decode(Dictionary<string, object> msgData) {
base.Decode(msgData); base.Decode(msgData);
if (File.MetaData == null) {
return;
}
if (File.MetaData.TryGetValue(MessageDataMetaWidthKey, out object width) && if (File.MetaData.TryGetValue(MessageDataMetaWidthKey, out object width) &&
int.TryParse(width as string, out int w)) { int.TryParse(width as string, out int w)) {
Width = w; Width = w;

View File

@ -38,6 +38,7 @@ namespace LeanCloud.Realtime {
Dictionary<string, object> data = base.Encode(); Dictionary<string, object> data = base.Encode();
Dictionary<string, object> fileData = data[MessageFileKey] as Dictionary<string, object>; Dictionary<string, object> fileData = data[MessageFileKey] as Dictionary<string, object>;
Dictionary<string, object> metaData = fileData[MessageDataMetaDataKey] as Dictionary<string, object>; Dictionary<string, object> metaData = fileData[MessageDataMetaDataKey] as Dictionary<string, object>;
if (File.MetaData != null) {
if (File.MetaData.TryGetValue(MessageDataMetaWidthKey, out object width)) { if (File.MetaData.TryGetValue(MessageDataMetaWidthKey, out object width)) {
metaData[MessageDataMetaWidthKey] = width; metaData[MessageDataMetaWidthKey] = width;
} }
@ -47,11 +48,16 @@ namespace LeanCloud.Realtime {
if (File.MetaData.TryGetValue(MessageDataMetaDurationKey, out object duration)) { if (File.MetaData.TryGetValue(MessageDataMetaDurationKey, out object duration)) {
metaData[MessageDataMetaDurationKey] = duration; metaData[MessageDataMetaDurationKey] = duration;
} }
}
return data; return data;
} }
internal override void Decode(Dictionary<string, object> msgData) { internal override void Decode(Dictionary<string, object> msgData) {
base.Decode(msgData); base.Decode(msgData);
if (File.MetaData == null) {
return;
}
if (File.MetaData.TryGetValue(MessageDataMetaWidthKey, out object width) && if (File.MetaData.TryGetValue(MessageDataMetaWidthKey, out object width) &&
int.TryParse(width as string, out int w)) { int.TryParse(width as string, out int w)) {
Width = w; Width = w;