private void IrcManager_Connected(object sender, EventArgs e) { lock (MessageLock) { if (Messages.Length != 0 && Messages[Messages.Length - 1].HighlightType.HasFlag(HighlightType.Disconnected)) { Messages[Messages.Length - 1] = new Message("reconnected to chat", HSLColor.Gray, true) { HighlightTab = false, HighlightType = HighlightType.Connected, }; Task.Run(() => ChatCleared?.Invoke(this, new ChatClearedEventArgs("", "", 0))); return; } } AddMessage(new Message("connected to chat", HSLColor.Gray, true) { HighlightTab = false, HighlightType = HighlightType.Disconnected, }); }
public void ClearChat(string user, string reason, int duration) { if (string.IsNullOrWhiteSpace(user)) { ClearChat(false); return; } Monitor.Enter(MessageLock); foreach (var msg in Messages) { if (!msg.HasAnyHighlightType(HighlightType.Whisper) && msg.Username == user) { msg.Disabled = true; } } for (var i = Messages.Length - 1; i >= 0; i--) { var m = Messages[i]; if (m.ParseTime > DateTime.Now - TimeSpan.FromSeconds(30)) { if (m.TimeoutUser != user) { continue; } Messages[i] = new Message( $"{user} was timed out for {duration} second{(duration != 1 ? "s" : "")}: \"{reason}\" (multiple times)", HSLColor.Gray, true) { TimeoutUser = user, Id = Messages[i].Id }; Monitor.Exit(MessageLock); ChatCleared?.Invoke(this, new ChatClearedEventArgs(user, reason, duration)); return; } break; } Monitor.Exit(MessageLock); AddMessage( new Message($"{user} was timed out for {duration} second{(duration != 1 ? "s" : "")}: \"{reason}\"", HSLColor.Gray, true) { TimeoutUser = user }); ChatCleared?.Invoke(this, new ChatClearedEventArgs(user, reason, duration)); }
protected virtual void OnChatCleared(string channel) { ChatCleared?.Invoke(this, new ChatClearedEventArgs(channel)); }