using CircleSDK.Model; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Newtonsoft.Json; using Syncfusion.Windows.Forms; using System.Net.Http; using CDPShared; namespace CircleViewer.Dialogs { public partial class ActivityDlgDefault : Form { CDPWorker _cdp; List _CircleMeta; public ActivityDlgDefault(CDPWorker cdp) { _cdp = cdp; InitializeComponent(); } private async void ActivityDlg_Load(object sender, EventArgs e) { LoadActivity(); await Task.Run(async () => { CircleInfo ci = await _cdp.GetCircle(Properties.Settings.Default.DefaultCircleId); this.BeginInvoke((MethodInvoker)delegate { this.Text = $"User Group Activity - {ci.CircleName}"; }); }); } private async Task> LoadCircleActivity() { List lar = new List(); GetMessagesReply gmReply = await _cdp.GetCircleViewMessages(); #if FALSE // I only want to display recent events. (making a video) foreach (MessageInfo mi in gmReply.Messages) { ActivityRow ar = new ActivityRow(mi); if ((DateTime.Now - ar.EventTime).TotalMinutes < 15) lar.Add(new ActivityRow(mi)); } #else foreach (MessageInfo mi in gmReply.Messages) lar.Add(new ActivityRow(mi)); #endif return lar; } private async Task> LoadCloudActivity() { List retList = new List(); var url = "https://circlecloudfuncstaging.azurewebsites.net/api/GetCircleEvents?circleId=" + Properties.Settings.Default.DefaultCircleId; HttpClient client = new HttpClient(); var response = await client.GetAsync(url); response.EnsureSuccessStatusCode(); string result = await response.Content.ReadAsStringAsync(); List lrecs = JsonConvert.DeserializeObject>(result); foreach (CircleViewEventRecord rec in lrecs) { retList.Add(new ActivityRow(rec)); } return retList; } private async void LoadActivity() { GetMessagesReply gmReply = await _cdp.GetCircleViewMessages(); List lar = new List(); List lCircleAR = await LoadCircleActivity(); lar.AddRange(lCircleAR); Dictionary _fileIdToName = new Dictionary(); Dictionary _userIdToName = new Dictionary(); foreach (ActivityRow ar in lar) { switch ((CircleViewMessages)ar.MessageType) { case CircleViewMessages.FileEncrypted: { string fileId = ar.GetValue("File Id"); if (!string.IsNullOrEmpty(fileId)) { _fileIdToName[fileId] = ar.GetValue("Filename"); } string viewerId = ar.GetValue("Sender Id"); if (!string.IsNullOrEmpty(viewerId)) { _userIdToName[viewerId] = ar.GetValue("Sender"); } break; } case CircleViewMessages.FileViewed: { string fileId = ar.GetValue("File Id"); if (!string.IsNullOrEmpty(fileId)) { _fileIdToName[fileId] = ar.GetValue("Filename"); } string viewerId = ar.GetValue("Viewer Id"); if (!string.IsNullOrEmpty(viewerId)) { _userIdToName[viewerId] = ar.GetValue("Viewer"); } break; } default: break; } } List lCloudAR = await LoadCloudActivity(); foreach (ActivityRow ar in lCloudAR) { string fileId = ar.GetValue("File Id"); if (_fileIdToName.ContainsKey(fileId)) { ar.AddValue("Filename*", _fileIdToName[fileId]); } string senderId = ar.GetValue("Sender Id"); if (_userIdToName.ContainsKey(senderId)) { ar.AddValue("Sender*", _userIdToName[senderId]); } } lar.AddRange(lCloudAR); sfgActivity.DataSource = lar.OrderBy(r => r.EventTime).ToList(); } private void sfgActivity_CellDoubleClick(object sender, Syncfusion.WinForms.DataGrid.Events.CellClickEventArgs e) { ActivityRow ar = (ActivityRow)e.DataRow.RowData; ViewMetaDlg dlg = new ViewMetaDlg(ar); dlg.ShowDialog(); } } }