using CircleSDK.Model; using Newtonsoft.Json; using System; using System.Collections.Generic; using Path = System.IO.Path; namespace CDPShared { public class ActivityRow { private MessageInfo _mi; private CircleViewEventRecord _rec; // resolved fields public string Filename { get; set; } public string Sender { get; set; } public DateTime EventTime { get { if (_mi != null) { DateTime start = new DateTime(1970, 1, 1, 0, 0, 0); return start.AddMilliseconds(Convert.ToUInt64(_mi.MessageTimeOffset)).ToLocalTime(); } if (_rec != null) return _rec.Event.ToLocalTime(); return DateTime.MinValue; } } public string Operation { get { CircleViewMessages cvm = CircleViewMessages.Unknown; if (_mi != null) cvm = (CircleViewMessages)_mi.MessageType.GetValueOrDefault(10000); if (_rec != null) cvm = (CircleViewMessages)_rec.MsgType; switch (cvm) { case CircleViewMessages.FileViewed: return "View"; case CircleViewMessages.FileEncrypted: return "Protect"; case CircleViewMessages.InviteGenerated: return "Invite"; case CircleViewMessages.MemberRevoked: return "User revoked"; case CircleViewMessages.DeviceRevoked: return "Device revoked"; case CircleViewMessages.BlockedViewAttempt: return "Blocked view"; default: return "Unknown"; } } } public Int32 MessageType { get { if (_mi != null) return (Int32) _mi.MessageType; if (_rec != null) return (Int32)_rec.MsgType; return 0; } } public string Message { get { if (_mi != null) return _mi.Message; if (_rec != null) return _rec.Message; return "Unknown"; } } private List _meta = new List(); private Dictionary _dic = new Dictionary(StringComparer.InvariantCultureIgnoreCase); public ActivityRow(MessageInfo mi) { _mi = mi; _meta = JsonConvert.DeserializeObject>(_mi.AdditionalJson); BuildDictionary(); } void BuildDictionary() { List l2s = new List(); foreach (string line in _meta) { int iPos = line.IndexOf('|'); if (iPos == -1) iPos = line.IndexOf(':'); string one = line.Substring(0, iPos); string two = line.Substring(iPos + 1); _dic[one] = two; } if (_dic.ContainsKey("Full path")) { string fileName = Path.GetFileName(_dic["Full path"]); _dic["Filename"] = fileName; } } public ActivityRow(CircleViewEventRecord rec) { _rec = rec; _meta = JsonConvert.DeserializeObject>(_rec.Meta); BuildDictionary(); } public List Meta { get { return _meta; } } public string GetValue(string name) { if (_dic.ContainsKey(name)) return _dic[name]; return null; } public void AddValue(string name, string value) { _dic[name] = value; _meta.Add($"{name}|{value}"); } } }