* 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();
|
||||||
|
|
|
@ -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; }
|
||||||
|
|
|
@ -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();
|
||||||
{
|
|
||||||
dialog.IsFolderPicker = true;
|
|
||||||
var result = dialog.ShowDialog();
|
|
||||||
if (result == CommonFileDialogResult.Ok)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_itemFilterPersistenceService.SetItemFilterScriptDirectory(dialog.FileName);
|
|
||||||
RaisePropertyChanged(nameof(DefaultFilterDirectory));
|
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…
Reference in New Issue