Skip to content

Commit b741586

Browse files
authored
Merge pull request #131 from Code52/tidy-up-message-merger
tidy up message merger
2 parents 6a38925 + a716d0c commit b741586

File tree

7 files changed

+22
-45
lines changed

7 files changed

+22
-45
lines changed

src/Carnac.Logic/Carnac.Logic.csproj

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@
7878
<ItemGroup>
7979
<Compile Include="Enums\NotificationPlacement.cs" />
8080
<Compile Include="IConcurrencyService.cs" />
81-
<Compile Include="IMessageMerger.cs" />
8281
<Compile Include="IMessageProvider.cs" />
8382
<Compile Include="Internal\FixedQueue.cs" />
8483
<Compile Include="IKeyProvider.cs" />
@@ -92,7 +91,6 @@
9291
<Compile Include="KeyMonitor\InterceptKeys.cs" />
9392
<Compile Include="KeyMonitor\KeyDirection.cs" />
9493
<Compile Include="KeysController.cs" />
95-
<Compile Include="MessageMerger.cs" />
9694
<Compile Include="Models\Processinfo.cs" />
9795
<Compile Include="ShortcutAccumulator.cs" />
9896
<Compile Include="KeyPressDefinition.cs" />

src/Carnac.Logic/IMessageMerger.cs

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/Carnac.Logic/MessageMerger.cs

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/Carnac.Logic/MessageProvider.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,11 @@ public class MessageProvider : IMessageProvider
99
readonly IShortcutProvider shortcutProvider;
1010
readonly IKeyProvider keyProvider;
1111
readonly PopupSettings settings;
12-
readonly IMessageMerger messageMerger;
1312

14-
public MessageProvider(IShortcutProvider shortcutProvider, IKeyProvider keyProvider, PopupSettings settings, IMessageMerger messageMerger)
13+
public MessageProvider(IShortcutProvider shortcutProvider, IKeyProvider keyProvider, PopupSettings settings)
1514
{
1615
this.shortcutProvider = shortcutProvider;
1716
this.keyProvider = keyProvider;
18-
this.messageMerger = messageMerger;
1917
this.settings = settings;
2018
}
2119

@@ -38,7 +36,7 @@ public IObservable<Message> GetMessageStream()
3836
.Scan(new ShortcutAccumulator(), (acc, key) => acc.ProcessKey(shortcutProvider, key))
3937
.Where(c => c.HasCompletedValue)
4038
.SelectMany(c => c.GetMessages())
41-
.Scan(new Message(), (acc, key) => messageMerger.MergeIfNeeded(acc, key))
39+
.Scan(new Message(), (acc, key) => Message.MergeIfNeeded(acc, key))
4240
.Where(m => !settings.DetectShortcutsOnly || m.IsShortcut);
4341
}
4442
}

src/Carnac.Logic/Models/Message.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,29 @@ private Message(Message initial, bool isDeleting)
9191
public DateTime LastMessage { get { return lastMessage; } }
9292

9393
public bool IsDeleting { get { return isDeleting; } }
94-
95-
94+
9695
public Message Merge(Message other)
9796
{
9897
return new Message(this, other);
9998
}
10099

100+
static readonly TimeSpan OneSecond = TimeSpan.FromSeconds(1);
101+
102+
public static Message MergeIfNeeded(Message previousMessage, Message newMessage)
103+
{
104+
return ShouldCreateNewMessage(previousMessage, newMessage)
105+
? newMessage
106+
: previousMessage.Merge(newMessage);
107+
}
108+
109+
static bool ShouldCreateNewMessage(Message previous, Message current)
110+
{
111+
return previous.ProcessName != current.ProcessName ||
112+
current.LastMessage.Subtract(previous.LastMessage) > OneSecond ||
113+
!previous.CanBeMerged ||
114+
!current.CanBeMerged;
115+
}
116+
101117
public Message FadeOut()
102118
{
103119
return new Message(this, true);

src/Carnac.Tests/MessageProviderFacts.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ MessageProvider CreateMessageProvider(IObservable<InterceptKeyEventArgs> keysStr
3232
var desktopLockEventService = Substitute.For<IDesktopLockEventService>();
3333
desktopLockEventService.GetSessionSwitchStream().Returns(Observable.Never<SessionSwitchEventArgs>());
3434
var keyProvider = new KeyProvider(source, new PasswordModeService(), desktopLockEventService);
35-
return new MessageProvider(shortcutProvider, keyProvider, new PopupSettings(), new MessageMerger());
35+
return new MessageProvider(shortcutProvider, keyProvider, new PopupSettings());
3636
}
3737

3838
[Fact]

src/Carnac/App.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public App()
2222
var keyProvider = new KeyProvider(InterceptKeys.Current, new PasswordModeService(), new DesktopLockEventService());
2323
settingsProvider = new SettingsProvider(new RoamingAppDataStorage("Carnac"));
2424
settings = settingsProvider.GetSettings<PopupSettings>();
25-
messageProvider = new MessageProvider(new ShortcutProvider(), keyProvider, settings, new MessageMerger());
25+
messageProvider = new MessageProvider(new ShortcutProvider(), keyProvider, settings);
2626
}
2727

2828
protected override void OnStartup(StartupEventArgs e)

0 commit comments

Comments
 (0)