Skip to content

Commit

Permalink
Added option to start SystemTray on windows startup
Browse files Browse the repository at this point in the history
  • Loading branch information
felixse committed Jul 31, 2018
1 parent f0e8f01 commit bfad59f
Show file tree
Hide file tree
Showing 19 changed files with 286 additions and 85 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,30 +43,13 @@ public async Task CreateTerminal_Default_ReturnsResponseFromAppServiceConnection
var terminalSize = _fixture.Create<TerminalSize>();
var shellProfile = _fixture.Create<ShellProfile>();
var trayProcessCommunicationService = new TrayProcessCommunicationService(settingsService.Object);
await trayProcessCommunicationService.Initialize(appServiceConnection.Object);
trayProcessCommunicationService.Initialize(appServiceConnection.Object);

var result = await trayProcessCommunicationService.CreateTerminal(terminalSize, shellProfile);

result.Should().BeEquivalentTo(response);
}

[Fact]
public async Task Initialize_Default_SendsSetToggleWindowKeyBindingsRequest()
{
var settingsService = new Mock<ISettingsService>();
var keyBindings = _fixture.CreateMany<KeyBinding>(3);
settingsService.Setup(x => x.GetKeyBindings()).Returns(new Dictionary<Command, ICollection<KeyBinding>>
{
[Command.ToggleWindow] = keyBindings.ToList()
});
var appServiceConnection = new Mock<IAppServiceConnection>();
var trayProcessCommunicationService = new TrayProcessCommunicationService(settingsService.Object);

await trayProcessCommunicationService.Initialize(appServiceConnection.Object);

appServiceConnection.Verify(x => x.SendMessageAsync(It.Is<IDictionary<string, string>>(d => d[MessageKeys.Type] == nameof(SetToggleWindowKeyBindingsRequest))), Times.Once);
}

[Fact]
public async Task ResizeTerminal_Default_SendsResizeTerminalRequest()
{
Expand All @@ -80,7 +63,7 @@ public async Task ResizeTerminal_Default_SendsResizeTerminalRequest()
});
var appServiceConnection = new Mock<IAppServiceConnection>();
var trayProcessCommunicationService = new TrayProcessCommunicationService(settingsService.Object);
await trayProcessCommunicationService.Initialize(appServiceConnection.Object);
trayProcessCommunicationService.Initialize(appServiceConnection.Object);

await trayProcessCommunicationService.ResizeTerminal(terminalId, terminalSize);

Expand All @@ -100,7 +83,7 @@ public async Task WriteText_Default_SendsWriteTextRequest()
});
var appServiceConnection = new Mock<IAppServiceConnection>();
var trayProcessCommunicationService = new TrayProcessCommunicationService(settingsService.Object);
await trayProcessCommunicationService.Initialize(appServiceConnection.Object);
trayProcessCommunicationService.Initialize(appServiceConnection.Object);

await trayProcessCommunicationService.WriteText(terminalId, text);

Expand All @@ -119,15 +102,15 @@ public async Task CloseTerminal_Default_SendsTerminalExitedRequest()
});
var appServiceConnection = new Mock<IAppServiceConnection>();
var trayProcessCommunicationService = new TrayProcessCommunicationService(settingsService.Object);
await trayProcessCommunicationService.Initialize(appServiceConnection.Object);
trayProcessCommunicationService.Initialize(appServiceConnection.Object);

await trayProcessCommunicationService.CloseTerminal(terminalId);

appServiceConnection.Verify(x => x.SendMessageAsync(It.Is<IDictionary<string, string>>(d => d[MessageKeys.Type] == nameof(TerminalExitedRequest))), Times.Once);
}

[Fact]
public async Task OnMessageReceived_TerminalExitedRequest_InvokesTerminalExitedEvent()
public void OnMessageReceived_TerminalExitedRequest_InvokesTerminalExitedEvent()
{
var terminalId = _fixture.Create<int>();
var receivedTerminalId = 0;
Expand All @@ -149,7 +132,7 @@ public async Task OnMessageReceived_TerminalExitedRequest_InvokesTerminalExitedE
});
var trayProcessCommunicationService = new TrayProcessCommunicationService(settingsService.Object);
var appServiceConnection = new Mock<IAppServiceConnection>();
await trayProcessCommunicationService.Initialize(appServiceConnection.Object);
trayProcessCommunicationService.Initialize(appServiceConnection.Object);
trayProcessCommunicationService.TerminalExited += (s, e) =>
{
terminalExitedEventCalled = true;
Expand All @@ -163,7 +146,7 @@ public async Task OnMessageReceived_TerminalExitedRequest_InvokesTerminalExitedE
}

