* 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
This commit is contained in:
		
							parent
							
								
									63236769aa
								
							
						
					
					
						commit
						fb37faa7bc
					
				@ -41,6 +41,7 @@
 | 
				
			|||||||
    <Reference Include="FluentAssertions.Core, Version=4.19.2.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
 | 
					    <Reference Include="FluentAssertions.Core, Version=4.19.2.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
 | 
				
			||||||
      <HintPath>..\packages\FluentAssertions.4.19.2\lib\net45\FluentAssertions.Core.dll</HintPath>
 | 
					      <HintPath>..\packages\FluentAssertions.4.19.2\lib\net45\FluentAssertions.Core.dll</HintPath>
 | 
				
			||||||
    </Reference>
 | 
					    </Reference>
 | 
				
			||||||
 | 
					    <Reference Include="Microsoft.WindowsAPICodePack.Shell, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null" />
 | 
				
			||||||
    <Reference Include="Moq, Version=4.5.30.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
 | 
					    <Reference Include="Moq, Version=4.5.30.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
 | 
				
			||||||
      <HintPath>..\packages\Moq.4.5.30\lib\net45\Moq.dll</HintPath>
 | 
					      <HintPath>..\packages\Moq.4.5.30\lib\net45\Moq.dll</HintPath>
 | 
				
			||||||
    </Reference>
 | 
					    </Reference>
 | 
				
			||||||
@ -66,6 +67,7 @@
 | 
				
			|||||||
    <Compile Include="Repositories\TestItemFilterScriptRepository.cs" />
 | 
					    <Compile Include="Repositories\TestItemFilterScriptRepository.cs" />
 | 
				
			||||||
    <Compile Include="Services\TestHTTPService.cs" />
 | 
					    <Compile Include="Services\TestHTTPService.cs" />
 | 
				
			||||||
    <Compile Include="Services\TestItemFilterPersistenceService.cs" />
 | 
					    <Compile Include="Services\TestItemFilterPersistenceService.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="Services\TestItemFilterScriptDirectoryService.cs" />
 | 
				
			||||||
    <Compile Include="Services\TestUpdateService.cs" />
 | 
					    <Compile Include="Services\TestUpdateService.cs" />
 | 
				
			||||||
  </ItemGroup>
 | 
					  </ItemGroup>
 | 
				
			||||||
  <ItemGroup>
 | 
					  <ItemGroup>
 | 
				
			||||||
 | 
				
			|||||||
@ -63,49 +63,6 @@ namespace Filtration.Tests.Repositories
 | 
				
			|||||||
            result.ShouldThrow<IOException>();
 | 
					            result.ShouldThrow<IOException>();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Test]
 | 
					 | 
				
			||||||
        public void SetItemFilterScriptDirectory_CallsPersistenceServiceSetItemFilterScriptDirectory()
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            // Arrange
 | 
					 | 
				
			||||||
            var testInputPath = "C:\\Test\\Path";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            var mockPersistenceService = new Mock<IItemFilterPersistenceService>();
 | 
					 | 
				
			||||||
            mockPersistenceService.Setup(p => p.SetItemFilterScriptDirectory(testInputPath)).Verifiable();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            var mockItemFilterScriptViewModelFactory = new Mock<IItemFilterScriptViewModelFactory>();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            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<IItemFilterPersistenceService>();
 | 
					 | 
				
			||||||
            mockPersistenceService.SetupGet(p => p.ItemFilterScriptDirectory).Returns(testInputPath).Verifiable();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            var mockItemFilterScriptViewModelFactory = new Mock<IItemFilterScriptViewModelFactory>();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            var repository = CreateItemFilterScriptRepository(itemFilterPersistenceService: mockPersistenceService.Object,
 | 
					 | 
				
			||||||
                                                              itemFilterScriptViewModelFactory: mockItemFilterScriptViewModelFactory.Object);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // Act
 | 
					 | 
				
			||||||
            string result =  repository.GetItemFilterScriptDirectory();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // Assert
 | 
					 | 
				
			||||||
            mockPersistenceService.Verify();
 | 
					 | 
				
			||||||
            Assert.AreEqual(result, testInputPath);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
        public void NewScript_ReturnsScriptFromViewModelFactory()
 | 
					        public void NewScript_ReturnsScriptFromViewModelFactory()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
				
			|||||||
