private void LogGridMouseDoubleClick(object sender, MouseButtonEventArgs e) { LogRow logRow = this.SelectedLogRow; if (logRow != null) { this.EditComment(logRow); } }
private void UpdateLogRows(IEnumerable <PeerGroupState> peerGroupStates) { List <PeerGroupState> failedChanged = new List <PeerGroupState>(0); HashSet <Guid> currentPeerGroups = new HashSet <Guid>(this.failedPeerGroupToLogRowMap.Comparer); foreach (PeerGroupState peerGroupState in peerGroupStates) { PeerGroup peerGroup = peerGroupState.PeerGroup; Guid peerGroupId = peerGroup.Id; if (this.failedPeerGroupToLogRowMap.TryGetValue(peerGroupId, out LogRow row)) { row.Update(peerGroupState); if (!peerGroupState.IsFailed) { this.failedPeerGroupToLogRowMap.Remove(peerGroupId); this.logger?.AddFailureEnd(row.PeerGroupName, row.FailEnded.Value, row.FailureId, ConvertUtility.RoundToSeconds(row.Length)); failedChanged.Add(peerGroupState); } } else if (peerGroupState.IsFailed) { LogRow previous = this.logRows.FirstOrDefault(r => r.PeerGroupId == peerGroupId); row = new LogRow(this.failureId++); row.Update(peerGroupState, previous); this.logRows.Insert(0, row); this.failedPeerGroupToLogRowMap.Add(peerGroupId, row); TimeSpan?sincePrevious = row.SincePrevious != null?ConvertUtility.RoundToSeconds(row.SincePrevious.Value) : (TimeSpan?)null; this.logger?.AddFailureStart(row.PeerGroupName, row.FailStarted, row.FailureId, sincePrevious); failedChanged.Add(peerGroupState); } currentPeerGroups.Add(peerGroupId); } foreach (Guid peerGroupId in this.failedPeerGroupToLogRowMap.Keys.Where(key => !currentPeerGroups.Contains(key)).ToArray()) { this.failedPeerGroupToLogRowMap.Remove(peerGroupId); } foreach (var group in failedChanged.GroupBy(g => g.IsFailed)) { AlertOptions alertOptions = group.Key ? this.appOptions.FailureOptions : this.appOptions.ReconnectOptions; StringBuilder sb = new StringBuilder("The following peer groups "); sb.Append(group.Key ? "are no longer connected:" : "have reconnected:"); sb.AppendLine(); foreach (PeerGroupState peerGroupState in group) { sb.AppendLine(peerGroupState.PeerGroup.Name); } alertOptions.Alert(this, sb.ToString(), this.notifyIcon, ref this.mediaPlayer); } }
private void LogGridSelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) { object current = e.AddedCells.Select(cell => cell.Item).FirstOrDefault(); object previous = e.RemovedCells.Select(cell => cell.Item).FirstOrDefault(); if (!ReferenceEquals(current, previous)) { LogRow selectedLogRow = this.SelectedLogRow; foreach (LogRow logRow in this.logRows) { logRow.IsSelected = ReferenceEquals(logRow, selectedLogRow); } } }
private void EditComment(LogRow logRow) { string comment = logRow.Comment; StringBuilder sb = new StringBuilder(); sb.Append(string.IsNullOrEmpty(comment) ? "Add a" : "Edit the"); sb.Append(" comment for the \"").Append(logRow.PeerGroupName).Append("\" failure that started at "); sb.Append(logRow.FailStarted).Append(':'); comment = WindowsUtility.ShowInputBox(this, sb.ToString(), null, comment); if (comment != null) { using (new WaitCursor()) { logRow.Comment = comment; this.logger?.AddFailureComment(logRow.PeerGroupName, this.stateManager.LastUpdated, logRow.FailureId, comment); } } this.TryFocus(this.logGrid); }