From fb37faa7bcae23b92e72ef8c45da58519ed29819 Mon Sep 17 00:00:00 2001 From: Ben Wallis Date: Tue, 27 Nov 2018 20:40:00 +0000 Subject: [PATCH] * Moved item filter script directory handling code to new ItemFilterScriptDirectorySerivce class * Fixed issue #94 where the user was prompted to select their Path of Exile data directory after every upgrade. * The default Path of Exile data directory is now automatically chosen on first run if it exists * Moved CommonOpenFileDialog usage to new DialogService class * Changed Custom Sounds code in ItemFilterScriptViewModel to use ItemFilterScriptDirectory instead of DefaultPathOfExileDirectory * Moved Custom Sounds code from constructor to Initialise method to prevent the files being enumerated before the directory is set during startup --- Filtration.Tests/Filtration.Tests.csproj | 2 + .../TestItemFilterScriptRepository.cs | 43 --------- .../TestItemFilterScriptDirectoryService.cs | 95 +++++++++++++++++++ Filtration/Filtration.csproj | 2 + .../ItemFilterScriptRepository.cs | 14 +-- Filtration/Services/Bootstrapper.cs | 7 +- Filtration/Services/DialogService.cs | 25 +++++ .../Services/ItemFilterPersistenceService.cs | 10 -- .../ItemFilterScriptDirectoryService.cs | 78 +++++++++++++++ .../ViewModels/ItemFilterScriptViewModel.cs | 36 ++++--- Filtration/ViewModels/MainWindowViewModel.cs | 32 ++----- .../ViewModels/SettingsPageViewModel.cs | 34 ++----- .../WindsorInstallers/ServicesInstaller.cs | 10 ++ 13 files changed, 249 insertions(+), 139 deletions(-) create mode 100644 Filtration.Tests/Services/TestItemFilterScriptDirectoryService.cs create mode 100644 Filtration/Services/DialogService.cs create mode 100644 Filtration/Services/ItemFilterScriptDirectoryService.cs diff --git a/Filtration.Tests/Filtration.Tests.csproj b/Filtration.Tests/Filtration.Tests.csproj index 3eaad95..ff854ef 100644 --- a/Filtration.Tests/Filtration.Tests.csproj +++ b/Filtration.Tests/Filtration.Tests.csproj @@ -41,6 +41,7 @@ ..\packages\FluentAssertions.4.19.2\lib\net45\FluentAssertions.Core.dll + ..\packages\Moq.4.5.30\lib\net45\Moq.dll @@ -66,6 +67,7 @@ + diff --git a/Filtration.Tests/Repositories/TestItemFilterScriptRepository.cs b/Filtration.Tests/Repositories/TestItemFilterScriptRepository.cs index 12a911e..cbb31b2 100644 --- a/Filtration.Tests/Repositories/TestItemFilterScriptRepository.cs +++ b/Filtration.Tests/Repositories/TestItemFilterScriptRepository.cs @@ -63,49 +63,6 @@ namespace Filtration.Tests.Repositories result.ShouldThrow(); } - [Test] - public void SetItemFilterScriptDirectory_CallsPersistenceServiceSetItemFilterScriptDirectory() - { - // Arrange - var testInputPath = "C:\\Test\\Path"; - - var mockPersistenceService = new Mock(); - mockPersistenceService.Setup(p => p.SetItemFilterScriptDirectory(testInputPath)).Verifiable(); - - var mockItemFilterScriptViewModelFactory = new Mock(); - - var repository = CreateItemFilterScriptRepository(itemFilterPersistenceService: mockPersistenceService.Object, - itemFilterScriptViewModelFactory: mockItemFilterScriptViewModelFactory.Object); - - // Act - repository.SetItemFilterScriptDirectory(testInputPath); - - // Assert - mockPersistenceService.Verify(); - } - - [Test] - public void GetItemFilterScriptDirectory_ReturnsItemFilterScriptDirectoryFromPersistenceService() - { - // Arrange - var testInputPath = "C:\\Test\\Path"; - - var mockPersistenceService = new Mock(); - mockPersistenceService.SetupGet(p => p.ItemFilterScriptDirectory).Returns(testInputPath).Verifiable(); - - var mockItemFilterScriptViewModelFactory = new Mock(); - - var repository = CreateItemFilterScriptRepository(itemFilterPersistenceService: mockPersistenceService.Object, - itemFilterScriptViewModelFactory: mockItemFilterScriptViewModelFactory.Object); - - // Act - string result = repository.GetItemFilterScriptDirectory(); - - // Assert - mockPersistenceService.Verify(); - Assert.AreEqual(result, testInputPath); - } - [Test] public void NewScript_ReturnsScriptFromViewModelFactory() { diff --git a/Filtration.Tests/Services/TestItemFilterScriptDirectoryService.cs b/Filtration.Tests/Services/TestItemFilterScriptDirectoryService.cs new file mode 100644 index 0000000..d799a90 --- /dev/null +++ b/Filtration.Tests/Services/TestItemFilterScriptDirectoryService.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Filtration.Common.Services; +using Filtration.Services; +using Microsoft.WindowsAPICodePack.Dialogs; +using Moq; +using NUnit.Framework; + +namespace Filtration.Tests.Services +{ + [TestFixture] + public class TestItemFilterScriptDirectoryService + { + + [Test] + public void PromptForFilterScriptDirectoryIfRequired_ItemFilterScriptDirectoryNotNull_DoesNotSetItemFilterScriptDirectory() + { + //Arrange + var mockItemFilterPersistenceService = new Mock(); + mockItemFilterPersistenceService.Setup(i => i.ItemFilterScriptDirectory) + .Returns("testdir"); + + var service = CreateItemFilterScriptDirectoryService(itemFilterPersistenceService: mockItemFilterPersistenceService.Object); + + //Act + service.PromptForFilterScriptDirectoryIfRequired(); + + //Assert + mockItemFilterPersistenceService.Verify(i => i.SetItemFilterScriptDirectory(It.IsAny()), Times.Never); + } + + [Test] + public void PromptForFilterScriptDirectoryIfRequired_NotSet_DefaultDirectoryExists_SetsDirectoryToDefaultDirectory() + { + //Arrange + var mockItemFilterPersistenceService = new Mock(); + var testInputDefaultDirectory = "testdefaultdirectory"; + mockItemFilterPersistenceService.Setup(i => i.DefaultPathOfExileDirectory()) + .Returns(testInputDefaultDirectory); + + var mockFileSystemService = new Mock(); + mockFileSystemService.Setup(f => f.DirectoryExists(testInputDefaultDirectory)) + .Returns(true); + + var service = CreateItemFilterScriptDirectoryService(fileSystemService: mockFileSystemService.Object, + itemFilterPersistenceService: mockItemFilterPersistenceService.Object); + + //Act + service.PromptForFilterScriptDirectoryIfRequired(); + + //Assert + mockItemFilterPersistenceService.Verify(i => i.SetItemFilterScriptDirectory(testInputDefaultDirectory)); + } + + [Test, Timeout(1000)] + public void PromptForFilterScriptDirectoryIfRequired_NotSet_DefaultDirectoryDoesNotExist_SetsDirectoryToUserSelected() + { + //Arrange + var testInputUserSelectedDirectory = "blah"; + + var mockItemFilterPersistenceService = new Mock(); + var mockDialogService = new Mock(); + + mockDialogService.Setup(d => d.ShowFolderPickerDialog(It.IsAny(), out testInputUserSelectedDirectory)) + .Returns(CommonFileDialogResult.Ok); + + mockItemFilterPersistenceService.Setup(i => i.SetItemFilterScriptDirectory(testInputUserSelectedDirectory)) + .Callback(() => mockItemFilterPersistenceService.Setup(f => f.ItemFilterScriptDirectory) + .Returns(testInputUserSelectedDirectory)); + + var service = CreateItemFilterScriptDirectoryService(dialogService: mockDialogService.Object, + itemFilterPersistenceService: mockItemFilterPersistenceService.Object); + + //Act + service.PromptForFilterScriptDirectoryIfRequired(); + + //Assert + mockItemFilterPersistenceService.Verify(i => i.SetItemFilterScriptDirectory(testInputUserSelectedDirectory)); + } + + private ItemFilterScriptDirectoryService CreateItemFilterScriptDirectoryService(IDialogService dialogService = null, + IFileSystemService fileSystemService = null, + IItemFilterPersistenceService itemFilterPersistenceService = null, + IMessageBoxService messageBoxService = null) + { + return new ItemFilterScriptDirectoryService(dialogService ?? new Mock().Object, + fileSystemService ?? new Mock().Object, + itemFilterPersistenceService ?? new Mock().Object, + messageBoxService ?? new Mock().Object); + } + } +} diff --git a/Filtration/Filtration.csproj b/Filtration/Filtration.csproj index c23e09c..daac6b1 100644 --- a/Filtration/Filtration.csproj +++ b/Filtration/Filtration.csproj @@ -209,8 +209,10 @@ + + diff --git a/Filtration/Repositories/ItemFilterScriptRepository.cs b/Filtration/Repositories/ItemFilterScriptRepository.cs index 2348b2a..057df46 100644 --- a/Filtration/Repositories/ItemFilterScriptRepository.cs +++ b/Filtration/Repositories/ItemFilterScriptRepository.cs @@ -1,5 +1,4 @@ using System.Threading.Tasks; -using Filtration.ObjectModel; using Filtration.ObjectModel.Factories; using Filtration.Services; using Filtration.ViewModels; @@ -11,8 +10,6 @@ namespace Filtration.Repositories { Task LoadScriptFromFileAsync(string path); IItemFilterScriptViewModel NewScript(); - string GetItemFilterScriptDirectory(); - void SetItemFilterScriptDirectory(string path); } internal class ItemFilterScriptRepository : IItemFilterScriptRepository @@ -48,15 +45,6 @@ namespace Filtration.Repositories return newViewModel; } - - public void SetItemFilterScriptDirectory(string path) - { - _itemFilterPersistenceService.SetItemFilterScriptDirectory(path); - } - - public string GetItemFilterScriptDirectory() - { - return _itemFilterPersistenceService.ItemFilterScriptDirectory; - } } } +; \ No newline at end of file diff --git a/Filtration/Services/Bootstrapper.cs b/Filtration/Services/Bootstrapper.cs index fbdf410..a969b05 100644 --- a/Filtration/Services/Bootstrapper.cs +++ b/Filtration/Services/Bootstrapper.cs @@ -15,14 +15,17 @@ namespace Filtration.Services { private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + private readonly IItemFilterScriptDirectoryService _itemFilterScriptDirectoryService; private readonly IMainWindow _mainWindow; private readonly ISettingsService _settingsService; private readonly IUpdateService _updateService; - public Bootstrapper(IMainWindow mainWindow, + public Bootstrapper(IItemFilterScriptDirectoryService itemFilterScriptDirectoryService, + IMainWindow mainWindow, ISettingsService settingsService, IUpdateService updateService) { + _itemFilterScriptDirectoryService = itemFilterScriptDirectoryService; _mainWindow = mainWindow; _settingsService = settingsService; _updateService = updateService; @@ -37,6 +40,8 @@ namespace Filtration.Services // with each update _settingsService.RestoreSettings(); + _itemFilterScriptDirectoryService.PromptForFilterScriptDirectoryIfRequired(); + _mainWindow.Show(); await _updateService.CheckForUpdatesAsync(); diff --git a/Filtration/Services/DialogService.cs b/Filtration/Services/DialogService.cs new file mode 100644 index 0000000..9531903 --- /dev/null +++ b/Filtration/Services/DialogService.cs @@ -0,0 +1,25 @@ +using Microsoft.WindowsAPICodePack.Dialogs; + +namespace Filtration.Services +{ + internal interface IDialogService + { + CommonFileDialogResult ShowFolderPickerDialog(string dialogTitle, out string folderName); + } + + internal sealed class DialogService : IDialogService + { + public CommonFileDialogResult ShowFolderPickerDialog(string dialogTitle, out string folderName) + { + using (var dialog = new CommonOpenFileDialog(dialogTitle)) + { + dialog.IsFolderPicker = true; + var result = dialog.ShowDialog(); + + folderName = result == CommonFileDialogResult.Ok ? dialog.FileName : string.Empty; + + return result; + } + } + } +} diff --git a/Filtration/Services/ItemFilterPersistenceService.cs b/Filtration/Services/ItemFilterPersistenceService.cs index 14cd9dc..5bb22fe 100644 --- a/Filtration/Services/ItemFilterPersistenceService.cs +++ b/Filtration/Services/ItemFilterPersistenceService.cs @@ -25,16 +25,6 @@ namespace Filtration.Services { _fileSystemService = fileSystemService; _itemFilterScriptTranslator = itemFilterScriptTranslator; - - if (string.IsNullOrEmpty(Settings.Default.DefaultFilterDirectory)) - { - ItemFilterScriptDirectory = DefaultPathOfExileDirectory(); - Settings.Default.DefaultFilterDirectory = ItemFilterScriptDirectory; - } - else - { - ItemFilterScriptDirectory = Settings.Default.DefaultFilterDirectory; - } } public string ItemFilterScriptDirectory { get; private set; } diff --git a/Filtration/Services/ItemFilterScriptDirectoryService.cs b/Filtration/Services/ItemFilterScriptDirectoryService.cs new file mode 100644 index 0000000..df4211f --- /dev/null +++ b/Filtration/Services/ItemFilterScriptDirectoryService.cs @@ -0,0 +1,78 @@ +using System.IO; +using System.Windows; +using Filtration.Common.Services; +using Microsoft.WindowsAPICodePack.Dialogs; + +namespace Filtration.Services +{ + internal interface IItemFilterScriptDirectoryService + { + string ItemFilterScriptDirectory { get; } + void PromptForFilterScriptDirectoryIfRequired(); + void SetItemFilterScriptDirectory(); + } + + internal sealed class ItemFilterScriptDirectoryService : IItemFilterScriptDirectoryService + { + private readonly IDialogService _dialogService; + private readonly IFileSystemService _fileSystemService; + private readonly IItemFilterPersistenceService _itemFilterPersistenceService; + private readonly IMessageBoxService _messageBoxService; + + public ItemFilterScriptDirectoryService(IDialogService dialogService, + IFileSystemService fileSystemService, + IItemFilterPersistenceService itemFilterPersistenceService, + IMessageBoxService messageBoxService) + { + _dialogService = dialogService; + _fileSystemService = fileSystemService; + _itemFilterPersistenceService = itemFilterPersistenceService; + _messageBoxService = messageBoxService; + } + + + public string ItemFilterScriptDirectory => _itemFilterPersistenceService.ItemFilterScriptDirectory; + + public void PromptForFilterScriptDirectoryIfRequired() + { + // If the directory is already set, do nothing + if (!string.IsNullOrEmpty(_itemFilterPersistenceService.ItemFilterScriptDirectory)) + { + return; + } + + // If the directory is not set but the default directory exists, set the directory to the default directory + if (_fileSystemService.DirectoryExists(_itemFilterPersistenceService.DefaultPathOfExileDirectory())) + { + _itemFilterPersistenceService.SetItemFilterScriptDirectory(_itemFilterPersistenceService.DefaultPathOfExileDirectory()); + return; + } + + // Otherwise, prompt the user to select the directory + _messageBoxService.Show("Data directory required", @"The Path of Exile user data directory was not found in the default location (Documents\My Games\Path of Exile), please select it manually.", MessageBoxButton.OK, MessageBoxImage.Information); + while (string.IsNullOrEmpty(_itemFilterPersistenceService.ItemFilterScriptDirectory)) + { + SetItemFilterScriptDirectory(); + } + } + + public void SetItemFilterScriptDirectory() + { + var result = _dialogService.ShowFolderPickerDialog(@"Select Path of Exile user data directory", out var filepath); + if (result != CommonFileDialogResult.Ok) + { + return; + } + + try + { + _itemFilterPersistenceService.SetItemFilterScriptDirectory(filepath); + } + catch (DirectoryNotFoundException) + { + _messageBoxService.Show("Error", "The entered Default Filter Directory is invalid or does not exist.", + MessageBoxButton.OK, MessageBoxImage.Exclamation); + } + } + } +} diff --git a/Filtration/ViewModels/ItemFilterScriptViewModel.cs b/Filtration/ViewModels/ItemFilterScriptViewModel.cs index 6cb4de4..f7f1b5d 100644 --- a/Filtration/ViewModels/ItemFilterScriptViewModel.cs +++ b/Filtration/ViewModels/ItemFilterScriptViewModel.cs @@ -6,7 +6,6 @@ using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; -using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows; using System.Windows.Data; @@ -16,7 +15,6 @@ using Filtration.Common.Services; using Filtration.Common.ViewModels; using Filtration.Interface; using Filtration.ObjectModel; -using Filtration.ObjectModel.BlockItemBaseTypes; using Filtration.ObjectModel.BlockItemTypes; using Filtration.ObjectModel.Commands; using Filtration.ObjectModel.Commands.ItemFilterScript; @@ -185,23 +183,6 @@ namespace Filtration.ViewModels icon.UriSource = new Uri("pack://application:,,,/Filtration;component/Resources/Icons/script_icon.png"); icon.EndInit(); IconSource = icon; - - _customSoundsAvailable = new ObservableCollection(); - - var poeFolderFiles = Directory.GetFiles(persistenceService.DefaultPathOfExileDirectory() + "\\").Where( - s => s.EndsWith(".mp3") - || s.EndsWith(".wav") - || s.EndsWith(".wma") - || s.EndsWith(".3gp") - || s.EndsWith(".aag") - || s.EndsWith(".m4a") - || s.EndsWith(".ogg") - ).OrderBy(f => f); - - foreach(var file in poeFolderFiles) - { - _customSoundsAvailable.Add(file.Replace(persistenceService.DefaultPathOfExileDirectory() + "\\", "")); - } } public void Initialise(IItemFilterScript itemFilterScript, bool newScript) @@ -226,6 +207,23 @@ namespace Filtration.ViewModels } } + _customSoundsAvailable = new ObservableCollection(); + + var poeFolderFiles = Directory.GetFiles(_persistenceService.ItemFilterScriptDirectory + "\\").Where( + s => s.EndsWith(".mp3") + || s.EndsWith(".wav") + || s.EndsWith(".wma") + || s.EndsWith(".3gp") + || s.EndsWith(".aag") + || s.EndsWith(".m4a") + || s.EndsWith(".ogg") + ).OrderBy(f => f); + + foreach (var file in poeFolderFiles) + { + _customSoundsAvailable.Add(file.Replace(_persistenceService.ItemFilterScriptDirectory + "\\", "")); + } + Script.ItemFilterBlocks.CollectionChanged += ItemFilterBlocksOnCollectionChanged; _customSoundsAvailable.CollectionChanged += CustomSoundsAvailableOnCollectionChanged; diff --git a/Filtration/ViewModels/MainWindowViewModel.cs b/Filtration/ViewModels/MainWindowViewModel.cs index 8c0fd30..c549ae9 100644 --- a/Filtration/ViewModels/MainWindowViewModel.cs +++ b/Filtration/ViewModels/MainWindowViewModel.cs @@ -6,7 +6,6 @@ using System.Linq; using System.Reflection; using System.Threading.Tasks; using System.Windows; -using System.Windows.Forms; using System.Windows.Media; using System.Windows.Media.Imaging; using Filtration.Common.Services; @@ -45,6 +44,7 @@ namespace Filtration.ViewModels { private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + private readonly IItemFilterScriptDirectoryService _itemFilterScriptDirectoryService; private readonly IItemFilterScriptRepository _itemFilterScriptRepository; private readonly IItemFilterScriptTranslator _itemFilterScriptTranslator; private readonly IReplaceColorsViewModel _replaceColorsViewModel; @@ -58,7 +58,8 @@ namespace Filtration.ViewModels private int _windowWidth; private int _windowHeight; - public MainWindowViewModel(IItemFilterScriptRepository itemFilterScriptRepository, + public MainWindowViewModel(IItemFilterScriptDirectoryService itemFilterScriptDirectoryService, + IItemFilterScriptRepository itemFilterScriptRepository, IItemFilterScriptTranslator itemFilterScriptTranslator, IReplaceColorsViewModel replaceColorsViewModel, IAvalonDockWorkspaceViewModel avalonDockWorkspaceViewModel, @@ -69,6 +70,7 @@ namespace Filtration.ViewModels IClipboardService clipboardService, IUpdateViewModel updateViewModel) { + _itemFilterScriptDirectoryService = itemFilterScriptDirectoryService; _itemFilterScriptRepository = itemFilterScriptRepository; _itemFilterScriptTranslator = itemFilterScriptTranslator; _replaceColorsViewModel = replaceColorsViewModel; @@ -144,11 +146,6 @@ namespace Filtration.ViewModels ClearFiltersCommand = new RelayCommand(OnClearFiltersCommand, () => ActiveDocumentIsScript); ClearStylesCommand = new RelayCommand(OnClearStylesCommand, () => ActiveDocumentIsScript); - if (string.IsNullOrEmpty(_itemFilterScriptRepository.GetItemFilterScriptDirectory())) - { - SetItemFilterScriptDirectory(); - } - var icon = new BitmapImage(); icon.BeginInit(); icon.UriSource = new Uri("pack://application:,,,/Filtration;component/Resources/Icons/filtration_icon.png"); @@ -547,7 +544,7 @@ namespace Filtration.ViewModels var openFileDialog = new OpenFileDialog { Filter = "Filter Files (*.filter)|*.filter|All Files (*.*)|*.*", - InitialDirectory = _itemFilterScriptRepository.GetItemFilterScriptDirectory() + InitialDirectory = _itemFilterScriptDirectoryService.ItemFilterScriptDirectory }; return openFileDialog.ShowDialog() != true ? string.Empty : openFileDialog.FileName; @@ -558,27 +555,12 @@ namespace Filtration.ViewModels var openFileDialog = new OpenFileDialog { Filter = "Filter Theme Files (*.filtertheme)|*.filtertheme|All Files (*.*)|*.*", - InitialDirectory = _itemFilterScriptRepository.GetItemFilterScriptDirectory() - }; + InitialDirectory = _itemFilterScriptDirectoryService.ItemFilterScriptDirectory + }; return openFileDialog.ShowDialog() != true ? string.Empty : openFileDialog.FileName; } - private void SetItemFilterScriptDirectory() - { - var dlg = new FolderBrowserDialog - { - Description = @"Select your Path of Exile data directory, usually in Documents\My Games", - ShowNewFolderButton = false - }; - var result = dlg.ShowDialog(); - - if (result == DialogResult.OK) - { - _itemFilterScriptRepository.SetItemFilterScriptDirectory(dlg.SelectedPath); - } - } - private async Task OnSaveDocumentCommandAsync() { await ((IEditableDocument)_avalonDockWorkspaceViewModel.ActiveDocument).SaveAsync(); diff --git a/Filtration/ViewModels/SettingsPageViewModel.cs b/Filtration/ViewModels/SettingsPageViewModel.cs index 53102b5..a2600fa 100644 --- a/Filtration/ViewModels/SettingsPageViewModel.cs +++ b/Filtration/ViewModels/SettingsPageViewModel.cs @@ -1,11 +1,7 @@ -using System.IO; -using System.Windows; -using Filtration.Common.Services; -using Filtration.Properties; +using Filtration.Properties; using Filtration.Services; using GalaSoft.MvvmLight; using GalaSoft.MvvmLight.CommandWpf; -using Microsoft.WindowsAPICodePack.Dialogs; namespace Filtration.ViewModels { @@ -20,13 +16,11 @@ namespace Filtration.ViewModels internal class SettingsPageViewModel : ViewModelBase, ISettingsPageViewModel { - private readonly IItemFilterPersistenceService _itemFilterPersistenceService; - private readonly IMessageBoxService _messageBoxService; + private readonly IItemFilterScriptDirectoryService _itemFilterScriptDirectoryService; - public SettingsPageViewModel(IItemFilterPersistenceService itemFilterPersistenceService, IMessageBoxService messageBoxService) + public SettingsPageViewModel(IItemFilterScriptDirectoryService itemFilterScriptDirectoryService) { - _itemFilterPersistenceService = itemFilterPersistenceService; - _messageBoxService = messageBoxService; + _itemFilterScriptDirectoryService = itemFilterScriptDirectoryService; SetItemFilterScriptDirectoryCommand = new RelayCommand(OnSetItemFilterScriptDirectoryCommand); } @@ -48,24 +42,8 @@ namespace Filtration.ViewModels private void OnSetItemFilterScriptDirectoryCommand() { - using (var dialog = new CommonOpenFileDialog()) - { - dialog.IsFolderPicker = true; - var result = dialog.ShowDialog(); - if (result == CommonFileDialogResult.Ok) - { - try - { - _itemFilterPersistenceService.SetItemFilterScriptDirectory(dialog.FileName); - RaisePropertyChanged(nameof(DefaultFilterDirectory)); - } - catch (DirectoryNotFoundException) - { - _messageBoxService.Show("Error", "The entered Default Filter Directory is invalid or does not exist.", - MessageBoxButton.OK, MessageBoxImage.Exclamation); - } - } - } + _itemFilterScriptDirectoryService.SetItemFilterScriptDirectory(); + RaisePropertyChanged(nameof(DefaultFilterDirectory)); } } } diff --git a/Filtration/WindsorInstallers/ServicesInstaller.cs b/Filtration/WindsorInstallers/ServicesInstaller.cs index f736c1e..8bf6258 100644 --- a/Filtration/WindsorInstallers/ServicesInstaller.cs +++ b/Filtration/WindsorInstallers/ServicesInstaller.cs @@ -14,6 +14,11 @@ namespace Filtration.WindsorInstallers .ImplementedBy() .LifeStyle.Singleton); + container.Register( + Component.For() + .ImplementedBy() + .LifeStyle.Singleton); + container.Register( Component.For() .ImplementedBy() @@ -43,6 +48,11 @@ namespace Filtration.WindsorInstallers Component.For() .ImplementedBy() .LifeStyle.Singleton); + + container.Register( + Component.For() + .ImplementedBy() + .LifeStyle.Singleton); } } }