@ -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<IItemFilterPersistenceService>();
 | 
				
			||||||
 | 
					            mockItemFilterPersistenceService.Setup(i => i.ItemFilterScriptDirectory)
 | 
				
			||||||
 | 
					                                            .Returns("testdir");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var service = CreateItemFilterScriptDirectoryService(itemFilterPersistenceService: mockItemFilterPersistenceService.Object);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //Act
 | 
				
			||||||
 | 
					            service.PromptForFilterScriptDirectoryIfRequired();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //Assert
 | 
				
			||||||
 | 
					            mockItemFilterPersistenceService.Verify(i => i.SetItemFilterScriptDirectory(It.IsAny<string>()), Times.Never);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Test]
 | 
				
			||||||
 | 
					        public void PromptForFilterScriptDirectoryIfRequired_NotSet_DefaultDirectoryExists_SetsDirectoryToDefaultDirectory()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            //Arrange
 | 
				
			||||||
 | 
					            var mockItemFilterPersistenceService = new Mock<IItemFilterPersistenceService>();
 | 
				
			||||||
 | 
					            var testInputDefaultDirectory = "testdefaultdirectory";
 | 
				
			||||||
 | 
					            mockItemFilterPersistenceService.Setup(i => i.DefaultPathOfExileDirectory())
 | 
				
			||||||
 | 
					                                            .Returns(testInputDefaultDirectory);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var mockFileSystemService = new Mock<IFileSystemService>();
 | 
				
			||||||
 | 
					            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<IItemFilterPersistenceService>();
 | 
				
			||||||
 | 
					            var mockDialogService = new Mock<IDialogService>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            mockDialogService.Setup(d => d.ShowFolderPickerDialog(It.IsAny<string>(), 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<IDialogService>().Object,
 | 
				
			||||||
 | 
					                                                        fileSystemService ?? new Mock<IFileSystemService>().Object,
 | 
				
			||||||
 | 
					                                                        itemFilterPersistenceService ?? new Mock<IItemFilterPersistenceService>().Object,
 | 
				
			||||||
 | 
					                                                        messageBoxService ?? new Mock<IMessageBoxService>().Object);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -209,8 +209,10 @@
 | 
				
			|||||||
    <Compile Include="Repositories\ItemFilterScriptRepository.cs" />
 | 
					    <Compile Include="Repositories\ItemFilterScriptRepository.cs" />
 | 
				
			||||||
    <Compile Include="Services\Bootstrapper.cs" />
 | 
					    <Compile Include="Services\Bootstrapper.cs" />
 | 
				
			||||||
    <Compile Include="Services\ClipboardService.cs" />
 | 
					    <Compile Include="Services\ClipboardService.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="Services\DialogService.cs" />
 | 
				
			||||||
    <Compile Include="Services\HTTPService.cs" />
 | 
					    <Compile Include="Services\HTTPService.cs" />
 | 
				
			||||||
    <Compile Include="Services\ItemFilterPersistenceService.cs" />
 | 
					    <Compile Include="Services\ItemFilterPersistenceService.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="Services\ItemFilterScriptDirectoryService.cs" />
 | 
				
			||||||
    <Compile Include="Services\SettingsService.cs" />
 | 
					    <Compile Include="Services\SettingsService.cs" />
 | 
				
			||||||
    <Compile Include="Services\StaticDataService.cs" />
 | 
					    <Compile Include="Services\StaticDataService.cs" />
 | 
				
			||||||
    <Compile Include="Services\UpdateService.cs" />
 | 
					    <Compile Include="Services\UpdateService.cs" />
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,4 @@
 | 
				
			|||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
using Filtration.ObjectModel;
 | 
					 | 
				
			||||||
using Filtration.ObjectModel.Factories;
 | 
					using Filtration.ObjectModel.Factories;
 | 
				
			||||||
using Filtration.Services;
 | 
					using Filtration.Services;
 | 
				
			||||||
using Filtration.ViewModels;
 | 
					using Filtration.ViewModels;
 | 
				
			||||||
@ -11,8 +10,6 @@ namespace Filtration.Repositories
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        Task<IItemFilterScriptViewModel> LoadScriptFromFileAsync(string path);
 | 
					        Task<IItemFilterScriptViewModel> LoadScriptFromFileAsync(string path);
 | 
				
			||||||
        IItemFilterScriptViewModel NewScript();
 | 
					        IItemFilterScriptViewModel NewScript();
 | 
				
			||||||
        string GetItemFilterScriptDirectory();
 | 
					 | 
				
			||||||
        void SetItemFilterScriptDirectory(string path);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    internal class ItemFilterScriptRepository : IItemFilterScriptRepository
 | 
					    internal class ItemFilterScriptRepository : IItemFilterScriptRepository
 | 
				
			||||||
@ -48,15 +45,6 @@ namespace Filtration.Repositories
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            return newViewModel;
 | 
					            return newViewModel;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        public void SetItemFilterScriptDirectory(string path)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            _itemFilterPersistenceService.SetItemFilterScriptDirectory(path);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public string GetItemFilterScriptDirectory()
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            return _itemFilterPersistenceService.ItemFilterScriptDirectory;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					;
 | 
				
			||||||
@ -15,14 +15,17 @@ namespace Filtration.Services
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
 | 
					        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private readonly IItemFilterScriptDirectoryService _itemFilterScriptDirectoryService;
 | 
				
			||||||
        private readonly IMainWindow _mainWindow;
 | 
					        private readonly IMainWindow _mainWindow;
 | 
				
			||||||
        private readonly ISettingsService _settingsService;
 | 
					        private readonly ISettingsService _settingsService;
 | 
				
			||||||
        private readonly IUpdateService _updateService;
 | 
					        private readonly IUpdateService _updateService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public Bootstrapper(IMainWindow mainWindow,
 | 
					        public Bootstrapper(IItemFilterScriptDirectoryService itemFilterScriptDirectoryService,
 | 
				
			||||||
 | 
					                            IMainWindow mainWindow,
 | 
				
			||||||
                            ISettingsService settingsService,
 | 
					                            ISettingsService settingsService,
 | 
				
			||||||
                            IUpdateService updateService)
 | 
					                            IUpdateService updateService)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            _itemFilterScriptDirectoryService = itemFilterScriptDirectoryService;
 | 
				
			||||||
            _mainWindow = mainWindow;
 | 
					            _mainWindow = mainWindow;
 | 
				
			||||||
            _settingsService = settingsService;
 | 
					            _settingsService = settingsService;
 | 
				
			||||||
            _updateService = updateService;
 | 
					            _updateService = updateService;
 | 
				
			||||||
@ -37,6 +40,8 @@ namespace Filtration.Services
 | 
				
			|||||||
            // with each update
 | 
					            // with each update
 | 
				
			||||||
            _settingsService.RestoreSettings();
 | 
					            _settingsService.RestoreSettings();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            _itemFilterScriptDirectoryService.PromptForFilterScriptDirectoryIfRequired();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            _mainWindow.Show();
 | 
					            _mainWindow.Show();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            await _updateService.CheckForUpdatesAsync();
 | 
					            await _updateService.CheckForUpdatesAsync();
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										25
									
								
								Filtration/Services/DialogService.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								Filtration/Services/DialogService.cs
									
									
									
									
									
										Normal file
									
								
							@ -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;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -25,16 +25,6 @@ namespace Filtration.Services
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            _fileSystemService = fileSystemService;
 | 
					            _fileSystemService = fileSystemService;
 | 
				
			||||||
            _itemFilterScriptTranslator = itemFilterScriptTranslator;
 | 
					            _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; }
 | 
					        public string ItemFilterScriptDirectory { get; private set; }
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										78
									
								
								Filtration/Services/ItemFilterScriptDirectoryService.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								Filtration/Services/ItemFilterScriptDirectoryService.cs
									
									
									
									
									
										Normal file
									
								
							@ -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);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -6,7 +6,6 @@ using System.ComponentModel;
 | 
				
			|||||||