[Fact]
public async Task OnMessageReceived_DisplayTerminalOutputRequest_InvokesCorrectOutputHandler()
public void OnMessageReceived_DisplayTerminalOutputRequest_InvokesCorrectOutputHandler()
{
var terminalId = _fixture.Create<int>();
var output = _fixture.Create<string>();
Expand All @@ -186,7 +169,7 @@ public async Task OnMessageReceived_DisplayTerminalOutputRequest_InvokesCorrectO
});
var trayProcessCommunicationService = new TrayProcessCommunicationService(settingsService.Object);
var appServiceConnection = new Mock<IAppServiceConnection>();
await trayProcessCommunicationService.Initialize(appServiceConnection.Object);
trayProcessCommunicationService.Initialize(appServiceConnection.Object);
trayProcessCommunicationService.SubscribeForTerminalOutput(terminalId, o =>
{
receivedOutput = o;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
using FluentTerminal.App.Services;
using Newtonsoft.Json;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using Windows.Storage;

namespace FluentTerminal.App.Adapters
namespace FluentTerminal.App.Services.Adapters
{
public class ApplicationDataContainerAdapter : IApplicationDataContainer
{
Expand Down Expand Up @@ -55,4 +54,4 @@ public void WriteValueAsJson<T>(string name, T value)
_applicationDataContainer.Values[name] = JsonConvert.SerializeObject(value);
}
}
}
}
9 changes: 9 additions & 0 deletions FluentTerminal.App.Services/Constants.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace FluentTerminal.App.Services
{
public static class Constants
{
public const string ThemesContainerName = "Themes";
public const string KeyBindingsContainerName = "KeyBindings";
public const string ShellProfilesContainerName = "ShellProfiles";
}
}
11 changes: 11 additions & 0 deletions FluentTerminal.App.Services/FluentTerminal.App.Services.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,15 @@
<ProjectReference Include="..\FluentTerminal.Models\FluentTerminal.Models.csproj" />
</ItemGroup>

<ItemGroup>
<Reference Include="Windows.Foundation.FoundationContract">
<HintPath>$(MSBuildProgramFiles32)\Windows Kits\10\References\10.0.16299.0\Windows.Foundation.FoundationContract\3.0.0.0\Windows.Foundation.FoundationContract.winmd</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="Windows.Foundation.UniversalApiContract">
<HintPath>$(MSBuildProgramFiles32)\Windows Kits\10\References\10.0.16299.0\Windows.Foundation.UniversalApiContract\5.0.0.0\Windows.Foundation.UniversalApiContract.winmd</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>

</Project>
12 changes: 12 additions & 0 deletions FluentTerminal.App.Services/IStartupTaskService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using FluentTerminal.Models.Enums;
using System.Threading.Tasks;

namespace FluentTerminal.App.Services
{
public interface IStartupTaskService
{
Task DisableStartupTask();
Task<StartupTaskStatus> EnableStartupTask();
Task<StartupTaskStatus> GetStatus();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public interface ITrayProcessCommunicationService
{
event EventHandler<int> TerminalExited;

Task Initialize(IAppServiceConnection appServiceConnection);
void Initialize(IAppServiceConnection appServiceConnection);

Task<CreateTerminalResponse> CreateTerminal(TerminalSize size, ShellProfile shellProfile);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,10 @@ public async Task<CreateTerminalResponse> CreateTerminal(TerminalSize size, Shel
return JsonConvert.DeserializeObject<CreateTerminalResponse>(responseMessage[MessageKeys.Content]);
}

public Task Initialize(IAppServiceConnection appServiceConnection)
public void Initialize(IAppServiceConnection appServiceConnection)
{
_appServiceConnection = appServiceConnection;
_appServiceConnection.MessageReceived += OnMessageReceived;
return UpdateToggleWindowKeyBindings();
}

private void OnMessageReceived(object sender, IDictionary<string, string> e)
Expand Down
Loading

0 comments on commit bfad59f

Please sign in to comment.