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.

149 lines
4.2 KiB

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