public SettingsService(IDefaultValueProvider defaultValueProvider, ApplicationDataContainers containers) { _defaultValueProvider = defaultValueProvider; _localSettings = containers.LocalSettings; _roamingSettings = containers.RoamingSettings; _themes = containers.Themes; _keyBindings = containers.KeyBindings; _shellProfiles = containers.ShellProfiles; _sshProfiles = containers.SshProfiles; foreach (var theme in _defaultValueProvider.GetPreInstalledThemes()) { if (GetTheme(theme.Id) == null) { _themes.WriteValueAsJson(theme.Id.ToString(), theme); } } foreach (var shellProfile in _defaultValueProvider.GetPreinstalledShellProfiles()) { if (GetShellProfile(shellProfile.Id) == null) { _shellProfiles.WriteValueAsJson(shellProfile.Id.ToString(), shellProfile); } } }
public void SaveTheme_ThemeIsCurrentTheme_InvokesCurrentThemeChangedEvent() { var theme = _fixture.Create <TerminalTheme>(); var defaultValueProvider = Mock.Of <IDefaultValueProvider>(); var themesContainer = new Mock <IApplicationDataContainer>(); var roamingSettings = new Mock <IApplicationDataContainer>(); var currentThemeId = (object)theme.Id; roamingSettings.Setup(x => x.TryGetValue(SettingsService.CurrentThemeKey, out currentThemeId)).Returns(true); var currentThemeChangedEventInvoked = false; var applicationDataContainers = new ApplicationDataContainers { Themes = themesContainer.Object, KeyBindings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), RoamingSettings = roamingSettings.Object, ShellProfiles = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider, applicationDataContainers); settingsService.CurrentThemeChanged += (s, e) => currentThemeChangedEventInvoked = true; settingsService.SaveTheme(theme); currentThemeChangedEventInvoked.Should().BeTrue(); }
public void GetDefaultShellProfileId_ValueDoesNotExistInRoamingSettings_ReturnsDefaultShellProfileIdFromDefaultValueProvider() { var defaultValueProvider = new Mock <IDefaultValueProvider>(); var defaultShellProfileId = _fixture.Create <Guid>(); defaultValueProvider.Setup(x => x.GetDefaultShellProfileId()).Returns(defaultShellProfileId); var localSettings = new Mock <IApplicationDataContainer>(); var currentDefaultShellProfileId = (object)_fixture.Create <Guid>(); localSettings.Setup(x => x.TryGetValue(SettingsService.DefaultShellProfileKey, out currentDefaultShellProfileId)).Returns(false); var applicationDataContainers = new ApplicationDataContainers { LocalSettings = localSettings.Object, KeyBindings = Mock.Of <IApplicationDataContainer>(), RoamingSettings = Mock.Of <IApplicationDataContainer>(), ShellProfiles = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider.Object, applicationDataContainers); var result = settingsService.GetDefaultShellProfileId(); result.Should().Be(defaultShellProfileId); defaultValueProvider.Verify(x => x.GetDefaultShellProfileId(), Times.Once); localSettings.Verify(x => x.TryGetValue(SettingsService.DefaultShellProfileKey, out currentDefaultShellProfileId), Times.Once); }
public void SaveKeyBindings_Default_InvokesKeyBindingsChangedEvent() { var command = _fixture.Create <Command>(); var keyBindings = _fixture.Create <Collection <KeyBinding> >(); var defaultValueProvider = Mock.Of <IDefaultValueProvider>(); var keyBindingsContainer = new Mock <IApplicationDataContainer>(); var keyBindingsChangedEventInvoked = false; var applicationDataContainers = new ApplicationDataContainers { KeyBindings = keyBindingsContainer.Object, RoamingSettings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>(), ShellProfiles = Mock.Of <IApplicationDataContainer>(), SshProfiles = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider, applicationDataContainers); WeakReferenceMessenger.Default.Register <KeyBindingsChangedMessage>(this, (r, m) => keyBindingsChangedEventInvoked = true); settingsService.SaveKeyBindings(command.ToString(), keyBindings); keyBindingsChangedEventInvoked.Should().BeTrue(); }
public void GetKeyBindings_KeyBindingsInKeyBindingsContainer_ReturnsKeyBindingsFromKeyBindingsContainer() { var commands = _fixture.CreateMany <Command>(5); var defaultValueProvider = Mock.Of <IDefaultValueProvider>(); var keyBindingsContainer = new Mock <IApplicationDataContainer>(); foreach (var command in commands) { keyBindingsContainer.Setup(x => x.ReadValueFromJson <Collection <KeyBinding> >(command.ToString(), null)).Returns(new Collection <KeyBinding> { }); } var applicationDataContainers = new ApplicationDataContainers { KeyBindings = keyBindingsContainer.Object, RoamingSettings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>(), ShellProfiles = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider, applicationDataContainers); var result = settingsService.GetCommandKeyBindings(); foreach (var command in commands) { keyBindingsContainer.Verify(x => x.ReadValueFromJson <Collection <KeyBinding> >(command.ToString(), null), Times.Once); } }
public void Constructor_Default_WritesAllPreinstalledShellProfilesInShellProfilesContainer() { var shellProfiles = _fixture.CreateMany <ShellProfile>(3); var defaultValueProvider = new Mock <IDefaultValueProvider>(); defaultValueProvider.Setup(x => x.GetPreinstalledShellProfiles()).Returns(shellProfiles); var shellProfilesContainer = new Mock <IApplicationDataContainer>(); var applicationDataContainers = new ApplicationDataContainers { ShellProfiles = shellProfilesContainer.Object, SshProfiles = Mock.Of <IApplicationDataContainer>(), KeyBindings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), RoamingSettings = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>() }; new SettingsService(defaultValueProvider.Object, applicationDataContainers); defaultValueProvider.Verify(x => x.GetPreinstalledShellProfiles(), Times.Once); foreach (var shellProfile in shellProfiles) { shellProfilesContainer.Verify(x => x.WriteValueAsJson(shellProfile.Id.ToString(), shellProfile), Times.Once); } }
public void GetCurrentTheme_ThemeNotFound_CurrentThemeIdGetsResetToDefault() { var currentThemeId = (object)_fixture.Create <Guid>(); var defaultTheme = _fixture.Create <TerminalTheme>(); var defaultValueProvider = new Mock <IDefaultValueProvider>(); defaultValueProvider.Setup(x => x.GetDefaultThemeId()).Returns(defaultTheme.Id); var themesContainer = new Mock <IApplicationDataContainer>(); var roamingSettings = new Mock <IApplicationDataContainer>(); var applicationDataContainers = new ApplicationDataContainers { ShellProfiles = Mock.Of <IApplicationDataContainer>(), KeyBindings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), RoamingSettings = roamingSettings.Object, Themes = themesContainer.Object }; themesContainer.Setup(x => x.ReadValueFromJson(currentThemeId.ToString(), default(TerminalTheme))).Returns(value: null); themesContainer.Setup(x => x.ReadValueFromJson(defaultTheme.Id.ToString(), default(TerminalTheme))).Returns(defaultTheme); roamingSettings.Setup(x => x.TryGetValue(SettingsService.CurrentThemeKey, out currentThemeId)).Returns(true); var settingsService = new SettingsService(defaultValueProvider.Object, applicationDataContainers); var result = settingsService.GetCurrentTheme(); result.Should().Be(defaultTheme); roamingSettings.Verify(x => x.SetValue(SettingsService.CurrentThemeKey, defaultTheme.Id), Times.Once); }
public void GetKeyBindings_KeyBindingsNotInKeyBindingsContainer_ReturnsKeyBindingsFromDefaultValueProvider() { var keyBindings = _fixture.CreateMany <KeyBinding>(5); var defaultValueProvider = new Mock <IDefaultValueProvider>(); var keyBindingsContainer = new Mock <IApplicationDataContainer>(); foreach (var keyBinding in keyBindings) { keyBindingsContainer.Setup(x => x.ReadValueFromJson <Collection <KeyBinding> >(keyBinding.Command.ToString(), null)).Returns(new Collection <KeyBinding> { keyBinding }); } var applicationDataContainers = new ApplicationDataContainers { KeyBindings = keyBindingsContainer.Object, RoamingSettings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>(), ShellProfiles = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider.Object, applicationDataContainers); var result = settingsService.GetKeyBindings(); foreach (Command command in Enum.GetValues(typeof(Command))) { if (keyBindings.Select(x => x.Command).Contains(command)) { continue; } defaultValueProvider.Verify(x => x.GetDefaultKeyBindings(command), Times.Once); } }
public App() { _mainViewModels = new List <MainViewModel>(); InitializeComponent(); UnhandledException += OnUnhandledException; var applicationDataContainers = new ApplicationDataContainers { LocalSettings = new ApplicationDataContainerAdapter(ApplicationData.Current.LocalSettings), RoamingSettings = new ApplicationDataContainerAdapter(ApplicationData.Current.RoamingSettings), KeyBindings = new ApplicationDataContainerAdapter(ApplicationData.Current.RoamingSettings.CreateContainer(Constants.KeyBindingsContainerName, ApplicationDataCreateDisposition.Always)), ShellProfiles = new ApplicationDataContainerAdapter(ApplicationData.Current.LocalSettings.CreateContainer(Constants.ShellProfilesContainerName, ApplicationDataCreateDisposition.Always)), Themes = new ApplicationDataContainerAdapter(ApplicationData.Current.RoamingSettings.CreateContainer(Constants.ThemesContainerName, ApplicationDataCreateDisposition.Always)) }; var builder = new ContainerBuilder(); builder.RegisterType <SettingsService>().As <ISettingsService>().SingleInstance(); builder.RegisterType <DefaultValueProvider>().As <IDefaultValueProvider>().SingleInstance(); builder.RegisterType <TrayProcessCommunicationService>().As <ITrayProcessCommunicationService>().SingleInstance(); builder.RegisterType <DialogService>().As <IDialogService>().SingleInstance(); builder.RegisterType <KeyboardCommandService>().As <IKeyboardCommandService>().InstancePerDependency(); builder.RegisterType <NotificationService>().As <INotificationService>().InstancePerDependency(); builder.RegisterType <UpdateService>().As <IUpdateService>().InstancePerDependency(); builder.RegisterType <MainViewModel>().InstancePerDependency(); builder.RegisterType <SettingsViewModel>().InstancePerDependency(); builder.RegisterType <ThemeParserFactory>().As <IThemeParserFactory>().SingleInstance(); builder.RegisterType <ITermThemeParser>().As <IThemeParser>().SingleInstance(); builder.RegisterType <FluentTerminalThemeParser>().As <IThemeParser>().SingleInstance(); builder.RegisterType <ClipboardService>().As <IClipboardService>().SingleInstance(); builder.RegisterType <FileSystemService>().As <IFileSystemService>().SingleInstance(); builder.RegisterType <SystemFontService>().As <ISystemFontService>().SingleInstance(); builder.RegisterType <ShellProfileSelectionDialog>().As <IShellProfileSelectionDialog>().InstancePerDependency(); builder.RegisterType <CreateKeyBindingDialog>().As <ICreateKeyBindingDialog>().InstancePerDependency(); builder.RegisterType <InputDialog>().As <IInputDialog>().InstancePerDependency(); builder.RegisterType <MessageDialogAdapter>().As <IMessageDialog>().InstancePerDependency(); builder.RegisterType <ApplicationViewAdapter>().As <IApplicationView>().InstancePerDependency(); builder.RegisterType <DispatcherTimerAdapter>().As <IDispatcherTimer>().InstancePerDependency(); builder.RegisterType <StartupTaskService>().As <IStartupTaskService>().SingleInstance(); builder.RegisterInstance(applicationDataContainers); _container = builder.Build(); _settingsService = _container.Resolve <ISettingsService>(); _settingsService.ApplicationSettingsChanged += OnApplicationSettingsChanged; _trayProcessCommunicationService = _container.Resolve <ITrayProcessCommunicationService>(); _applicationSettings = _settingsService.GetApplicationSettings(); _commandLineParser = new Parser(settings => { settings.CaseSensitive = false; settings.CaseInsensitiveEnumValues = true; }); }
public static void Main(string[] args) { if (!Mutex.TryOpenExisting(MutexName, out Mutex mutex)) { mutex = new Mutex(false, MutexName); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); var applicationDataContainers = new ApplicationDataContainers { LocalSettings = new ApplicationDataContainerAdapter(ApplicationData.Current.LocalSettings), RoamingSettings = new ApplicationDataContainerAdapter(ApplicationData.Current.RoamingSettings), KeyBindings = new ApplicationDataContainerAdapter(ApplicationData.Current.RoamingSettings.CreateContainer(Constants.KeyBindingsContainerName, ApplicationDataCreateDisposition.Always)), ShellProfiles = new ApplicationDataContainerAdapter(ApplicationData.Current.LocalSettings.CreateContainer(Constants.ShellProfilesContainerName, ApplicationDataCreateDisposition.Always)), Themes = new ApplicationDataContainerAdapter(ApplicationData.Current.RoamingSettings.CreateContainer(Constants.ThemesContainerName, ApplicationDataCreateDisposition.Always)) }; var containerBuilder = new ContainerBuilder(); containerBuilder.RegisterInstance(applicationDataContainers); containerBuilder.RegisterType <NotificationService>().As <INotificationService>().InstancePerDependency(); containerBuilder.RegisterType <TerminalsManager>().SingleInstance(); containerBuilder.RegisterType <ToggleWindowService>().SingleInstance(); containerBuilder.RegisterType <HotKeyManager>().SingleInstance(); containerBuilder.RegisterType <SystemTrayApplicationContext>().SingleInstance(); containerBuilder.RegisterType <AppCommunicationService>().SingleInstance(); containerBuilder.RegisterType <DefaultValueProvider>().As <IDefaultValueProvider>(); containerBuilder.RegisterType <SettingsService>().As <ISettingsService>(); containerBuilder.RegisterType <UpdateService>().As <IUpdateService>(); containerBuilder.RegisterInstance(Dispatcher.CurrentDispatcher).SingleInstance(); var container = containerBuilder.Build(); var appCommunicationService = container.Resolve <AppCommunicationService>(); if (args.Length > 0 && args[2] == "appLaunched") { appCommunicationService.StartAppServiceConnection(); } Task.Run(() => container.Resolve <IUpdateService>().CheckForUpdate()); Application.Run(container.Resolve <SystemTrayApplicationContext>()); mutex.Close(); } else { var eventWaitHandle = EventWaitHandle.OpenExisting(AppCommunicationService.EventWaitHandleName, System.Security.AccessControl.EventWaitHandleRights.Modify); eventWaitHandle.Set(); } }
public void SaveCurrentThemeId_Default_SetsValueOnRoamingSettings() { var currentThemeId = _fixture.Create <Guid>(); var defaultValueProvider = Mock.Of <IDefaultValueProvider>(); var roamingSettings = new Mock <IApplicationDataContainer>(); var applicationDataContainers = new ApplicationDataContainers { RoamingSettings = roamingSettings.Object, KeyBindings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), ShellProfiles = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider, applicationDataContainers); settingsService.SaveCurrentThemeId(currentThemeId); roamingSettings.Verify(x => x.SetValue(SettingsService.CurrentThemeKey, currentThemeId), Times.Once); }
public void DeleteShellProfile_Default_CallsDeleteOnShellProfilesContainer() { var shellProfileId = _fixture.Create <Guid>(); var defaultValueProvider = Mock.Of <IDefaultValueProvider>(); var shellProfilesContainer = new Mock <IApplicationDataContainer>(); var applicationDataContainers = new ApplicationDataContainers { ShellProfiles = shellProfilesContainer.Object, KeyBindings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), RoamingSettings = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider, applicationDataContainers); settingsService.DeleteShellProfile(shellProfileId); shellProfilesContainer.Verify(x => x.Delete(shellProfileId.ToString()), Times.Once); }
public SshInfoDialog(ISettingsService settingsService, IApplicationView applicationView, IFileSystemService fileSystemService, ITrayProcessCommunicationService trayProcessCommunicationService, ApplicationDataContainers containers) { _settingsService = settingsService; _applicationView = applicationView; _fileSystemService = fileSystemService; _trayProcessCommunicationService = trayProcessCommunicationService; _historyContainer = containers.HistoryContainer; InitializeComponent(); PrimaryButtonText = I18N.Translate("OK"); SecondaryButtonText = I18N.Translate("Cancel"); var currentTheme = settingsService.GetCurrentTheme(); RequestedTheme = ContrastHelper.GetIdealThemeForBackgroundColor(currentTheme.Colors.Background); }
public void SaveShellProfile_Default_WritesToShellProfilesContainer() { var shellProfile = _fixture.Create <ShellProfile>(); var defaultValueProvider = Mock.Of <IDefaultValueProvider>(); var shellProfilesContainer = new Mock <IApplicationDataContainer>(); var applicationDataContainers = new ApplicationDataContainers { ShellProfiles = shellProfilesContainer.Object, KeyBindings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), RoamingSettings = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider, applicationDataContainers); settingsService.SaveShellProfile(shellProfile); shellProfilesContainer.Verify(x => x.WriteValueAsJson(shellProfile.Id.ToString(), shellProfile), Times.Once); }
public void SaveApplicationSettings_Default_WritesToRoamingSettings() { var applicationSettings = _fixture.Create <ApplicationSettings>(); var defaultValueProvider = Mock.Of <IDefaultValueProvider>(); var roamingSettings = new Mock <IApplicationDataContainer>(); var applicationDataContainers = new ApplicationDataContainers { RoamingSettings = roamingSettings.Object, KeyBindings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>(), ShellProfiles = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider, applicationDataContainers); settingsService.SaveApplicationSettings(applicationSettings); roamingSettings.Verify(x => x.WriteValueAsJson(nameof(ApplicationSettings), applicationSettings), Times.Once); }
public void SaveKeyBindings_Default_WritesToKeyBindingsContainer() { var command = _fixture.Create <Command>(); var keyBindings = _fixture.Create <ICollection <KeyBinding> >(); var defaultValueProvider = Mock.Of <IDefaultValueProvider>(); var keyBindingsContainer = new Mock <IApplicationDataContainer>(); var applicationDataContainers = new ApplicationDataContainers { KeyBindings = keyBindingsContainer.Object, RoamingSettings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>(), ShellProfiles = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider, applicationDataContainers); settingsService.SaveKeyBindings(command.ToString(), keyBindings); keyBindingsContainer.Verify(x => x.WriteValueAsJson(command.ToString(), keyBindings), Times.Once); }
public void ResetKeyBindings_Default_InvokesKeyBindingsChangedEvent() { var defaultValueProvider = Mock.Of <IDefaultValueProvider>(); var keyBindingsContainer = new Mock <IApplicationDataContainer>(); var keyBindingsChangedEventInvoked = false; var applicationDataContainers = new ApplicationDataContainers { KeyBindings = keyBindingsContainer.Object, RoamingSettings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>(), ShellProfiles = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider, applicationDataContainers); settingsService.KeyBindingsChanged += (s, e) => keyBindingsChangedEventInvoked = true; settingsService.ResetKeyBindings(); keyBindingsChangedEventInvoked.Should().BeTrue(); }
public void GetTheme_UnknownThemeId_ReturnsNull() { var themeId = _fixture.Create <Guid>(); var defaultValueProvider = Mock.Of <IDefaultValueProvider>(); var themesContainer = new Mock <IApplicationDataContainer>(); themesContainer.Setup(x => x.ReadValueFromJson(themeId.ToString(), default(TerminalTheme))).Returns(value: null); var applicationDataContainers = new ApplicationDataContainers { Themes = themesContainer.Object, KeyBindings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), RoamingSettings = Mock.Of <IApplicationDataContainer>(), ShellProfiles = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider, applicationDataContainers); var result = settingsService.GetTheme(themeId); result.Should().BeNull(); themesContainer.Verify(x => x.ReadValueFromJson(themeId.ToString(), default(TerminalTheme)), Times.Once); }
public void ResetKeyBindings_Default_WritesToKeyBindingsContainerFromDefaultValueProvider() { var defaultValueProvider = new Mock <IDefaultValueProvider>(); var keyBindingsContainer = new Mock <IApplicationDataContainer>(); var applicationDataContainers = new ApplicationDataContainers { KeyBindings = keyBindingsContainer.Object, RoamingSettings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>(), ShellProfiles = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider.Object, applicationDataContainers); settingsService.ResetKeyBindings(); foreach (Command command in Enum.GetValues(typeof(Command))) { keyBindingsContainer.Verify(x => x.WriteValueAsJson(command.ToString(), It.IsAny <ICollection <KeyBinding> >()), Times.Once); defaultValueProvider.Verify(x => x.GetDefaultKeyBindings(command), Times.Once); } }
public void GetKeyBindings_KeyBindingsNotInKeyBindingsContainer_ReturnsKeyBindingsFromDefaultValueProvider() { var commands = _fixture.CreateMany <Command>(5); var defaultValueProvider = new Mock <IDefaultValueProvider>(); var keyBindingsContainer = new Mock <IApplicationDataContainer>(); var applicationDataContainers = new ApplicationDataContainers { KeyBindings = keyBindingsContainer.Object, RoamingSettings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>(), ShellProfiles = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider.Object, applicationDataContainers); var result = settingsService.GetCommandKeyBindings(); foreach (Command command in Enum.GetValues(typeof(Command))) { defaultValueProvider.Verify(x => x.GetDefaultKeyBindings(command), Times.Once); } }
public void GetShellProfiles_Default_CallsGetAllOnShellProfilesContainer() { var shellProfiles = _fixture.CreateMany <ShellProfile>(3); var defaultValueProvider = Mock.Of <IDefaultValueProvider>(); var shellProfilesContainer = new Mock <IApplicationDataContainer>(); shellProfilesContainer.Setup(x => x.GetAll()).Returns(shellProfiles.Select(JsonConvert.SerializeObject)); var applicationDataContainers = new ApplicationDataContainers { ShellProfiles = shellProfilesContainer.Object, KeyBindings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), RoamingSettings = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider, applicationDataContainers); var result = settingsService.GetShellProfiles(); result.Should().BeEquivalentTo(shellProfiles); shellProfilesContainer.Verify(x => x.GetAll(), Times.Once); }
public void GetApplicationSettings_Default_ReturnsApplicationSettingsFromRoamingSettings() { var applicationSettings = _fixture.Create <ApplicationSettings>(); var defaultValueProvider = Mock.Of <IDefaultValueProvider>(); var roamingSettings = new Mock <IApplicationDataContainer>(); roamingSettings.Setup(x => x.ReadValueFromJson(nameof(ApplicationSettings), It.IsAny <ApplicationSettings>())).Returns(applicationSettings); var applicationDataContainers = new ApplicationDataContainers { RoamingSettings = roamingSettings.Object, KeyBindings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>(), ShellProfiles = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider, applicationDataContainers); var result = settingsService.GetApplicationSettings(); result.Should().BeEquivalentTo(applicationSettings); roamingSettings.Verify(x => x.ReadValueFromJson(nameof(ApplicationSettings), It.IsAny <ApplicationSettings>()), Times.Once); }
public void SaveApplicationSettings_Default_InvokesApplicationSettingsChangedEvent() { var applicationSettings = _fixture.Create <ApplicationSettings>(); var defaultValueProvider = Mock.Of <IDefaultValueProvider>(); var roamingSettings = new Mock <IApplicationDataContainer>(); var applicationSettingsChangedEventInvoked = false; var applicationDataContainers = new ApplicationDataContainers { RoamingSettings = roamingSettings.Object, KeyBindings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>(), ShellProfiles = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider, applicationDataContainers); settingsService.ApplicationSettingsChanged += (s, e) => applicationSettingsChangedEventInvoked = true; settingsService.SaveApplicationSettings(applicationSettings); applicationSettingsChangedEventInvoked.Should().BeTrue(); }
public void GetCurrentThemeId_ValueExistsInRoamingSettings_ReturnsCurrentThemeId() { var defaultValueProvider = Mock.Of <IDefaultValueProvider>(); var roamingSettings = new Mock <IApplicationDataContainer>(); var currentThemeId = (object)_fixture.Create <Guid>(); roamingSettings.Setup(x => x.TryGetValue(SettingsService.CurrentThemeKey, out currentThemeId)).Returns(true); var applicationDataContainers = new ApplicationDataContainers { RoamingSettings = roamingSettings.Object, KeyBindings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), ShellProfiles = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider, applicationDataContainers); var result = settingsService.GetCurrentThemeId(); result.Should().Be((Guid)currentThemeId); roamingSettings.Verify(x => x.TryGetValue(SettingsService.CurrentThemeKey, out currentThemeId), Times.Once); }
public void SaveTerminalOptions_Default_InvokesTerminalOptionsChangedEvent() { var terminalOptions = _fixture.Create <TerminalOptions>(); var defaultValueProvider = Mock.Of <IDefaultValueProvider>(); var roamingSettings = new Mock <IApplicationDataContainer>(); var terminalOptionsChangedEventInvoked = false; var applicationDataContainers = new ApplicationDataContainers { RoamingSettings = roamingSettings.Object, KeyBindings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>(), ShellProfiles = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider, applicationDataContainers); Messenger.Default.Register <TerminalOptionsChangedMessage>(this, message => terminalOptionsChangedEventInvoked = true); settingsService.SaveTerminalOptions(terminalOptions); terminalOptionsChangedEventInvoked.Should().BeTrue(); }
public void SaveApplicationSettings_Default_InvokesApplicationSettingsChangedEvent() { var applicationSettings = _fixture.Create <ApplicationSettings>(); var defaultValueProvider = Mock.Of <IDefaultValueProvider>(); var roamingSettings = new Mock <IApplicationDataContainer>(); var applicationSettingsChangedEventInvoked = false; var applicationDataContainers = new ApplicationDataContainers { RoamingSettings = roamingSettings.Object, KeyBindings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>(), ShellProfiles = Mock.Of <IApplicationDataContainer>(), SshProfiles = Mock.Of <IApplicationDataContainer>() }; var settingsService = new SettingsService(defaultValueProvider, applicationDataContainers); WeakReferenceMessenger.Default.Register <ApplicationSettingsChangedMessage>(this, (r, m) => applicationSettingsChangedEventInvoked = true); settingsService.SaveApplicationSettings(applicationSettings); applicationSettingsChangedEventInvoked.Should().BeTrue(); }
public void SaveCurrentThemeId_Default_InvokesCurrentThemeChangedEvent() { var currentThemeId = _fixture.Create <Guid>(); var defaultValueProvider = Mock.Of <IDefaultValueProvider>(); var roamingSettings = new Mock <IApplicationDataContainer>(); var applicationDataContainers = new ApplicationDataContainers { RoamingSettings = roamingSettings.Object, KeyBindings = Mock.Of <IApplicationDataContainer>(), LocalSettings = Mock.Of <IApplicationDataContainer>(), ShellProfiles = Mock.Of <IApplicationDataContainer>(), SshProfiles = Mock.Of <IApplicationDataContainer>(), Themes = Mock.Of <IApplicationDataContainer>() }; var currentThemeChangedEventInvoked = false; var settingsService = new SettingsService(defaultValueProvider, applicationDataContainers); Messenger.Default.Register <CurrentThemeChangedMessage>(this, message => currentThemeChangedEventInvoked = true); settingsService.SaveCurrentThemeId(currentThemeId); currentThemeChangedEventInvoked.Should().BeTrue(); }
public SettingsViewModel(ISettingsService settingsService, IDefaultValueProvider defaultValueProvider, IDialogService dialogService, ITrayProcessCommunicationService trayProcessCommunicationService, IThemeParserFactory themeParserFactory, ISystemFontService systemFontService, IFileSystemService fileSystemService, IStartupTaskService startupTaskService, IApplicationView applicationView, IApplicationLanguageService applicationLanguageService, ApplicationDataContainers containers) { KeyBindings = new KeyBindingsPageViewModel(settingsService, dialogService, trayProcessCommunicationService); General = new GeneralPageViewModel(settingsService, dialogService, defaultValueProvider, startupTaskService, applicationLanguageService, trayProcessCommunicationService, fileSystemService); Profiles = new ProfilesPageViewModel(settingsService, dialogService, defaultValueProvider, fileSystemService, applicationView); Terminal = new TerminalPageViewModel(settingsService, dialogService, defaultValueProvider, systemFontService); Themes = new ThemesPageViewModel(settingsService, dialogService, defaultValueProvider, themeParserFactory, fileSystemService); Mouse = new MousePageViewModel(settingsService, dialogService, defaultValueProvider); SshProfiles = new SshProfilesPageViewModel(settingsService, dialogService, fileSystemService, applicationView, trayProcessCommunicationService, containers.HistoryContainer); }
public App() { _mainViewModels = new List <MainViewModel>(); InitializeComponent(); UnhandledException += OnUnhandledException; var applicationDataContainers = new ApplicationDataContainers { LocalSettings = new ApplicationDataContainerAdapter(ApplicationData.Current.LocalSettings), RoamingSettings = new ApplicationDataContainerAdapter(ApplicationData.Current.RoamingSettings), KeyBindings = new ApplicationDataContainerAdapter(ApplicationData.Current.RoamingSettings.CreateContainer(Constants.KeyBindingsContainerName, ApplicationDataCreateDisposition.Always)), ShellProfiles = new ApplicationDataContainerAdapter(ApplicationData.Current.LocalSettings.CreateContainer(Constants.ShellProfilesContainerName, ApplicationDataCreateDisposition.Always)), Themes = new ApplicationDataContainerAdapter(ApplicationData.Current.RoamingSettings.CreateContainer(Constants.ThemesContainerName, ApplicationDataCreateDisposition.Always)), SshProfiles = new ApplicationDataContainerAdapter(ApplicationData.Current.RoamingSettings.CreateContainer(Constants.SshProfilesContainerName, ApplicationDataCreateDisposition.Always)), HistoryContainer = new ApplicationDataContainerAdapter(ApplicationData.Current.RoamingSettings.CreateContainer(Constants.ExecutedCommandsContainerName, ApplicationDataCreateDisposition.Always)) }; var builder = new ContainerBuilder(); builder.RegisterType <SettingsService>().As <ISettingsService>().SingleInstance(); builder.RegisterType <DefaultValueProvider>().As <IDefaultValueProvider>().SingleInstance(); builder.RegisterType <TrayProcessCommunicationService>().As <ITrayProcessCommunicationService>().SingleInstance(); builder.RegisterType <DialogService>().As <IDialogService>().SingleInstance(); builder.RegisterType <KeyboardCommandService>().As <IKeyboardCommandService>().InstancePerDependency(); builder.RegisterType <NotificationService>().As <INotificationService>().InstancePerDependency(); builder.RegisterType <UpdateService>().As <IUpdateService>().InstancePerDependency(); builder.RegisterType <MainViewModel>().InstancePerDependency(); builder.RegisterType <SettingsViewModel>().InstancePerDependency(); builder.RegisterType <ThemeParserFactory>().As <IThemeParserFactory>().SingleInstance(); builder.RegisterType <ITermThemeParser>().As <IThemeParser>().SingleInstance(); builder.RegisterType <FluentTerminalThemeParser>().As <IThemeParser>().SingleInstance(); builder.RegisterType <ClipboardService>().As <IClipboardService>().SingleInstance(); builder.RegisterType <FileSystemService>().As <IFileSystemService>().SingleInstance(); builder.RegisterType <SystemFontService>().As <ISystemFontService>().SingleInstance(); builder.RegisterType <ShellProfileSelectionDialog>().As <IShellProfileSelectionDialog>().InstancePerDependency(); builder.RegisterType <SshProfileSelectionDialog>().As <ISshProfileSelectionDialog>().InstancePerDependency(); builder.RegisterType <CreateKeyBindingDialog>().As <ICreateKeyBindingDialog>().InstancePerDependency(); builder.RegisterType <InputDialog>().As <IInputDialog>().InstancePerDependency(); builder.RegisterType <AboutDialog>().As <IAboutDialog>().InstancePerDependency(); builder.RegisterType <MessageDialogAdapter>().As <IMessageDialog>().InstancePerDependency(); builder.RegisterType <SshInfoDialog>().As <ISshConnectionInfoDialog>().InstancePerDependency(); builder.RegisterType <CustomCommandDialog>().As <ICustomCommandDialog>().InstancePerDependency(); builder.RegisterType <ApplicationViewAdapter>().As <IApplicationView>().InstancePerDependency(); builder.RegisterType <DispatcherTimerAdapter>().As <IDispatcherTimer>().InstancePerDependency(); builder.RegisterType <StartupTaskService>().As <IStartupTaskService>().SingleInstance(); builder.RegisterType <ApplicationLanguageService>().As <IApplicationLanguageService>().SingleInstance(); builder.RegisterType <ShellProfileMigrationService>().As <IShellProfileMigrationService>().SingleInstance(); builder.RegisterInstance(applicationDataContainers); _container = builder.Build(); Messenger.Default.Register <ApplicationSettingsChangedMessage>(this, OnApplicationSettingsChanged); _settingsService = _container.Resolve <ISettingsService>(); var shellProfileMigrationService = _container.Resolve <IShellProfileMigrationService>(); foreach (var profile in _settingsService.GetShellProfiles()) { shellProfileMigrationService.Migrate(profile); _settingsService.SaveShellProfile(profile); } foreach (var profile in _settingsService.GetSshProfiles()) { shellProfileMigrationService.Migrate(profile); _settingsService.SaveSshProfile(profile); } _trayProcessCommunicationService = _container.Resolve <ITrayProcessCommunicationService>(); _dialogService = _container.Resolve <IDialogService>(); _applicationSettings = _settingsService.GetApplicationSettings(); JsonConvert.DefaultSettings = () => { var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver(), }; settings.Converters.Add(new StringEnumConverter(typeof(CamelCaseNamingStrategy))); return(settings); }; _commandLineParser = new Parser(settings => { settings.CaseSensitive = false; settings.CaseInsensitiveEnumValues = true; }); }
public static void Main(string[] args) { if (!Mutex.TryOpenExisting(MutexName, out Mutex mutex)) { mutex = new Mutex(false, MutexName); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); JsonConvert.DefaultSettings = () => { var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver(), }; settings.Converters.Add(new StringEnumConverter(typeof(CamelCaseNamingStrategy))); return(settings); }; var applicationDataContainers = new ApplicationDataContainers { LocalSettings = new ApplicationDataContainerAdapter(ApplicationData.Current.LocalSettings), RoamingSettings = new ApplicationDataContainerAdapter(ApplicationData.Current.RoamingSettings), KeyBindings = new ApplicationDataContainerAdapter(ApplicationData.Current.RoamingSettings.CreateContainer(Constants.KeyBindingsContainerName, ApplicationDataCreateDisposition.Always)), ShellProfiles = new ApplicationDataContainerAdapter(ApplicationData.Current.LocalSettings.CreateContainer(Constants.ShellProfilesContainerName, ApplicationDataCreateDisposition.Always)), Themes = new ApplicationDataContainerAdapter(ApplicationData.Current.RoamingSettings.CreateContainer(Constants.ThemesContainerName, ApplicationDataCreateDisposition.Always)) }; var containerBuilder = new ContainerBuilder(); containerBuilder.RegisterInstance(applicationDataContainers); containerBuilder.RegisterType <NotificationService>().As <INotificationService>().InstancePerDependency(); containerBuilder.RegisterType <TerminalsManager>().SingleInstance(); containerBuilder.RegisterType <ToggleWindowService>().SingleInstance(); containerBuilder.RegisterInstance(new HotKeyManager()).SingleInstance(); containerBuilder.RegisterType <SystemTrayApplicationContext>().SingleInstance(); containerBuilder.RegisterType <AppCommunicationService>().SingleInstance(); containerBuilder.RegisterType <DefaultValueProvider>().As <IDefaultValueProvider>(); containerBuilder.RegisterType <SettingsService>().As <ISettingsService>(); containerBuilder.RegisterType <UpdateService>().As <IUpdateService>(); containerBuilder.RegisterInstance(Dispatcher.CurrentDispatcher).SingleInstance(); var container = containerBuilder.Build(); Task.Run(async() => { var logDirectory = await ApplicationData.Current.LocalCacheFolder.CreateFolderAsync("Logs", CreationCollisionOption.OpenIfExists).AsTask().ConfigureAwait(true); var logFile = Path.Combine(logDirectory.Path, "fluentterminal.systemtray.log"); var configFile = await logDirectory.CreateFileAsync("config.json", CreationCollisionOption.OpenIfExists).AsTask().ConfigureAwait(true); var configContent = await FileIO.ReadTextAsync(configFile).AsTask().ConfigureAwait(true); var config = JsonConvert.DeserializeObject <Logger.Configuration>(configContent) ?? new Logger.Configuration(); Logger.Instance.Initialize(logFile, config); AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; }); var appCommunicationService = container.Resolve <AppCommunicationService>(); if (args.Length > 0 && args[2] == "appLaunched") { appCommunicationService.StartAppServiceConnection(); } Task.Run(() => container.Resolve <IUpdateService>().CheckForUpdate()); var settingsService = container.Resolve <ISettingsService>(); if (settingsService.GetApplicationSettings().EnableTrayIcon) { Application.Run(container.Resolve <SystemTrayApplicationContext>()); } else { Application.Run(); } mutex.Close(); } else { var eventWaitHandle = EventWaitHandle.OpenExisting(AppCommunicationService.EventWaitHandleName, System.Security.AccessControl.EventWaitHandleRights.Modify); eventWaitHandle.Set(); } }