mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-17 22:11:48 +08:00
added a message collection function for adding multiple msgs at once. only one notification will be raised for a batch of msgs
This commit is contained in:
@@ -56,5 +56,37 @@ namespace mRemoteNGTests.Messages
|
||||
_messageCollector.AddMessage(message);
|
||||
Assert.That(wasCalled, Is.True);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void BatchAddAddsAllItems()
|
||||
{
|
||||
var msg1 = Substitute.For<IMessage>();
|
||||
var msg2 = Substitute.For<IMessage>();
|
||||
var msgCollection = new[] {msg1, msg2};
|
||||
_messageCollector.AddMessages(msgCollection);
|
||||
Assert.That(_messageCollector.Messages, Is.EquivalentTo(msgCollection));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void OneNotificationRaisedForBatchAdd()
|
||||
{
|
||||
var notificationCount = 0;
|
||||
_messageCollector.CollectionChanged += (sender, args) => notificationCount++;
|
||||
var msg1 = Substitute.For<IMessage>();
|
||||
var msg2 = Substitute.For<IMessage>();
|
||||
_messageCollector.AddMessages(new[] { msg1, msg2 });
|
||||
Assert.That(notificationCount, Is.EqualTo(1));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void EventNotRaisedIfMsgIsntUnique()
|
||||
{
|
||||
var notificationCount = 0;
|
||||
var msg1 = Substitute.For<IMessage>();
|
||||
_messageCollector.AddMessage(msg1);
|
||||
_messageCollector.CollectionChanged += (sender, args) => notificationCount++;
|
||||
_messageCollector.AddMessage(msg1);
|
||||
Assert.That(notificationCount, Is.EqualTo(0));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,8 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Collections.Specialized;
|
||||
using System.Linq;
|
||||
|
||||
|
||||
namespace mRemoteNG.Messages
|
||||
@@ -14,8 +15,7 @@ namespace mRemoteNG.Messages
|
||||
|
||||
public MessageCollector()
|
||||
{
|
||||
_messageList = new ObservableCollection<IMessage>();
|
||||
((INotifyCollectionChanged) _messageList).CollectionChanged += RaiseCollectionChangedEvent;
|
||||
_messageList = new List<IMessage>();
|
||||
}
|
||||
|
||||
public void AddMessage(MessageClass messageClass, string messageText, bool onlyLog = false)
|
||||
@@ -26,8 +26,20 @@ namespace mRemoteNG.Messages
|
||||
|
||||
public void AddMessage(IMessage message)
|
||||
{
|
||||
if (_messageList.Contains(message)) return;
|
||||
_messageList.Add(message);
|
||||
AddMessages(new [] {message});
|
||||
}
|
||||
|
||||
public void AddMessages(IEnumerable<IMessage> messages)
|
||||
{
|
||||
var newMessages = new List<IMessage>();
|
||||
foreach (var message in messages)
|
||||
{
|
||||
if (_messageList.Contains(message)) continue;
|
||||
_messageList.Add(message);
|
||||
newMessages.Add(message);
|
||||
}
|
||||
if (newMessages.Any())
|
||||
RaiseCollectionChangedEvent(NotifyCollectionChangedAction.Add, newMessages);
|
||||
}
|
||||
|
||||
public void AddExceptionMessage(string message, Exception ex, MessageClass msgClass = MessageClass.ErrorMsg, bool logOnly = true)
|
||||
@@ -47,9 +59,9 @@ namespace mRemoteNG.Messages
|
||||
|
||||
public event NotifyCollectionChangedEventHandler CollectionChanged;
|
||||
|
||||
private void RaiseCollectionChangedEvent(object sender, NotifyCollectionChangedEventArgs args)
|
||||
private void RaiseCollectionChangedEvent(NotifyCollectionChangedAction action, IList items)
|
||||
{
|
||||
CollectionChanged?.Invoke(this, args);
|
||||
CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(action, items));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user