using System.Diagnostics;
 | 
					using System.Diagnostics;
 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Text.RegularExpressions;
 | 
					 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
using System.Windows;
 | 
					using System.Windows;
 | 
				
			||||||
using System.Windows.Data;
 | 
					using System.Windows.Data;
 | 
				
			||||||
@ -16,7 +15,6 @@ using Filtration.Common.Services;
 | 
				
			|||||||
using Filtration.Common.ViewModels;
 | 
					using Filtration.Common.ViewModels;
 | 
				
			||||||
using Filtration.Interface;
 | 
					using Filtration.Interface;
 | 
				
			||||||
using Filtration.ObjectModel;
 | 
					using Filtration.ObjectModel;
 | 
				
			||||||
using Filtration.ObjectModel.BlockItemBaseTypes;
 | 
					 | 
				
			||||||
using Filtration.ObjectModel.BlockItemTypes;
 | 
					using Filtration.ObjectModel.BlockItemTypes;
 | 
				
			||||||
using Filtration.ObjectModel.Commands;
 | 
					using Filtration.ObjectModel.Commands;
 | 
				
			||||||
using Filtration.ObjectModel.Commands.ItemFilterScript;
 | 
					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.UriSource = new Uri("pack://application:,,,/Filtration;component/Resources/Icons/script_icon.png");
 | 
				
			||||||
            icon.EndInit();
 | 
					            icon.EndInit();
 | 
				
			||||||
            IconSource = icon;
 | 
					            IconSource = icon;
 | 
				
			||||||
 | 
					 | 
				
			||||||
            _customSoundsAvailable = new ObservableCollection<string>();
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            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)
 | 
					        public void Initialise(IItemFilterScript itemFilterScript, bool newScript)
 | 
				
			||||||
