You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

148 lines
4.2 KiB

1 year ago
1 year ago
  1. using CircleSDK.Model;
  2. using Newtonsoft.Json;
  3. using System;
  4. using System.Collections.Generic;
  5. using Path = System.IO.Path;
  6. namespace CDPShared
  7. {
  8. public class ActivityRow
  9. {
  10. private MessageInfo _mi;
  11. private CircleViewEventRecord _rec;
  12. // resolved fields
  13. public string Filename { get; set; }
  14. public string Sender { get; set; }
  15. public DateTime EventTime
  16. {
  17. get
  18. {
  19. if (_mi != null)
  20. {
  21. DateTime start = new DateTime(1970, 1, 1, 0, 0, 0);
  22. return start.AddMilliseconds(Convert.ToUInt64(_mi.MessageTimeOffset)).ToLocalTime();
  23. }
  24. if (_rec != null)
  25. return _rec.Event.ToLocalTime();
  26. return DateTime.MinValue;
  27. }
  28. }
  29. public string Operation
  30. {
  31. get
  32. {
  33. CircleViewMessages cvm = CircleViewMessages.Unknown;
  34. if (_mi != null)
  35. cvm = (CircleViewMessages)_mi.MessageType.GetValueOrDefault(10000);
  36. if (_rec != null)
  37. cvm = (CircleViewMessages)_rec.MsgType;
  38. switch (cvm)
  39. {
  40. case CircleViewMessages.FileViewed:
  41. return "View";
  42. case CircleViewMessages.FileEncrypted:
  43. return "Protect";
  44. case CircleViewMessages.InviteGenerated:
  45. return "Invite";
  46. case CircleViewMessages.MemberRevoked:
  47. return "User revoked";
  48. case CircleViewMessages.DeviceRevoked:
  49. return "Device revoked";
  50. case CircleViewMessages.BlockedViewAttempt:
  51. return "Blocked view";
  52. default:
  53. return "Unknown";
  54. }
  55. }
  56. }
  57. public Int32 MessageType
  58. {
  59. get
  60. {
  61. if (_mi != null)
  62. return (Int32) _mi.MessageType;
  63. if (_rec != null)
  64. return (Int32)_rec.MsgType;
  65. return 0;
  66. }
  67. }
  68. public string Message
  69. {
  70. get
  71. {
  72. if (_mi != null)
  73. return _mi.Message;
  74. if (_rec != null)
  75. return _rec.Message;
  76. return "Unknown";
  77. }
  78. }
  79. private List<string> _meta = new List<string>();
  80. private Dictionary<string, string> _dic = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
  81. public ActivityRow(MessageInfo mi)
  82. {
  83. _mi = mi;
  84. _meta = JsonConvert.DeserializeObject<List<string>>(_mi.AdditionalJson);
  85. BuildDictionary();
  86. }
  87. void BuildDictionary()
  88. {
  89. List<TwoStrings> l2s = new List<TwoStrings>();
  90. foreach (string line in _meta)
  91. {
  92. int iPos = line.IndexOf('|');
  93. if (iPos == -1)
  94. iPos = line.IndexOf(':');
  95. string one = line.Substring(0, iPos);
  96. string two = line.Substring(iPos + 1);
  97. _dic[one] = two;
  98. }
  99. if (_dic.ContainsKey("Full path"))
  100. {
  101. string fileName = Path.GetFileName(_dic["Full path"]);
  102. _dic["Filename"] = fileName;
  103. }
  104. }
  105. public ActivityRow(CircleViewEventRecord rec)
  106. {
  107. _rec = rec;
  108. _meta = JsonConvert.DeserializeObject<List<string>>(_rec.Meta);
  109. BuildDictionary();
  110. }
  111. public List<string> Meta
  112. {
  113. get
  114. {
  115. return _meta;
  116. }
  117. }
  118. public string GetValue(string name)
  119. {
  120. if (_dic.ContainsKey(name))
  121. return _dic[name];
  122. return null;
  123. }
  124. public void AddValue(string name, string value)
  125. {
  126. _dic[name] = value;
  127. _meta.Add($"{name}|{value}");
  128. }
  129. }
  130. }