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

using CircleSDK.Model;
using CircleViewer.Dialogs;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using Path = System.IO.Path;
namespace CircleViewer.Models
{
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<string> _meta = new List<string>();
private Dictionary<string, string> _dic = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
public ActivityRow(MessageInfo mi)
{
_mi = mi;
_meta = JsonConvert.DeserializeObject<List<string>>(_mi.AdditionalJson);
BuildDictionary();
}
void BuildDictionary()
{
List<TwoStrings> l2s = new List<TwoStrings>();
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<List<string>>(_rec.Meta);
BuildDictionary();
}
public List<string> 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}");
}
}
}