@ -226,6 +207,23 @@ namespace Filtration.ViewModels
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
 | 
					            _customSoundsAvailable = new ObservableCollection<string>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            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;
 | 
					            Script.ItemFilterBlocks.CollectionChanged += ItemFilterBlocksOnCollectionChanged;
 | 
				
			||||||
            _customSoundsAvailable.CollectionChanged += CustomSoundsAvailableOnCollectionChanged;
 | 
					            _customSoundsAvailable.CollectionChanged += CustomSoundsAvailableOnCollectionChanged;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,6 @@ using System.Linq;
 | 
				
			|||||||
using System.Reflection;
 | 
					using System.Reflection;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
using System.Windows;
 | 
					using System.Windows;
 | 
				
			||||||
using System.Windows.Forms;
 | 
					 | 
				
			||||||
using System.Windows.Media;
 | 
					using System.Windows.Media;
 | 
				
			||||||
using System.Windows.Media.Imaging;
 | 
					using System.Windows.Media.Imaging;
 | 
				
			||||||
using Filtration.Common.Services;
 | 
					using Filtration.Common.Services;
 | 
				
			||||||
@ -45,6 +44,7 @@ namespace Filtration.ViewModels
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
 | 
					        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private readonly IItemFilterScriptDirectoryService _itemFilterScriptDirectoryService;
 | 
				
			||||||
        private readonly IItemFilterScriptRepository _itemFilterScriptRepository;
 | 
					        private readonly IItemFilterScriptRepository _itemFilterScriptRepository;
 | 
				
			||||||
        private readonly IItemFilterScriptTranslator _itemFilterScriptTranslator;
 | 
					        private readonly IItemFilterScriptTranslator _itemFilterScriptTranslator;
 | 
				
			||||||
        private readonly IReplaceColorsViewModel _replaceColorsViewModel;
 | 
					        private readonly IReplaceColorsViewModel _replaceColorsViewModel;
 | 
				
			||||||
@ -58,7 +58,8 @@ namespace Filtration.ViewModels
 | 
				
			|||||||
        private int _windowWidth;
 | 
					        private int _windowWidth;
 | 
				
			||||||
        private int _windowHeight;
 | 
					        private int _windowHeight;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public MainWindowViewModel(IItemFilterScriptRepository itemFilterScriptRepository,
 | 
					        public MainWindowViewModel(IItemFilterScriptDirectoryService itemFilterScriptDirectoryService,
 | 
				
			||||||
 | 
					                                   IItemFilterScriptRepository itemFilterScriptRepository,
 | 
				
			||||||
                                   IItemFilterScriptTranslator itemFilterScriptTranslator,
 | 
					                                   IItemFilterScriptTranslator itemFilterScriptTranslator,
 | 
				
			||||||
                                   IReplaceColorsViewModel replaceColorsViewModel,
 | 
					                                   IReplaceColorsViewModel replaceColorsViewModel,
 | 
				
			||||||
                                   IAvalonDockWorkspaceViewModel avalonDockWorkspaceViewModel,
 | 
					                                   IAvalonDockWorkspaceViewModel avalonDockWorkspaceViewModel,
 | 
				
			||||||
@ -69,6 +70,7 @@ namespace Filtration.ViewModels
 | 
				
			|||||||
                                   IClipboardService clipboardService,
 | 
					                                   IClipboardService clipboardService,
 | 
				
			||||||
                                   IUpdateViewModel updateViewModel)
 | 
					                                   IUpdateViewModel updateViewModel)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            _itemFilterScriptDirectoryService = itemFilterScriptDirectoryService;
 | 
				
			||||||
            _itemFilterScriptRepository = itemFilterScriptRepository;
 | 
					            _itemFilterScriptRepository = itemFilterScriptRepository;
 | 
				
			||||||
            _itemFilterScriptTranslator = itemFilterScriptTranslator;
 | 
					            _itemFilterScriptTranslator = itemFilterScriptTranslator;
 | 
				
			||||||
            _replaceColorsViewModel = replaceColorsViewModel;
 | 
					            _replaceColorsViewModel = replaceColorsViewModel;
 | 
				
			||||||
@ -144,11 +146,6 @@ namespace Filtration.ViewModels
 | 
				
			|||||||
            ClearFiltersCommand = new RelayCommand(OnClearFiltersCommand, () => ActiveDocumentIsScript);
 | 
					            ClearFiltersCommand = new RelayCommand(OnClearFiltersCommand, () => ActiveDocumentIsScript);
 | 
				
			||||||
            ClearStylesCommand = new RelayCommand(OnClearStylesCommand, () => ActiveDocumentIsScript);
 | 
					            ClearStylesCommand = new RelayCommand(OnClearStylesCommand, () => ActiveDocumentIsScript);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (string.IsNullOrEmpty(_itemFilterScriptRepository.GetItemFilterScriptDirectory()))
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                SetItemFilterScriptDirectory();
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            var icon = new BitmapImage();
 | 
					            var icon = new BitmapImage();
 | 
				
			||||||
            icon.BeginInit();
 | 
					            icon.BeginInit();
 | 
				
			||||||
            icon.UriSource = new Uri("pack://application:,,,/Filtration;component/Resources/Icons/filtration_icon.png");
 | 
					            icon.UriSource = new Uri("pack://application:,,,/Filtration;component/Resources/Icons/filtration_icon.png");
 | 
				
			||||||
@ -547,7 +544,7 @@ namespace Filtration.ViewModels
 | 
				
			|||||||
            var openFileDialog = new OpenFileDialog
 | 
					            var openFileDialog = new OpenFileDialog
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Filter = "Filter Files (*.filter)|*.filter|All Files (*.*)|*.*",
 | 
					                Filter = "Filter Files (*.filter)|*.filter|All Files (*.*)|*.*",
 | 
				
			||||||
                InitialDirectory = _itemFilterScriptRepository.GetItemFilterScriptDirectory()
 | 
					                InitialDirectory = _itemFilterScriptDirectoryService.ItemFilterScriptDirectory
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return openFileDialog.ShowDialog() != true ? string.Empty : openFileDialog.FileName;
 | 
					            return openFileDialog.ShowDialog() != true ? string.Empty : openFileDialog.FileName;
 | 
				
			||||||
@ -558,27 +555,12 @@ namespace Filtration.ViewModels
 | 
				
			|||||||
            var openFileDialog = new OpenFileDialog
 | 
					            var openFileDialog = new OpenFileDialog
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Filter = "Filter Theme Files (*.filtertheme)|*.filtertheme|All Files (*.*)|*.*",
 | 
					                Filter = "Filter Theme Files (*.filtertheme)|*.filtertheme|All Files (*.*)|*.*",
 | 
				
			||||||
                InitialDirectory = _itemFilterScriptRepository.GetItemFilterScriptDirectory()
 | 
					                InitialDirectory = _itemFilterScriptDirectoryService.ItemFilterScriptDirectory
 | 
				
			||||||
            };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return openFileDialog.ShowDialog() != true ? string.Empty : openFileDialog.FileName;
 | 
					            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()
 | 
					        private async Task OnSaveDocumentCommandAsync()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            await ((IEditableDocument)_avalonDockWorkspaceViewModel.ActiveDocument).SaveAsync();
 | 
					            await ((IEditableDocument)_avalonDockWorkspaceViewModel.ActiveDocument).SaveAsync();
 | 
				
			||||||
 | 
				
			|||||||
@ -1,11 +1,7 @@
 | 
				
			|||||||
using System.IO;
 | 
					using Filtration.Properties;
 | 
				
			||||||
using System.Windows;
 | 
					 | 
				
			||||||
using Filtration.Common.Services;
 | 
					 | 
				
			||||||
using Filtration.Properties;
 | 
					 | 
				
			||||||
using Filtration.Services;
 | 
					using Filtration.Services;
 | 
				
			||||||
using GalaSoft.MvvmLight;
 | 
					using GalaSoft.MvvmLight;
 | 
				
			||||||
using GalaSoft.MvvmLight.CommandWpf;
 | 
					using GalaSoft.MvvmLight.CommandWpf;
 | 
				
			||||||
using Microsoft.WindowsAPICodePack.Dialogs;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Filtration.ViewModels
 | 
					namespace Filtration.ViewModels
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -20,13 +16,11 @@ namespace Filtration.ViewModels
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    internal class SettingsPageViewModel : ViewModelBase, ISettingsPageViewModel
 | 
					    internal class SettingsPageViewModel : ViewModelBase, ISettingsPageViewModel
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        private readonly IItemFilterPersistenceService _itemFilterPersistenceService;
 | 
					        private readonly IItemFilterScriptDirectoryService _itemFilterScriptDirectoryService;
 | 
				
			||||||
        private readonly IMessageBoxService _messageBoxService;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public SettingsPageViewModel(IItemFilterPersistenceService itemFilterPersistenceService, IMessageBoxService messageBoxService)
 | 
					        public SettingsPageViewModel(IItemFilterScriptDirectoryService itemFilterScriptDirectoryService)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _itemFilterPersistenceService = itemFilterPersistenceService;
 | 
					            _itemFilterScriptDirectoryService = itemFilterScriptDirectoryService;
 | 
				
			||||||
            _messageBoxService = messageBoxService;
 | 
					 | 
				
			||||||
            SetItemFilterScriptDirectoryCommand = new RelayCommand(OnSetItemFilterScriptDirectoryCommand);
 | 
					            SetItemFilterScriptDirectoryCommand = new RelayCommand(OnSetItemFilterScriptDirectoryCommand);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -48,24 +42,8 @@ namespace Filtration.ViewModels
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        private void OnSetItemFilterScriptDirectoryCommand()
 | 
					        private void OnSetItemFilterScriptDirectoryCommand()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            using (var dialog = new CommonOpenFileDialog())
 | 
					            _itemFilterScriptDirectoryService.SetItemFilterScriptDirectory();
 | 
				
			||||||
            {
 | 
					            RaisePropertyChanged(nameof(DefaultFilterDirectory));
 | 
				
			||||||
                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);
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -14,6 +14,11 @@ namespace Filtration.WindsorInstallers
 | 
				
			|||||||
                    .ImplementedBy<ItemFilterPersistenceService>()
 | 
					                    .ImplementedBy<ItemFilterPersistenceService>()
 | 
				
			||||||
                    .LifeStyle.Singleton);
 | 
					                    .LifeStyle.Singleton);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            container.Register(
 | 
				
			||||||
 | 
					                Component.For<IItemFilterScriptDirectoryService>()
 | 
				
			||||||
 | 
					                         .ImplementedBy<ItemFilterScriptDirectoryService>()
 | 
				
			||||||
 | 
					                         .LifeStyle.Singleton);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            container.Register(
 | 
					            container.Register(
 | 
				
			||||||
                Component.For<IStaticDataService>()
 | 
					                Component.For<IStaticDataService>()
 | 
				
			||||||
                    .ImplementedBy<StaticDataService>()
 | 
					                    .ImplementedBy<StaticDataService>()
 | 
				
			||||||
@ -43,6 +48,11 @@ namespace Filtration.WindsorInstallers
 | 
				
			|||||||
                Component.For<ISettingsService>()
 | 
					                Component.For<ISettingsService>()
 | 
				
			||||||
                    .ImplementedBy<SettingsService>()
 | 
					                    .ImplementedBy<SettingsService>()
 | 
				
			||||||
                    .LifeStyle.Singleton);
 | 
					                    .LifeStyle.Singleton);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            container.Register(
 | 
				
			||||||
 | 
					                Component.For<IDialogService>()
 | 
				
			||||||
 | 
					                    .ImplementedBy<DialogService>()
 | 
				
			||||||
 | 
					                    .LifeStyle.Singleton);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user