Compare commits
27 Commits
1.0.0-beta
...
1.0.3-beta
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8073948cfe | ||
|
|
f331bffee7 | ||
|
|
f238bbf856 | ||
|
|
a0191576f0 | ||
|
|
1d96b69800 | ||
|
|
99abb276af | ||
|
|
073fe553ea | ||
|
|
0d81d0ef54 | ||
|
|
f04f9c20ed | ||
|
|
f71ba74425 | ||
|
|
04cbf218f3 | ||
|
|
6007306346 | ||
|
|
992bd21570 | ||
|
|
7d8b32b2e7 | ||
|
|
ac904c31ff | ||
|
|
f51fe315ad | ||
|
|
3ce2e12f56 | ||
|
|
43e5b30080 | ||
|
|
bc99339390 | ||
|
|
781faae85d | ||
|
|
c926808878 | ||
|
|
24d9f97717 | ||
|
|
7e4e6fe42e | ||
|
|
0209de3817 | ||
|
|
1e26a2ae3e | ||
|
|
54b72e44b0 | ||
|
|
24df1d7687 |
@@ -7,6 +7,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
|
||||
{
|
||||
public BackgroundColorBlockItem()
|
||||
{
|
||||
Color = new Color { A = 240, R = 0, G = 0, B = 0 };
|
||||
}
|
||||
|
||||
public BackgroundColorBlockItem(Color color) : base(color)
|
||||
|
||||
@@ -7,6 +7,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
|
||||
{
|
||||
public BorderColorBlockItem()
|
||||
{
|
||||
Color = new Color {A = 240, R = 0, G = 0, B = 0};
|
||||
}
|
||||
|
||||
public BorderColorBlockItem(Color color) : base(color)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Windows.Media;
|
||||
using Filtration.ObjectModel.BlockItemBaseTypes;
|
||||
using Filtration.ObjectModel.Enums;
|
||||
|
||||
namespace Filtration.ObjectModel.BlockItemTypes
|
||||
{
|
||||
@@ -7,6 +8,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
|
||||
{
|
||||
public TextColorBlockItem()
|
||||
{
|
||||
Color = PathOfExileNamedColors.Colors[PathOfExileNamedColor.WhiteItem];
|
||||
}
|
||||
|
||||
public TextColorBlockItem(Color color) : base(color)
|
||||
|
||||
@@ -94,7 +94,7 @@ namespace Filtration.Parser.Tests.Services
|
||||
// Arrange
|
||||
var inputString = "HideDisabled" + Environment.NewLine +
|
||||
" ItemLevel >= 55";
|
||||
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||
|
||||
@@ -374,37 +374,37 @@ namespace Filtration.Parser.Tests.Services
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TranslateStringToItemFilterBlock_ElderItem_ReturnsCorrectObject()
|
||||
{
|
||||
// Arrange
|
||||
var inputString = "Show" + Environment.NewLine +
|
||||
" ElderItem False";
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is ElderItemBlockItem));
|
||||
var blockItem = result.BlockItems.OfType<ElderItemBlockItem>().First();
|
||||
Assert.IsFalse(blockItem.BooleanValue);
|
||||
public void TranslateStringToItemFilterBlock_ElderItem_ReturnsCorrectObject()
|
||||
{
|
||||
// Arrange
|
||||
var inputString = "Show" + Environment.NewLine +
|
||||
" ElderItem False";
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is ElderItemBlockItem));
|
||||
var blockItem = result.BlockItems.OfType<ElderItemBlockItem>().First();
|
||||
Assert.IsFalse(blockItem.BooleanValue);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TranslateStringToItemFilterBlock_ShaperItem_ReturnsCorrectObject()
|
||||
{
|
||||
// Arrange
|
||||
var inputString = "Show" + Environment.NewLine +
|
||||
" ShaperItem True";
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is ShaperItemBlockItem));
|
||||
var blockItem = result.BlockItems.OfType<ShaperItemBlockItem>().First();
|
||||
Assert.IsTrue(blockItem.BooleanValue);
|
||||
public void TranslateStringToItemFilterBlock_ShaperItem_ReturnsCorrectObject()
|
||||
{
|
||||
// Arrange
|
||||
var inputString = "Show" + Environment.NewLine +
|
||||
" ShaperItem True";
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is ShaperItemBlockItem));
|
||||
var blockItem = result.BlockItems.OfType<ShaperItemBlockItem>().First();
|
||||
Assert.IsTrue(blockItem.BooleanValue);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -426,37 +426,37 @@ namespace Filtration.Parser.Tests.Services
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TranslateStringToItemFilterBlock_ShapedMap_ReturnsCorrectObject()
|
||||
{
|
||||
// Arrange
|
||||
var inputString = "Show" + Environment.NewLine +
|
||||
" ShapedMap false";
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is ShapedMapBlockItem));
|
||||
var blockItem = result.BlockItems.OfType<ShapedMapBlockItem>().First();
|
||||
Assert.IsFalse(blockItem.BooleanValue);
|
||||
public void TranslateStringToItemFilterBlock_ShapedMap_ReturnsCorrectObject()
|
||||
{
|
||||
// Arrange
|
||||
var inputString = "Show" + Environment.NewLine +
|
||||
" ShapedMap false";
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is ShapedMapBlockItem));
|
||||
var blockItem = result.BlockItems.OfType<ShapedMapBlockItem>().First();
|
||||
Assert.IsFalse(blockItem.BooleanValue);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TranslateStringToItemFilterBlock_ElderMap_ReturnsCorrectObject()
|
||||
{
|
||||
// Arrange
|
||||
var inputString = "Show" + Environment.NewLine +
|
||||
" ElderMap false";
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is ElderMapBlockItem));
|
||||
var blockItem = result.BlockItems.OfType<ElderMapBlockItem>().First();
|
||||
Assert.IsFalse(blockItem.BooleanValue);
|
||||
public void TranslateStringToItemFilterBlock_ElderMap_ReturnsCorrectObject()
|
||||
{
|
||||
// Arrange
|
||||
var inputString = "Show" + Environment.NewLine +
|
||||
" ElderMap false";
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is ElderMapBlockItem));
|
||||
var blockItem = result.BlockItems.OfType<ElderMapBlockItem>().First();
|
||||
Assert.IsFalse(blockItem.BooleanValue);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -795,7 +795,7 @@ namespace Filtration.Parser.Tests.Services
|
||||
" SetTextColor 255 20 100 # Rare Item Text";
|
||||
var testComponent = new ColorThemeComponent(ThemeComponentType.TextColor, "Rare Item Text", new Color { A = 240, R = 255, G = 20, B = 100});
|
||||
var testInputThemeComponentCollection = new ThemeComponentCollection { testComponent };
|
||||
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScript>(i => i.ItemFilterScriptSettings.ThemeComponentCollection == testInputThemeComponentCollection));
|
||||
|
||||
@@ -896,22 +896,22 @@ namespace Filtration.Parser.Tests.Services
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TranslateStringToItemFilterBlock_DisableDropSound_ReturnsCorrectObject()
|
||||
{
|
||||
// Arrange
|
||||
var inputString = "Show" + Environment.NewLine +
|
||||
" DisableDropSound True";
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is DisableDropSoundBlockItem));
|
||||
var blockItem = result.BlockItems.OfType<DisableDropSoundBlockItem>().First();
|
||||
Assert.IsTrue(blockItem.BooleanValue);
|
||||
}
|
||||
|
||||
public void TranslateStringToItemFilterBlock_DisableDropSound_ReturnsCorrectObject()
|
||||
{
|
||||
// Arrange
|
||||
var inputString = "Show" + Environment.NewLine +
|
||||
" DisableDropSound True";
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is DisableDropSoundBlockItem));
|
||||
var blockItem = result.BlockItems.OfType<DisableDropSoundBlockItem>().First();
|
||||
Assert.IsTrue(blockItem.BooleanValue);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TranslateStringToItemFilterBlock_Everything_ReturnsCorrectObject()
|
||||
{
|
||||
@@ -1046,7 +1046,7 @@ namespace Filtration.Parser.Tests.Services
|
||||
|
||||
var fontSizeblockItem = result.BlockItems.OfType<FontSizeBlockItem>().First();
|
||||
Assert.AreEqual(50, fontSizeblockItem.Value);
|
||||
|
||||
|
||||
Assert.AreEqual(0, result.BlockItems.OfType<SoundBlockItem>().Count());
|
||||
|
||||
var disableDropSoundBlockItem = result.BlockItems.OfType<DisableDropSoundBlockItem>().First();
|
||||
@@ -1089,9 +1089,9 @@ namespace Filtration.Parser.Tests.Services
|
||||
// Arrange
|
||||
|
||||
var inputString = "Show" + Environment.NewLine +
|
||||
" ItemLevel >= 70" + Environment.NewLine +
|
||||
" ItemLevel <= 80" + Environment.NewLine +
|
||||
" Quality = 15" + Environment.NewLine +
|
||||
" ItemLevel >= 70" + Environment.NewLine +
|
||||
" ItemLevel <= 80" + Environment.NewLine +
|
||||
" Quality = 15" + Environment.NewLine +
|
||||
" Quality < 17";
|
||||
|
||||
// Act
|
||||
@@ -1152,7 +1152,7 @@ namespace Filtration.Parser.Tests.Services
|
||||
var blockItem = result.BlockItems.OfType<FontSizeBlockItem>().First();
|
||||
Assert.AreEqual(27, blockItem.Value);
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void TranslateStringToItemFilterBlock_MultipleSoundItems_OnlyLastOneUsed()
|
||||
{
|
||||
@@ -1308,6 +1308,86 @@ namespace Filtration.Parser.Tests.Services
|
||||
Assert.AreEqual(ItemRarity.Magic, (ItemRarity)rarityBlockItem.FilterPredicate.PredicateOperand);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TranslateStringToItemFilterBlock_CustomSoundDocumentsFile()
|
||||
{
|
||||
// Arrange
|
||||
var inputString = @"Show" + Environment.NewLine +
|
||||
"CustomAlertSound \"test.mp3\"";
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is CustomSoundBlockItem));
|
||||
var customSoundBlockItem = result.BlockItems.OfType<CustomSoundBlockItem>().First();
|
||||
Assert.AreEqual("test.mp3", customSoundBlockItem.Value);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TranslateStringToItemFilterBlock_CustomSoundDocumentsRelativeFile()
|
||||
{
|
||||
// Arrange
|
||||
var inputString = @"Show" + Environment.NewLine +
|
||||
"CustomAlertSound \"Sounds\test.mp3\"";
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is CustomSoundBlockItem));
|
||||
var customSoundBlockItem = result.BlockItems.OfType<CustomSoundBlockItem>().First();
|
||||
Assert.AreEqual("Sounds\test.mp3", customSoundBlockItem.Value);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TranslateStringToItemFilterBlock_CustomSoundFullBackSlashPath()
|
||||
{
|
||||
// Arrange
|
||||
var inputString = @"Show" + Environment.NewLine +
|
||||
"CustomAlertSound \"C:\\Sounds\\test.mp3\"";
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is CustomSoundBlockItem));
|
||||
var customSoundBlockItem = result.BlockItems.OfType<CustomSoundBlockItem>().First();
|
||||
Assert.AreEqual("C:\\Sounds\\test.mp3", customSoundBlockItem.Value);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TranslateStringToItemFilterBlock_CustomSoundFullForwardSlashPath()
|
||||
{
|
||||
// Arrange
|
||||
var inputString = @"Show" + Environment.NewLine +
|
||||
"CustomAlertSound \"C:/Sounds/test.mp3\"";
|
||||
|
||||
//Act
|
||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is CustomSoundBlockItem));
|
||||
var customSoundBlockItem = result.BlockItems.OfType<CustomSoundBlockItem>().First();
|
||||
Assert.AreEqual("C:/Sounds/test.mp3", customSoundBlockItem.Value);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TranslateStringToItemFilterBlock_CustomSoundFullMixedPath()
|
||||
{
|
||||
// Arrange
|
||||
var inputString = @"Show" + Environment.NewLine +
|
||||
"CustomAlertSound \"C:\\Sounds/test.mp3\"";
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is CustomSoundBlockItem));
|
||||
var customSoundBlockItem = result.BlockItems.OfType<CustomSoundBlockItem>().First();
|
||||
Assert.AreEqual("C:\\Sounds/test.mp3", customSoundBlockItem.Value);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TranslateItemFilterBlockToString_NothingPopulated_ReturnsCorrectString()
|
||||
{
|
||||
@@ -1328,13 +1408,13 @@ namespace Filtration.Parser.Tests.Services
|
||||
{
|
||||
// Arrange
|
||||
var expectedResult = "Show # Child 1 Block Group - Child 2 Block Group";
|
||||
|
||||
|
||||
var rootBlockGroup = new ItemFilterBlockGroup("Root Block Group", null);
|
||||
var child1BlockGroup = new ItemFilterBlockGroup("Child 1 Block Group", rootBlockGroup);
|
||||
var child2BlockGroup = new ItemFilterBlockGroup("Child 2 Block Group", child1BlockGroup);
|
||||
_testUtility.TestBlock.BlockGroup = child2BlockGroup;
|
||||
|
||||
// TODO: Shouldn't be set to edited this way
|
||||
_testUtility.TestBlock.BlockGroup = child2BlockGroup;
|
||||
|
||||
// TODO: Shouldn't be set to edited this way
|
||||
_testUtility.TestBlock.IsEdited = true;
|
||||
// Act
|
||||
var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock);
|
||||
@@ -1853,7 +1933,7 @@ namespace Filtration.Parser.Tests.Services
|
||||
{
|
||||
// Arrange
|
||||
var expectedResult = "Show" + Environment.NewLine +
|
||||
" ItemLevel > 56" + Environment.NewLine +
|
||||
" ItemLevel > 56" + Environment.NewLine +
|
||||
" ItemLevel >= 45" + Environment.NewLine +
|
||||
" ItemLevel < 100";
|
||||
|
||||
@@ -1895,7 +1975,7 @@ namespace Filtration.Parser.Tests.Services
|
||||
// Arrange
|
||||
var expectedResult = "#Show" + Environment.NewLine +
|
||||
"# Width = 4";
|
||||
|
||||
|
||||
|
||||
_testUtility.TestBlock.Enabled = false;
|
||||
_testUtility.TestBlock.BlockItems.Add(new WidthBlockItem(FilterPredicateOperator.Equal, 4));
|
||||
@@ -1942,7 +2022,7 @@ namespace Filtration.Parser.Tests.Services
|
||||
" DisableDropSound True" + Environment.NewLine +
|
||||
" MinimapIcon 1 Blue Circle" + Environment.NewLine +
|
||||
" PlayEffect Red Temp" + Environment.NewLine +
|
||||
" CustomAlertSound \"test.mp3\"";
|
||||
" CustomAlertSound \"test.mp3\"";
|
||||
|
||||
_testUtility.TestBlock.BlockItems.Add(new ActionBlockItem(BlockAction.Show));
|
||||
_testUtility.TestBlock.BlockItems.Add(new IdentifiedBlockItem(true));
|
||||
@@ -2010,7 +2090,7 @@ namespace Filtration.Parser.Tests.Services
|
||||
|
||||
// Act
|
||||
_testUtility.Translator.ReplaceAudioVisualBlockItemsFromString(testInputBlockItems, testInputString);
|
||||
|
||||
|
||||
// Assert
|
||||
var textColorBlockItem = testInputBlockItems.First(b => b is TextColorBlockItem) as TextColorBlockItem;
|
||||
Assert.IsNotNull(textColorBlockItem);
|
||||
@@ -2085,7 +2165,7 @@ namespace Filtration.Parser.Tests.Services
|
||||
// Arrange
|
||||
var testInputString = "SetTextColor 240 200 150 # Rarest Currency" + Environment.NewLine +
|
||||
"SetBackgroundColor 0 0 0 # Rarest Currency Background" + Environment.NewLine +
|
||||
"SetBorderColor 255 255 255 # Rarest Currency Border" + Environment.NewLine +
|
||||
"SetBorderColor 255 255 255 # Rarest Currency Border" + Environment.NewLine +
|
||||
"PlayAlertSound 7 280";
|
||||
|
||||
var testInputBlockItems = new ObservableCollection<IItemFilterBlockItem>();
|
||||
@@ -2131,9 +2211,9 @@ namespace Filtration.Parser.Tests.Services
|
||||
// Arrange
|
||||
var testInputString = "SetTextColor 240 200 150 # Rarest Currency" + Environment.NewLine +
|
||||
"SetBackgroundColor 0 0 0 # Rarest Currency Background" + Environment.NewLine +
|
||||
"SetBorderColor 255 255 255 # Rarest Currency Border" + Environment.NewLine +
|
||||
"SetBorderColor 255 255 255 # Rarest Currency Border" + Environment.NewLine +
|
||||
"PlayAlertSound 7 280";
|
||||
|
||||
|
||||
var testInputBlockItems = new ObservableCollection<IItemFilterBlockItem>();
|
||||
|
||||
// Act
|
||||
@@ -2203,9 +2283,9 @@ namespace Filtration.Parser.Tests.Services
|
||||
_testUtility.Translator.ReplaceAudioVisualBlockItemsFromString(testInputBlockItems, testInputString);
|
||||
|
||||
// Assert
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
private class ItemFilterBlockTranslatorTestUtility
|
||||
{
|
||||
public ItemFilterBlockTranslatorTestUtility()
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,121 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{E0693972-72C5-4E05-A9C5-A5943E4015C6}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Filtration.Tests</RootNamespace>
|
||||
<AssemblyName>Filtration.Tests</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Castle.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="FluentAssertions, Version=4.19.2.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\FluentAssertions.4.19.2\lib\net45\FluentAssertions.dll</HintPath>
|
||||
</Reference>
|
||||
<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>
|
||||
</Reference>
|
||||
<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>
|
||||
</Reference>
|
||||
<Reference Include="nunit.framework, Version=3.6.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NUnit.3.6.1\lib\net45\nunit.framework.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Repositories\TestItemFilterScriptRepository.cs" />
|
||||
<Compile Include="Services\TestHTTPService.cs" />
|
||||
<Compile Include="Services\TestItemFilterPersistenceService.cs" />
|
||||
<Compile Include="Services\TestStaticDataService.cs" />
|
||||
<Compile Include="Services\TestUpdateService.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Models\" />
|
||||
<Folder Include="Resources\" />
|
||||
<Folder Include="Translators\" />
|
||||
<Folder Include="ViewModels\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Filtration.Common\Filtration.Common.csproj">
|
||||
<Project>{8cb44f28-2956-4c2a-9314-72727262edd4}</Project>
|
||||
<Name>Filtration.Common</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Filtration.Interface\Filtration.Interface.csproj">
|
||||
<Project>{0f333344-7695-47b2-b0e6-172e4de74819}</Project>
|
||||
<Name>Filtration.Interface</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Filtration.ObjectModel\Filtration.ObjectModel.csproj">
|
||||
<Project>{4aac3beb-1dc1-483e-9d11-0e9334e80227}</Project>
|
||||
<Name>Filtration.ObjectModel</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Filtration.Parser.Interface\Filtration.Parser.Interface.csproj">
|
||||
<Project>{46383F20-02DF-48B4-B092-9088FA4ACD5A}</Project>
|
||||
<Name>Filtration.Parser.Interface</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Filtration\Filtration.csproj">
|
||||
<Project>{55e0a34c-e039-43d7-a024-a4045401cdda}</Project>
|
||||
<Name>Filtration</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{E0693972-72C5-4E05-A9C5-A5943E4015C6}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Filtration.Tests</RootNamespace>
|
||||
<AssemblyName>Filtration.Tests</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Castle.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="FluentAssertions, Version=4.19.2.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\FluentAssertions.4.19.2\lib\net45\FluentAssertions.dll</HintPath>
|
||||
</Reference>
|
||||
<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>
|
||||
</Reference>
|
||||
<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>
|
||||
</Reference>
|
||||
<Reference Include="nunit.framework, Version=3.6.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NUnit.3.6.1\lib\net45\nunit.framework.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Repositories\TestItemFilterScriptRepository.cs" />
|
||||
<Compile Include="Services\TestHTTPService.cs" />
|
||||
<Compile Include="Services\TestItemFilterPersistenceService.cs" />
|
||||
<Compile Include="Services\TestUpdateService.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Models\" />
|
||||
<Folder Include="Resources\" />
|
||||
<Folder Include="Translators\" />
|
||||
<Folder Include="ViewModels\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Filtration.Common\Filtration.Common.csproj">
|
||||
<Project>{8cb44f28-2956-4c2a-9314-72727262edd4}</Project>
|
||||
<Name>Filtration.Common</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Filtration.Interface\Filtration.Interface.csproj">
|
||||
<Project>{0f333344-7695-47b2-b0e6-172e4de74819}</Project>
|
||||
<Name>Filtration.Interface</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Filtration.ObjectModel\Filtration.ObjectModel.csproj">
|
||||
<Project>{4aac3beb-1dc1-483e-9d11-0e9334e80227}</Project>
|
||||
<Name>Filtration.ObjectModel</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Filtration.Parser.Interface\Filtration.Parser.Interface.csproj">
|
||||
<Project>{46383F20-02DF-48B4-B092-9088FA4ACD5A}</Project>
|
||||
<Name>Filtration.Parser.Interface</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Filtration\Filtration.csproj">
|
||||
<Project>{55e0a34c-e039-43d7-a024-a4045401cdda}</Project>
|
||||
<Name>Filtration</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
-->
|
||||
</Project>
|
||||
@@ -1,44 +0,0 @@
|
||||
using Filtration.Common.Services;
|
||||
using Filtration.Services;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Filtration.Tests.Services
|
||||
{
|
||||
[TestFixture]
|
||||
public class TestStaticDataService
|
||||
{
|
||||
[Test]
|
||||
public void Constructor_CallsFileSystemService()
|
||||
{
|
||||
// Arrange
|
||||
|
||||
var mockFileSystemService = new Mock<IFileSystemService>();
|
||||
mockFileSystemService.Setup(f => f.ReadFileAsString(It.IsAny<string>())).Returns("TestResult").Verifiable();
|
||||
|
||||
var service = new StaticDataService(mockFileSystemService.Object);
|
||||
|
||||
// Act
|
||||
|
||||
// Assert
|
||||
mockFileSystemService.Verify();
|
||||
}
|
||||
|
||||
[Ignore("Integration Test")]
|
||||
[Test]
|
||||
public void Constructor_ReadsFromFileCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
|
||||
var fileSystemService = new FileSystemService();
|
||||
|
||||
var service = new StaticDataService(fileSystemService);
|
||||
|
||||
// Act
|
||||
|
||||
// Assert
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
14
Filtration/Enums/UpdateSource.cs
Normal file
14
Filtration/Enums/UpdateSource.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Filtration.Enums
|
||||
{
|
||||
internal enum UpdateSource
|
||||
{
|
||||
GitHub,
|
||||
Local
|
||||
}
|
||||
}
|
||||
@@ -203,6 +203,7 @@
|
||||
<Compile Include="Converters\HashSignRemovalConverter.cs" />
|
||||
<Compile Include="Converters\ItemRarityConverter.cs" />
|
||||
<Compile Include="Converters\TreeViewMarginConverter.cs" />
|
||||
<Compile Include="Enums\UpdateSource.cs" />
|
||||
<Compile Include="Models\UpdateData.cs" />
|
||||
<Compile Include="Properties\Annotations.cs" />
|
||||
<Compile Include="Repositories\ItemFilterScriptRepository.cs" />
|
||||
@@ -438,6 +439,7 @@
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
<EmbeddedResource Include="Resources\ItemMods.txt" />
|
||||
<Resource Include="Resources\loading_spinner.gif" />
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
@@ -586,8 +588,8 @@
|
||||
<Content Include="Resources\AlertSounds\SH22Vaal.mp3">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Resources\ItemBaseTypes.txt" />
|
||||
<Content Include="Resources\ItemClasses.txt" />
|
||||
<EmbeddedResource Include="Resources\ItemBaseTypes.txt" />
|
||||
<EmbeddedResource Include="Resources\ItemClasses.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Filtration.Common\Filtration.Common.csproj">
|
||||
|
||||
@@ -9,10 +9,11 @@
|
||||
<description>A Path of Exile loot filter script editor</description>
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||
<copyright>Copyright 2018</copyright>
|
||||
<releaseNotes>The release notes for 1.0.0 have not been written yet!</releaseNotes>
|
||||
<releaseNotes>* Added missing AlertSound mp3 resources to installer</releaseNotes>
|
||||
<dependencies />
|
||||
</metadata>
|
||||
<files>
|
||||
<file src="*.*" target="lib\net45\" exclude="*.pdb;*.nupkg;*.vshost.*;*.xml"/>
|
||||
<file src="Resources\AlertSounds\*.mp3" target="lib\net45\Resources\AlertSounds\" />
|
||||
</files>
|
||||
</package>
|
||||
@@ -10,8 +10,8 @@ using System.Runtime.CompilerServices;
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
[assembly: AssemblyVersion("1.0.0")]
|
||||
[assembly: AssemblyInformationalVersion("1.0.0-beta1")]
|
||||
[assembly: AssemblyVersion("1.0.3")]
|
||||
[assembly: AssemblyInformationalVersion("1.0.3-beta1")]
|
||||
|
||||
[assembly: InternalsVisibleTo("Filtration.Tests")]
|
||||
[assembly: InternalsVisibleTo("Filtration.ItemFilterPreview.Tests")]
|
||||
|
||||
158
Filtration/Properties/Resources.Designer.cs
generated
158
Filtration/Properties/Resources.Designer.cs
generated
@@ -224,6 +224,164 @@ namespace Filtration.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to A Mother's Parting Gift
|
||||
///Abandoned Wealth
|
||||
///Aberrant Fossil
|
||||
///Abyssal Axe
|
||||
///Abyssal Cry
|
||||
///Abyssal Sceptre
|
||||
///Academy Map
|
||||
///Acid Lakes Map
|
||||
///Added Chaos Damage Support
|
||||
///Added Cold Damage Support
|
||||
///Added Fire Damage Support
|
||||
///Added Lightning Damage Support
|
||||
///Additional Accuracy Support
|
||||
///Aetheric Fossil
|
||||
///Agate Amulet
|
||||
///Albino Rhoa Feather
|
||||
///Alchemy Shard
|
||||
///Alder Spiked Shield
|
||||
///Alira's Amulet
|
||||
///Alleyways Map
|
||||
///Allflame
|
||||
///Alloyed Spiked Shield
|
||||
///Alteration Shard
|
||||
///Amber Amulet
|
||||
///Ambush Boots
|
||||
///Ambush Leaguestone
|
||||
///Ambush Mitts
|
||||
///Ambusher
|
||||
///Amethyst Flask
|
||||
///Amethyst [rest of string was truncated]";.
|
||||
/// </summary>
|
||||
internal static string ItemBaseTypes {
|
||||
get {
|
||||
return ResourceManager.GetString("ItemBaseTypes", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Abyss Jewel
|
||||
///Active Skill Gems
|
||||
///Amulets
|
||||
///Axe
|
||||
///Belts
|
||||
///Body Armours
|
||||
///Boots
|
||||
///Bows
|
||||
///Claws
|
||||
///Currency
|
||||
///Daggers
|
||||
///Delve Socketable Currency
|
||||
///Divination Card
|
||||
///Fishing Rods
|
||||
///Flasks
|
||||
///Gems
|
||||
///Gloves
|
||||
///Helmets
|
||||
///Hybrid Flasks
|
||||
///Incursion Item
|
||||
///Jewel
|
||||
///Labyrinth Item
|
||||
///Labyrinth Map Item
|
||||
///Labyrinth Trinket
|
||||
///Large Relics
|
||||
///Leaguestone
|
||||
///Life Flasks
|
||||
///Mace
|
||||
///Mana Flasks
|
||||
///Map Fragments
|
||||
///Maps
|
||||
///Misc Map Items
|
||||
///One Hand Axes
|
||||
///One Hand Maces
|
||||
///One Hand Swords
|
||||
///Pantheon Soul
|
||||
///Piece
|
||||
///Quest Items
|
||||
///Quivers
|
||||
///Rings
|
||||
///Sceptres
|
||||
///Shields
|
||||
///Stackable Currency
|
||||
///Staves
|
||||
///Support Skill Gems
|
||||
///Sword
|
||||
///T [rest of string was truncated]";.
|
||||
/// </summary>
|
||||
internal static string ItemClasses {
|
||||
get {
|
||||
return ResourceManager.GetString("ItemClasses", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Abbot's
|
||||
///Abhorrent
|
||||
///Acrobat's
|
||||
///Adept's
|
||||
///Agile
|
||||
///Alchemist's
|
||||
///Alluring
|
||||
///Alpine
|
||||
///Ample
|
||||
///Anarchic
|
||||
///Anarchist's
|
||||
///Annealed
|
||||
///Antagonist's
|
||||
///Apprentice's
|
||||
///Aqua
|
||||
///Archmage's
|
||||
///Arcing
|
||||
///Arctic
|
||||
///Armadillo's
|
||||
///Arming
|
||||
///Armoured
|
||||
///Athlete's
|
||||
///Avalanching
|
||||
///Avenger's
|
||||
///Azure
|
||||
///Bandit's
|
||||
///Barbed
|
||||
///Battlemage's
|
||||
///Beating
|
||||
///Beautiful
|
||||
///Beetle's
|
||||
///Beryl
|
||||
///Betrayer's
|
||||
///Bipedal
|
||||
///Biting
|
||||
///Bitter
|
||||
///Blasting
|
||||
///Blazing
|
||||
///Blistering
|
||||
///Bloodthirsty
|
||||
///Blue
|
||||
///Blunt
|
||||
///Blurred
|
||||
///Boggart's
|
||||
///Bolting
|
||||
///Brawler's
|
||||
///Breathtaking
|
||||
///Brinerot
|
||||
///Brutal
|
||||
///Bubbling
|
||||
///Burning
|
||||
///Burnished
|
||||
///Butterfly's
|
||||
///Buttressed
|
||||
///Buzzing
|
||||
///Calming
|
||||
///Capric [rest of string was truncated]";.
|
||||
/// </summary>
|
||||
internal static string ItemMods {
|
||||
get {
|
||||
return ResourceManager.GetString("ItemMods", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.IO.UnmanagedMemoryStream similar to System.IO.MemoryStream.
|
||||
/// </summary>
|
||||
|
||||
@@ -202,4 +202,13 @@
|
||||
<data name="SH22Vaal" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\AlertSounds\SH22Vaal.mp3;System.IO.MemoryStream, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="ItemBaseTypes" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ItemBaseTypes.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="ItemClasses" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ItemClasses.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
|
||||
</data>
|
||||
<data name="ItemMods" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ItemMods.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -11,6 +11,7 @@ Added Cold Damage Support
|
||||
Added Fire Damage Support
|
||||
Added Lightning Damage Support
|
||||
Additional Accuracy Support
|
||||
Advanced Traps Support
|
||||
Aetheric Fossil
|
||||
Agate Amulet
|
||||
Albino Rhoa Feather
|
||||
@@ -64,6 +65,7 @@ Arcane Surge Support
|
||||
Arcanist Gloves
|
||||
Arcanist Slippers
|
||||
Archon Kite Shield
|
||||
Archon Kite Shield Piece
|
||||
Arctic Armour
|
||||
Arctic Breath
|
||||
Arena Map
|
||||
@@ -87,6 +89,7 @@ Atziri's Arsenal
|
||||
Audacity
|
||||
Auric Mace
|
||||
Aventail Helmet
|
||||
Avian Slippers
|
||||
Avian Twins Talisman
|
||||
Awl
|
||||
Baleful Gem
|
||||
@@ -154,6 +157,7 @@ Bloodlust Support
|
||||
Bloodstained Fossil
|
||||
Blue Pearl Amulet
|
||||
Blunt Arrow Quiver
|
||||
Blunt Arrow Quiver Piece
|
||||
Boarding Axe
|
||||
Bodyswap
|
||||
Bog Map
|
||||
@@ -207,7 +211,28 @@ Caldera Map
|
||||
Calendar of Fortune
|
||||
Call to the First Ones
|
||||
Callous Mask
|
||||
Callous Mask Piece
|
||||
Canyon Map
|
||||
Captured Soul
|
||||
Captured Soul of Arachnoxia
|
||||
Captured Soul of Armala, the Widow
|
||||
Captured Soul of Drek, Apex Hunter
|
||||
Captured Soul of Erebix, Light's Bane
|
||||
Captured Soul of Gorulis, Will-Thief
|
||||
Captured Soul of Jorus, Sky's Edge
|
||||
Captured Soul of Lycius, Midnight's Howl
|
||||
Captured Soul of Mephod, the Earth Scorcher
|
||||
Captured Soul of Nassar, Lion of the Seas
|
||||
Captured Soul of Puruna, the Challenger
|
||||
Captured Soul of Sebbert, Crescent's Point
|
||||
Captured Soul of Shadow of the Vaal
|
||||
Captured Soul of Shock and Horror
|
||||
Captured Soul of Stalker of the Endless Dunes
|
||||
Captured Soul of Suncaller Asha
|
||||
Captured Soul of Terror of the Infinite Drifts
|
||||
Captured Soul of The Forgotten Soldier
|
||||
Captured Soul of Thraxia
|
||||
Captured Soul of Varhesh, Shimmering Aberration
|
||||
Carcass Map
|
||||
Cardinal Round Shield
|
||||
Carnal Armour
|
||||
@@ -246,11 +271,11 @@ Chainmail Vest
|
||||
Champion Kite Shield
|
||||
Chance to Bleed Support
|
||||
Chance to Flee Support
|
||||
Chance to Ignite Support
|
||||
Channel Map
|
||||
Chaos Orb
|
||||
Chaos Shard
|
||||
Chaotic Disposition
|
||||
Charan's Sword
|
||||
Charged Dash
|
||||
Charged Traps Support
|
||||
Chateau Map
|
||||
@@ -271,6 +296,7 @@ Cleave
|
||||
Cleaver
|
||||
Close Helmet
|
||||
Cloth Belt
|
||||
Cloth Belt Piece
|
||||
Cluster Traps Support
|
||||
Clutching Talisman
|
||||
Cobalt Jewel
|
||||
@@ -287,6 +313,7 @@ Colossal Tower Shield
|
||||
Colosseum Map
|
||||
Colosseum Plate
|
||||
Colossus Mallet
|
||||
Combustion Support
|
||||
Commander's Brigandine
|
||||
Composite Bow
|
||||
Compound Bow
|
||||
@@ -457,6 +484,7 @@ Eelskin Gloves
|
||||
Eelskin Tunic
|
||||
Efficacy Support
|
||||
Elder Sword
|
||||
Elder's Orb
|
||||
Elegant Foil
|
||||
Elegant Ringmail
|
||||
Elegant Round Shield
|
||||
@@ -487,10 +515,30 @@ Enlighten Support
|
||||
Esh's Breachstone
|
||||
Essence Drain
|
||||
Essence Leaguestone
|
||||
Essence of Anger
|
||||
Essence of Anguish
|
||||
Essence of Contempt
|
||||
Essence of Delirium
|
||||
Essence of Doubt
|
||||
Essence of Dread
|
||||
Essence of Envy
|
||||
Essence of Fear
|
||||
Essence of Greed
|
||||
Essence of Hatred
|
||||
Essence of Horror
|
||||
Essence of Hysteria
|
||||
Essence of Insanity
|
||||
Essence of Loathing
|
||||
Essence of Misery
|
||||
Essence of Rage
|
||||
Essence of Scorn
|
||||
Essence of Sorrow
|
||||
Essence of Spite
|
||||
Essence of Suffering
|
||||
Essence of Torment
|
||||
Essence of Woe
|
||||
Essence of Wrath
|
||||
Essence of Zeal
|
||||
Estoc
|
||||
Estuary Map
|
||||
Etched Greatsword
|
||||
@@ -673,6 +721,7 @@ Hallowed Life Flask
|
||||
Hallowed Mana Flask
|
||||
Hammered Buckler
|
||||
Harbinger Bow
|
||||
Harbinger Map
|
||||
Harbinger's Orb
|
||||
Harbinger's Shard
|
||||
Harlequin Mask
|
||||
@@ -740,6 +789,7 @@ Imperial Claw
|
||||
Imperial Maul
|
||||
Imperial Skean
|
||||
Imperial Staff
|
||||
Imperial Staff Piece
|
||||
Imprinted Bestiary Orb
|
||||
Incinerate
|
||||
Increased Area of Effect Support
|
||||
@@ -831,15 +881,16 @@ Legion Boots
|
||||
Legion Gloves
|
||||
Legion Hammer
|
||||
Legion Sword
|
||||
Legion Sword Piece
|
||||
Less Duration Support
|
||||
Lesser Multiple Projectiles Support
|
||||
Lesser Poison Support
|
||||
Leyline Map
|
||||
Life Gain on Hit Support
|
||||
Life Leech Support
|
||||
Light and Truth
|
||||
Light Brigandine
|
||||
Light Quiver
|
||||
Light and Truth
|
||||
Lighthouse Map
|
||||
Lightning Arrow
|
||||
Lightning Penetration Support
|
||||
@@ -901,6 +952,17 @@ Medium Life Flask
|
||||
Medium Mana Flask
|
||||
Melee Physical Damage Support
|
||||
Melee Splash Support
|
||||
Memory Fragment
|
||||
Memory Fragment I
|
||||
Memory Fragment II
|
||||
Memory Fragment III
|
||||
Memory Fragment IV
|
||||
Memory Fragment V
|
||||
Memory Fragment VI
|
||||
Memory Fragment VII
|
||||
Memory Fragment VIII
|
||||
Memory Fragment IX
|
||||
Memory Fragment X
|
||||
Merciless Armament
|
||||
Mesa Map
|
||||
Mesh Boots
|
||||
@@ -913,14 +975,14 @@ Military Staff
|
||||
Mind Cage
|
||||
Minefield Support
|
||||
Mineral Pools Map
|
||||
Minion and Totem Elemental Resistance Support
|
||||
Minion Damage Support
|
||||
Minion Life Support
|
||||
Minion Speed Support
|
||||
Minion and Totem Elemental Resistance Support
|
||||
Mirage Archer Support
|
||||
Mirror Arrow
|
||||
Mirror of Kalandra
|
||||
Mirror Shard
|
||||
Mirror of Kalandra
|
||||
Mirrored Spiked Shield
|
||||
Mitts
|
||||
Molten Shell
|
||||
@@ -1098,9 +1160,9 @@ Quartz Wand
|
||||
Quicksilver Flask
|
||||
Quilted Jacket
|
||||
Racecourse Map
|
||||
Rain Tempter
|
||||
Rain of Arrows
|
||||
Rain of Chaos
|
||||
Rain Tempter
|
||||
Raise Spectre
|
||||
Raise Zombie
|
||||
Rallying Cry
|
||||
@@ -1117,6 +1179,7 @@ Reave
|
||||
Reaver Axe
|
||||
Reaver Helmet
|
||||
Reaver Sword
|
||||
Rebirth
|
||||
Reckoning
|
||||
Recurve Bow
|
||||
Reduced Mana Support
|
||||
@@ -1572,6 +1635,7 @@ The Scavenger
|
||||
The Scholar
|
||||
The Sephirot
|
||||
The Shaper's Key
|
||||
The Shaper's Realm
|
||||
The Sigil
|
||||
The Siren
|
||||
The Soul
|
||||
@@ -1655,9 +1719,8 @@ Toxic Rain
|
||||
Toxic Sewer Map
|
||||
Tranquillity
|
||||
Transmutation Shard
|
||||
Trap and Mine Damage Support
|
||||
Trap Cooldown Support
|
||||
Trap Support
|
||||
Trap and Mine Damage Support
|
||||
Trapper Boots
|
||||
Trapper Mitts
|
||||
Trarthan Powder
|
||||
@@ -1752,16 +1815,16 @@ Vault Map
|
||||
Velvet Gloves
|
||||
Velvet Slippers
|
||||
Vengeance
|
||||
Vial Of Power
|
||||
Vial of Awakening
|
||||
Vial of Consequence
|
||||
Vial of Dominance
|
||||
Vial of Fate
|
||||
Vial Of Power
|
||||
Vial of Sacrifice
|
||||
Vial of Summoning
|
||||
Vial of Transcendence
|
||||
Vial of the Ghost
|
||||
Vial of the Ritual
|
||||
Vial of Transcendence
|
||||
Vicious Projectiles Support
|
||||
Vigilant Strike
|
||||
Vile Staff
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Abyss Jewel
|
||||
Active Skill Gems
|
||||
Amulets
|
||||
Axe
|
||||
Axes
|
||||
Belts
|
||||
Body Armours
|
||||
Boots
|
||||
@@ -25,7 +25,7 @@ Labyrinth Trinket
|
||||
Large Relics
|
||||
Leaguestone
|
||||
Life Flasks
|
||||
Mace
|
||||
Maces
|
||||
Mana Flasks
|
||||
Map Fragments
|
||||
Maps
|
||||
@@ -43,7 +43,7 @@ Shields
|
||||
Stackable Currency
|
||||
Staves
|
||||
Support Skill Gems
|
||||
Sword
|
||||
Swords
|
||||
Thrusting One Hand Swords
|
||||
Two Hand Axes
|
||||
Two Hand Maces
|
||||
|
||||
786
Filtration/Resources/ItemMods.txt
Normal file
786
Filtration/Resources/ItemMods.txt
Normal file
@@ -0,0 +1,786 @@
|
||||
Abbot's
|
||||
Abhorrent
|
||||
Acrobat's
|
||||
Adept's
|
||||
Agile
|
||||
Alchemist's
|
||||
Alluring
|
||||
Alpine
|
||||
Ample
|
||||
Anarchic
|
||||
Anarchist's
|
||||
Annealed
|
||||
Antagonist's
|
||||
Apprentice's
|
||||
Aqua
|
||||
Archmage's
|
||||
Arcing
|
||||
Arctic
|
||||
Armadillo's
|
||||
Arming
|
||||
Armoured
|
||||
Athlete's
|
||||
Avalanching
|
||||
Avenger's
|
||||
Azure
|
||||
Bandit's
|
||||
Barbed
|
||||
Battlemage's
|
||||
Beating
|
||||
Beautiful
|
||||
Beetle's
|
||||
Beryl
|
||||
Betrayer's
|
||||
Bipedal
|
||||
Biting
|
||||
Bitter
|
||||
Blasting
|
||||
Blazing
|
||||
Blistering
|
||||
Bloodthirsty
|
||||
Blue
|
||||
Blunt
|
||||
Blurred
|
||||
Boggart's
|
||||
Bolting
|
||||
Brawler's
|
||||
Breathtaking
|
||||
Brinerot
|
||||
Brutal
|
||||
Bubbling
|
||||
Burning
|
||||
Burnished
|
||||
Butterfly's
|
||||
Buttressed
|
||||
Buzzing
|
||||
Calming
|
||||
Capricious
|
||||
Captivating
|
||||
Carapaced
|
||||
Carved
|
||||
Caster's
|
||||
Catalysed
|
||||
Catalyzing
|
||||
Caustic
|
||||
Cauterising
|
||||
Cautious
|
||||
Ceremonial
|
||||
Cerulean
|
||||
Chaining
|
||||
Chalybeous
|
||||
Champion's
|
||||
Chanter's
|
||||
Chaotic
|
||||
Charged
|
||||
Charging
|
||||
Cheetah's
|
||||
Chemist's
|
||||
Chilled
|
||||
Chilling
|
||||
Citaqualotl's
|
||||
Cleaving
|
||||
Clouded
|
||||
Cobalt
|
||||
Combatant's
|
||||
Conflagrating
|
||||
Conqueror's
|
||||
Corrupted
|
||||
Coursing
|
||||
Crab's
|
||||
Crackling
|
||||
Cremating
|
||||
Crocodile's
|
||||
Cruel
|
||||
Cryomancer's
|
||||
Cryomantic
|
||||
Crystalline
|
||||
Dancer's
|
||||
Darkened
|
||||
Dauntless
|
||||
Dazzling
|
||||
Deadly
|
||||
Deafening
|
||||
Deceiver's
|
||||
Deflecting
|
||||
Degenerative
|
||||
Demonic
|
||||
Devastating
|
||||
Dictator's
|
||||
Discharging
|
||||
Dissipating
|
||||
Djinn's
|
||||
Dragon's
|
||||
Dragonfly's
|
||||
Duelist's
|
||||
Eldritch
|
||||
Electrocuting
|
||||
Electromantic
|
||||
Elephant's
|
||||
Emanant
|
||||
Emperor's
|
||||
Empowered
|
||||
Empowering
|
||||
Encased
|
||||
Energetic
|
||||
Energising
|
||||
Enlightened
|
||||
Entombing
|
||||
Enveloped
|
||||
Ephemeral
|
||||
Esh's
|
||||
Ethereal
|
||||
Evanescent
|
||||
Evasive
|
||||
Exarch's
|
||||
Exemplary
|
||||
Experimenter's
|
||||
Exuberant
|
||||
Fawn's
|
||||
Fearless
|
||||
Feasting
|
||||
Fecund
|
||||
Fencer's
|
||||
Fencing
|
||||
Feral
|
||||
Fevered
|
||||
Fierce
|
||||
Filigree
|
||||
Flame Spinner's
|
||||
Flaming
|
||||
Flanking
|
||||
Flaring
|
||||
Flawless
|
||||
Flea's
|
||||
Fleet
|
||||
Fletcher's
|
||||
Fortified
|
||||
Freezing
|
||||
Frigid
|
||||
Frost Weaver's
|
||||
Frosted
|
||||
Frozen
|
||||
Fuelling
|
||||
Gazelle's
|
||||
Gentian
|
||||
Ghost's
|
||||
Girded
|
||||
Glaciated
|
||||
Gladiator's
|
||||
Gleaming
|
||||
Glimmering
|
||||
Glinting
|
||||
Glittering
|
||||
Glowing
|
||||
Glyphic
|
||||
Gremlin's
|
||||
Grounded
|
||||
Guatelitzi's
|
||||
Hailing
|
||||
Hale
|
||||
Halting
|
||||
Harming
|
||||
Harmonic
|
||||
Haunting
|
||||
Healthy
|
||||
Heated
|
||||
Heavy
|
||||
Hellion's
|
||||
Hero's
|
||||
Hexproof
|
||||
Hexwarded
|
||||
Hissing
|
||||
Honed
|
||||
Humming
|
||||
Hummingbird's
|
||||
Ibex's
|
||||
Icy
|
||||
Illusion's
|
||||
Illusory
|
||||
Impenetrable
|
||||
Impervious
|
||||
Impregnable
|
||||
Incandescent
|
||||
Incanter's
|
||||
Incinerating
|
||||
Incombustible
|
||||
Incorporeal
|
||||
Inculcated
|
||||
Indomitable
|
||||
Infernal
|
||||
Infixed
|
||||
Infused
|
||||
Infusing
|
||||
Ingrained
|
||||
Inspirational
|
||||
Inspired
|
||||
Inspiring
|
||||
Instilled
|
||||
Interpermeated
|
||||
Interpolated
|
||||
Ionising
|
||||
Jagged
|
||||
Jinxing
|
||||
Journeyman's
|
||||
Judging
|
||||
Lacquered
|
||||
Lamprey's
|
||||
Lava Caller's
|
||||
Layered
|
||||
Leadership
|
||||
Legend's
|
||||
Lethal
|
||||
Lich's
|
||||
Lively
|
||||
Lobstered
|
||||
Lunar
|
||||
Mage's
|
||||
Magician's
|
||||
Magmatic
|
||||
Magpie's
|
||||
Malicious
|
||||
Malignant
|
||||
Mammoth's
|
||||
Master's
|
||||
Matatl's
|
||||
Mazarine
|
||||
Mercenary's
|
||||
Merciless
|
||||
Mirage's
|
||||
Mirrored
|
||||
Molten
|
||||
Monk's
|
||||
Mosquito's
|
||||
Moth's
|
||||
Multifarious
|
||||
Mutewind
|
||||
Muttering
|
||||
Naga's
|
||||
Nautilus's
|
||||
Necromancer's
|
||||
Nightmare's
|
||||
Nihilist's
|
||||
Occultist's
|
||||
Opalescent
|
||||
Otherworldly
|
||||
Overlord's
|
||||
Overpowering
|
||||
Oyster's
|
||||
Panicked
|
||||
Paragon's
|
||||
Parched
|
||||
Parrying
|
||||
Perandus'
|
||||
Perpetual
|
||||
Phantasm's
|
||||
Phased
|
||||
Piercing
|
||||
Pirate's
|
||||
Pixie's
|
||||
Plated
|
||||
Polar
|
||||
Polished
|
||||
Prime
|
||||
Prior's
|
||||
Professor's
|
||||
Protective
|
||||
Pulsing
|
||||
Puncturing
|
||||
Punishing
|
||||
Pyroclastic
|
||||
Pyromantic
|
||||
Quintessential
|
||||
Radiating
|
||||
Ram's
|
||||
Rapturous
|
||||
Razor-sharp
|
||||
Reanimator's
|
||||
Reaver's
|
||||
Recovering
|
||||
Redblade
|
||||
Reinforced
|
||||
Remora's
|
||||
Resistant
|
||||
Resolute
|
||||
Resonant
|
||||
Resonating
|
||||
Resplendent
|
||||
Rhino's
|
||||
Ribbed
|
||||
Ripping
|
||||
Robust
|
||||
Rotund
|
||||
Runic
|
||||
Runner's
|
||||
Rupturing
|
||||
Sabotage
|
||||
Sanguine
|
||||
Sapphire
|
||||
Sapping
|
||||
Saturated
|
||||
Savage
|
||||
Scholar's
|
||||
Scintillating
|
||||
Scorching
|
||||
Scrapper's
|
||||
Screaming
|
||||
Searing
|
||||
Seething
|
||||
Seraphim's
|
||||
Serene
|
||||
Serrated
|
||||
Shade's
|
||||
Shadowy
|
||||
Shaman's
|
||||
Sharpened
|
||||
Sharpshooter's
|
||||
Shielding
|
||||
Shimmering
|
||||
Shining
|
||||
Shocking
|
||||
Shrieking
|
||||
Sinister
|
||||
Sizzling
|
||||
Skeletal
|
||||
Slicing
|
||||
Slithering
|
||||
Smiting
|
||||
Smoking
|
||||
Smouldering
|
||||
Snapping
|
||||
Snowy
|
||||
Solar
|
||||
Soldier's
|
||||
Sorcerer's
|
||||
Sparking
|
||||
Spectre's
|
||||
Spiny
|
||||
Spirited
|
||||
Splitting
|
||||
Sprinter's
|
||||
Squire's
|
||||
Stallion's
|
||||
Stalwart
|
||||
Stout
|
||||
Striking
|
||||
Strong-Willed
|
||||
Studded
|
||||
Subterranean
|
||||
Summoner's
|
||||
Sundering
|
||||
Surgeon's
|
||||
Surging
|
||||
Tacati's
|
||||
Tainted
|
||||
Technical
|
||||
Tempered
|
||||
Tempest King's
|
||||
Thaumaturgist's
|
||||
The Shaper's
|
||||
Thickened
|
||||
Thirsty
|
||||
Thorny
|
||||
Thunder Lord's
|
||||
Thundering
|
||||
Thwarting
|
||||
Titan's
|
||||
Topotante's
|
||||
Trapping
|
||||
Tul's
|
||||
Turncoat's
|
||||
Twinned
|
||||
Tyrannical
|
||||
Unassailable
|
||||
Undead
|
||||
Unfaltering
|
||||
Unleashed
|
||||
Unreal
|
||||
Unstoppable
|
||||
Unwavering
|
||||
Unworldly
|
||||
Urchin's
|
||||
Vaal
|
||||
Vampire's
|
||||
Vaporous
|
||||
Vicious
|
||||
Victor's
|
||||
Vigorous
|
||||
Vile
|
||||
Virile
|
||||
Vivacious
|
||||
Vivid
|
||||
Volcanic
|
||||
Volleying
|
||||
Wailing
|
||||
Warding
|
||||
Warlock's
|
||||
Warrior's
|
||||
Wasp's
|
||||
Weaponmaster's
|
||||
Weeping
|
||||
Whispering
|
||||
Wicked
|
||||
Winterbringer's
|
||||
Wizard's
|
||||
Wraith's
|
||||
Wright's
|
||||
Xopec's
|
||||
Xoph's
|
||||
Youthful
|
||||
Zaffre
|
||||
Zana's
|
||||
of Absorption
|
||||
of Abuse
|
||||
of Acclaim
|
||||
of Acclimatisation
|
||||
of Accuracy
|
||||
of Adamantite Skin
|
||||
of Adaption
|
||||
of Adrenaline
|
||||
of Amassment
|
||||
of Anger
|
||||
of Animation
|
||||
of Annihilation
|
||||
of Archaeology
|
||||
of Archery
|
||||
of Arcing
|
||||
of Ashes
|
||||
of Athletics
|
||||
of Authority
|
||||
of Balance
|
||||
of Bameth
|
||||
of Banishing
|
||||
of Banishment
|
||||
of Berserking
|
||||
of Blasting
|
||||
of Bleeding
|
||||
of Blinding
|
||||
of Bliss
|
||||
of Bloodlines
|
||||
of Burning
|
||||
of Calamity
|
||||
of Calm
|
||||
of Celebration
|
||||
of Champions
|
||||
of Chilling
|
||||
of Cinders
|
||||
of Citaqualotl
|
||||
of Coals
|
||||
of Collecting
|
||||
of Collision
|
||||
of Combat
|
||||
of Combusting
|
||||
of Commanders
|
||||
of Confidence
|
||||
of Conflagrating
|
||||
of Congealment
|
||||
of Consumption
|
||||
of Corundum Skin
|
||||
of Crafting
|
||||
of Craiceann
|
||||
of Craving
|
||||
of Cunning
|
||||
of Curing
|
||||
of Dampening
|
||||
of Darting
|
||||
of Dazing
|
||||
of Deadliness
|
||||
of Delaying
|
||||
of Demolishing
|
||||
of Desecration
|
||||
of Destruction
|
||||
of Dexterity
|
||||
of Disaster
|
||||
of Discharge
|
||||
of Dishonour
|
||||
of Distraction
|
||||
of Dousing
|
||||
of Drought
|
||||
of Ease
|
||||
of Efficiency
|
||||
of Elation
|
||||
of Electricity
|
||||
of Elemental Weakness
|
||||
of Embers
|
||||
of Enchanting
|
||||
of Endurance
|
||||
of Enfeeblement
|
||||
of Entropy
|
||||
of Ephij
|
||||
of Euphoria
|
||||
of Eviction
|
||||
of Excavation
|
||||
of Excitement
|
||||
of Exile
|
||||
of Expertise
|
||||
of Exposure
|
||||
of Expulsion
|
||||
of Extinguishing
|
||||
of Exuberance
|
||||
of Fame
|
||||
of Farrul
|
||||
of Fending
|
||||
of Fenumus
|
||||
of Ferocity
|
||||
of Finesse
|
||||
of Flames
|
||||
of Flight
|
||||
of Floe
|
||||
of Focus
|
||||
of Fog
|
||||
of Fortitude
|
||||
of Fracturing
|
||||
of Freezing
|
||||
of Frenzy
|
||||
of Fury
|
||||
of Gathering
|
||||
of Giants
|
||||
of Glaciation
|
||||
of Gluttony
|
||||
of Grandmastery
|
||||
of Grounding
|
||||
of Guarding
|
||||
of Guatelitzi
|
||||
of Haast
|
||||
of Haemophilia
|
||||
of Harm
|
||||
of Havoc
|
||||
of Haze
|
||||
of Heat
|
||||
of Hemomancy
|
||||
of Hindering
|
||||
of Hoarding
|
||||
of Hordes
|
||||
of Ice
|
||||
of Immolation
|
||||
of Impact
|
||||
of Impotence
|
||||
of Incision
|
||||
of Infamy
|
||||
of Instinct
|
||||
of Insulating
|
||||
of Insulation
|
||||
of Intelligence
|
||||
of Intercepting
|
||||
of Ire
|
||||
of Iron Skin
|
||||
of Joy
|
||||
of Legerdemain
|
||||
of Light
|
||||
of Lightning
|
||||
of Lioneye
|
||||
of Longevity
|
||||
of Malevolence
|
||||
of Malice
|
||||
of Maneuvering
|
||||
of Marshalling
|
||||
of Mastery
|
||||
of Matatl
|
||||
of Menace
|
||||
of Mending
|
||||
of Miring
|
||||
of Momentum
|
||||
of Mysticism
|
||||
of Needling
|
||||
of Nimbleness
|
||||
of Nirvana
|
||||
of Nourishment
|
||||
of Numbing
|
||||
of Onslaught
|
||||
of Opportunity
|
||||
of Orchestration
|
||||
of Order
|
||||
of Osmosis
|
||||
of Overflowing
|
||||
of Penetrating
|
||||
of Phasing
|
||||
of Piercing
|
||||
of Plunder
|
||||
of Poisoning
|
||||
of Potency
|
||||
of Power
|
||||
of Praxis
|
||||
of Precision
|
||||
of Preparation
|
||||
of Prestidigitation
|
||||
of Propulsion
|
||||
of Puhuarte
|
||||
of Radiance
|
||||
of Rage
|
||||
of Raiding
|
||||
of Rallying
|
||||
of Readiness
|
||||
of Recovery
|
||||
of Refilling
|
||||
of Reflexes
|
||||
of Regrowth
|
||||
of Rejuvenation
|
||||
of Rending
|
||||
of Renown
|
||||
of Resilience
|
||||
of Resistance
|
||||
of Restoration
|
||||
of Retaliation
|
||||
of Righteousness
|
||||
of Rime
|
||||
of Ruin
|
||||
of Runes
|
||||
of Rupturing
|
||||
of Rust
|
||||
of Saqawal
|
||||
of Savouring
|
||||
of Shaping
|
||||
of Shelter
|
||||
of Shining
|
||||
of Shocking
|
||||
of Sin
|
||||
of Sipping
|
||||
of Skill
|
||||
of Skirmishing
|
||||
of Slamming
|
||||
of Sleet
|
||||
of Smothering
|
||||
of Snow
|
||||
of Soaring
|
||||
of Sortilege
|
||||
of Sparks
|
||||
of Spellcraft
|
||||
of Spirit
|
||||
of Staggering
|
||||
of Stasis
|
||||
of Static
|
||||
of Staunching
|
||||
of Steadiness
|
||||
of Steel Skin
|
||||
of Stifling
|
||||
of Stinging
|
||||
of Stone Skin
|
||||
of Strength
|
||||
of Stunning
|
||||
of Success
|
||||
of Tacati
|
||||
of Talent
|
||||
of Taunting
|
||||
of Temporal Chains
|
||||
of Thick Skin
|
||||
of Tolerance
|
||||
of Toughness
|
||||
of Training
|
||||
of Triumph
|
||||
of Tzteosh
|
||||
of Unholy Might
|
||||
of Unmaking
|
||||
of Unwavering
|
||||
of Vampirism
|
||||
of Variegation
|
||||
of Venom
|
||||
of Vibrance
|
||||
of Victory
|
||||
of Vivaciousness
|
||||
of Voltage
|
||||
of Vulnerability
|
||||
of Walling
|
||||
of Warding
|
||||
of Warming
|
||||
of Weaponcraft
|
||||
of Weight
|
||||
of Wounding
|
||||
of Zeal
|
||||
of the Apocalypse
|
||||
of the Apt
|
||||
of the Assassin
|
||||
of the Augur
|
||||
of the Bear
|
||||
of the Beast
|
||||
of the Blur
|
||||
of the Boxer
|
||||
of the Brawler
|
||||
of the Brute
|
||||
of the Cloud
|
||||
of the Clouds
|
||||
of the Combatant
|
||||
of the Comet
|
||||
of the Crystal
|
||||
of the Deadeye
|
||||
of the Dragon
|
||||
of the Drake
|
||||
of the Elder
|
||||
of the Elements
|
||||
of the Falcon
|
||||
of the Fox
|
||||
of the Furnace
|
||||
of the Galaxy
|
||||
of the Gale
|
||||
of the Genius
|
||||
of the Gladiator
|
||||
of the Gods
|
||||
of the Godslayer
|
||||
of the Goliath
|
||||
of the Gorilla
|
||||
of the Guardian
|
||||
of the Hearth
|
||||
of the Heavens
|
||||
of the Hydra
|
||||
of the Ice
|
||||
of the Inferno
|
||||
of the Infinite
|
||||
of the Inquisitor
|
||||
of the Inuit
|
||||
of the Jaguar
|
||||
of the Kaleidoscope
|
||||
of the Kiln
|
||||
of the Leopard
|
||||
of the Leviathan
|
||||
of the Lightning
|
||||
of the Lion
|
||||
of the Lizard
|
||||
of the Lost
|
||||
of the Lynx
|
||||
of the Maelstrom
|
||||
of the Magma
|
||||
of the Marksman
|
||||
of the Meteor
|
||||
of the Mongoose
|
||||
of the Multiverse
|
||||
of the Newt
|
||||
of the Panther
|
||||
of the Penguin
|
||||
of the Phantom
|
||||
of the Philosopher
|
||||
of the Phoenix
|
||||
of the Polar Bear
|
||||
of the Polymath
|
||||
of the Prism
|
||||
of the Prodigy
|
||||
of the Pugilist
|
||||
of the Pupil
|
||||
of the Raider
|
||||
of the Rainbow
|
||||
of the Ranger
|
||||
of the Sage
|
||||
of the Salamander
|
||||
of the Savant
|
||||
of the Seal
|
||||
of the Sky
|
||||
of the Slayer
|
||||
of the Sniper
|
||||
of the Span
|
||||
of the Squall
|
||||
of the Starfish
|
||||
of the Storm
|
||||
of the Student
|
||||
of the Tempest
|
||||
of the Thunderhead
|
||||
of the Titan
|
||||
of the Troll
|
||||
of the Underground
|
||||
of the Universe
|
||||
of the Virtuoso
|
||||
of the Volcano
|
||||
of the Wall
|
||||
of the Walrus
|
||||
of the Whelpling
|
||||
of the Wind
|
||||
of the Worthy
|
||||
of the Wrestler
|
||||
of the Yeti
|
||||
of the Zephyr
|
||||
@@ -39,7 +39,7 @@ namespace Filtration.Services
|
||||
|
||||
_mainWindow.Show();
|
||||
|
||||
await _updateService.CheckForUpdates();
|
||||
await _updateService.CheckForUpdatesAsync();
|
||||
}
|
||||
|
||||
private void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs e)
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Filtration.Common.Services;
|
||||
using Filtration.Common.Utilities;
|
||||
using Filtration.Properties;
|
||||
|
||||
namespace Filtration.Services
|
||||
{
|
||||
@@ -11,15 +10,13 @@ namespace Filtration.Services
|
||||
{
|
||||
IEnumerable<string> ItemBaseTypes { get; }
|
||||
IEnumerable<string> ItemClasses { get; }
|
||||
IEnumerable<string> ItemMods { get; }
|
||||
}
|
||||
|
||||
internal class StaticDataService : IStaticDataService
|
||||
{
|
||||
private readonly IFileSystemService _fileSystemService;
|
||||
|
||||
public StaticDataService(IFileSystemService fileSystemService)
|
||||
public StaticDataService()
|
||||
{
|
||||
_fileSystemService = fileSystemService;
|
||||
PopulateStaticData();
|
||||
}
|
||||
|
||||
@@ -27,34 +24,13 @@ namespace Filtration.Services
|
||||
|
||||
public IEnumerable<string> ItemClasses { get; private set; }
|
||||
|
||||
public IEnumerable<string> ItemMods { get; private set; }
|
||||
|
||||
private void PopulateStaticData()
|
||||
{
|
||||
var itemBaseTypesPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\Filtration\ItemBaseTypes.txt";
|
||||
var itemClassesPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\Filtration\ItemClasses.txt";
|
||||
|
||||
string itemBaseTypes;
|
||||
try
|
||||
{
|
||||
itemBaseTypes = _fileSystemService.ReadFileAsString(itemBaseTypesPath);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
itemBaseTypes = string.Empty;
|
||||
}
|
||||
|
||||
ItemBaseTypes = new LineReader(() => new StringReader(itemBaseTypes)).ToList();
|
||||
|
||||
string itemClasses;
|
||||
try
|
||||
{
|
||||
itemClasses = _fileSystemService.ReadFileAsString(itemClassesPath);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
itemClasses = string.Empty;
|
||||
}
|
||||
|
||||
ItemClasses = new LineReader(() => new StringReader(itemClasses)).ToList();
|
||||
ItemBaseTypes = new LineReader(() => new StringReader(Resources.ItemBaseTypes)).ToList();
|
||||
ItemClasses = new LineReader(() => new StringReader(Resources.ItemClasses)).ToList();
|
||||
ItemMods = new LineReader(() => new StringReader(Resources.ItemMods)).ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using Filtration.Enums;
|
||||
using Filtration.Properties;
|
||||
using NLog;
|
||||
using Squirrel;
|
||||
@@ -52,7 +53,7 @@ namespace Filtration.Services
|
||||
|
||||
string LatestReleaseVersion { get; }
|
||||
|
||||
Task CheckForUpdates();
|
||||
Task CheckForUpdatesAsync();
|
||||
|
||||
Task DownloadUpdatesAsync();
|
||||
|
||||
@@ -63,13 +64,16 @@ namespace Filtration.Services
|
||||
|
||||
internal class UpdateService : IUpdateService
|
||||
{
|
||||
private readonly ISettingsService _settingsService;
|
||||
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
private const string _localUpdatePath = @"C:\Repos\Filtration\Releases";
|
||||
|
||||
private readonly ISettingsService _settingsService;
|
||||
private readonly UpdateSource _updateSource = UpdateSource.GitHub;
|
||||
|
||||
private ReleaseEntry _latestRelease;
|
||||
private UpdateInfo _updates;
|
||||
|
||||
private bool _downloadPrereleaseUpdates;
|
||||
private UpdateStatus _updateStatus;
|
||||
|
||||
public UpdateService(ISettingsService settingsService)
|
||||
@@ -96,35 +100,42 @@ namespace Filtration.Services
|
||||
|
||||
public string LatestReleaseVersion { get; private set; }
|
||||
|
||||
public async Task CheckForUpdates()
|
||||
public async Task CheckForUpdatesAsync()
|
||||
{
|
||||
if (UpdateStatus != UpdateStatus.NoUpdateAvailable)
|
||||
{
|
||||
throw new InvalidOperationException();
|
||||
}
|
||||
|
||||
|
||||
Logger.Debug("Checking for update...");
|
||||
UpdateStatus = UpdateStatus.CheckingForUpdate;
|
||||
|
||||
try
|
||||
{
|
||||
bool downloadPrereleaseUpdates;
|
||||
downloadPrereleaseUpdates = Settings.Default.DownloadPrereleaseUpdates;
|
||||
_downloadPrereleaseUpdates = Settings.Default.DownloadPrereleaseUpdates;
|
||||
#if DEBUG
|
||||
downloadPrereleaseUpdates = true;
|
||||
_downloadPrereleaseUpdates = true;
|
||||
#endif
|
||||
using (var mgr = await UpdateManager.GitHubUpdateManager("https://github.com/ben-wallis/Filtration", prerelease: downloadPrereleaseUpdates))
|
||||
|
||||
async Task CheckForUpdatesAsync(IUpdateManager updateManager)
|
||||
{
|
||||
_updates = await mgr.CheckForUpdate(progress: progress => UpdateProgressChanged?.Invoke(this, new UpdateProgressChangedEventArgs(progress)));
|
||||
_updates = await updateManager.CheckForUpdate(progress: progress => UpdateProgressChanged?.Invoke(this, new UpdateProgressChangedEventArgs(progress)));
|
||||
}
|
||||
|
||||
// Local file update source for testing
|
||||
//using (var mgr = new UpdateManager(_localUpdatePath))
|
||||
//{
|
||||
|
||||
// _updates = await mgr.CheckForUpdate(progress: progress => UpdateProgressChanged?.Invoke(this, new UpdateProgressChangedEventArgs(progress)));
|
||||
//}
|
||||
if (_updateSource == UpdateSource.GitHub)
|
||||
{
|
||||
using (var updateManager = await UpdateManager.GitHubUpdateManager("https://github.com/ben-wallis/Filtration", prerelease: _downloadPrereleaseUpdates))
|
||||
{
|
||||
await CheckForUpdatesAsync(updateManager);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
using (var updateManager = new UpdateManager(_localUpdatePath))
|
||||
{
|
||||
await CheckForUpdatesAsync(updateManager);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@@ -133,26 +144,13 @@ namespace Filtration.Services
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (_updates.ReleasesToApply.Any())
|
||||
{
|
||||
_latestRelease = _updates.ReleasesToApply.OrderBy(x => x.Version).Last();
|
||||
LatestReleaseVersion = _latestRelease.Version.ToString();
|
||||
|
||||
Logger.Debug($"Update found ({LatestReleaseVersion}), fetching release notes...");
|
||||
|
||||
try
|
||||
{
|
||||
var releaseNotes = _latestRelease.GetReleaseNotes(_localUpdatePath);
|
||||
LatestReleaseNotes = ProcessReleaseNotes(releaseNotes);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Logger.Error(e);
|
||||
UpdateStatus = UpdateStatus.Error;
|
||||
return;
|
||||
}
|
||||
|
||||
Logger.Debug($"Update found ({LatestReleaseVersion})");
|
||||
|
||||
UpdateStatus = UpdateStatus.UpdateAvailable;
|
||||
}
|
||||
else
|
||||
@@ -162,7 +160,7 @@ namespace Filtration.Services
|
||||
}
|
||||
}
|
||||
|
||||
private string ProcessReleaseNotes(string rawReleaseNotes)
|
||||
private static string ProcessReleaseNotes(string rawReleaseNotes)
|
||||
{
|
||||
var regex = new Regex(@"<!\[CDATA\[(.*)]]>", RegexOptions.Singleline);
|
||||
var matches = regex.Match(rawReleaseNotes);
|
||||
@@ -184,11 +182,31 @@ namespace Filtration.Services
|
||||
|
||||
UpdateStatus = UpdateStatus.Downloading;
|
||||
|
||||
async Task DownloadUpdatesAsync(IUpdateManager updateManager)
|
||||
{
|
||||
Logger.Debug("Downloading update...");
|
||||
await updateManager.DownloadReleases(_updates.ReleasesToApply, OnProgressChanged);
|
||||
|
||||
Logger.Debug("Fetching release notes...");
|
||||
var releaseNotes = _updates.FetchReleaseNotes();
|
||||
LatestReleaseNotes = ProcessReleaseNotes(releaseNotes[_latestRelease]);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
using (var updateManager = new UpdateManager(_localUpdatePath))
|
||||
if (_updateSource == UpdateSource.GitHub)
|
||||
{
|
||||
await updateManager.DownloadReleases(_updates.ReleasesToApply, OnProgressChanged);
|
||||
using (var updateManager = await UpdateManager.GitHubUpdateManager("https://github.com/ben-wallis/Filtration", prerelease: _downloadPrereleaseUpdates))
|
||||
{
|
||||
await DownloadUpdatesAsync(updateManager);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
using (var updateManager = new UpdateManager(_localUpdatePath))
|
||||
{
|
||||
await DownloadUpdatesAsync(updateManager);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -215,11 +233,22 @@ namespace Filtration.Services
|
||||
// wipes out user settings due to the application directory changing with each update
|
||||
_settingsService.BackupSettings();
|
||||
|
||||
Logger.Debug("Applying update...");
|
||||
try
|
||||
{
|
||||
using (var updateManager = new UpdateManager(_localUpdatePath))
|
||||
if (_updateSource == UpdateSource.GitHub)
|
||||
{
|
||||
await updateManager.ApplyReleases(_updates, OnProgressChanged);
|
||||
using (var mgr = await UpdateManager.GitHubUpdateManager("https://github.com/ben-wallis/Filtration", prerelease: _downloadPrereleaseUpdates))
|
||||
{
|
||||
await mgr.ApplyReleases(_updates, OnProgressChanged);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
using (var updateManager = new UpdateManager(_localUpdatePath))
|
||||
{
|
||||
await updateManager.ApplyReleases(_updates, OnProgressChanged);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -229,6 +258,7 @@ namespace Filtration.Services
|
||||
return;
|
||||
}
|
||||
|
||||
Logger.Debug("Update complete");
|
||||
UpdateStatus = UpdateStatus.UpdateComplete;
|
||||
}
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
|
||||
<!-- Explicit Mods Template -->
|
||||
<DataTemplate DataType="{x:Type blockItemTypes:HasExplicitModBlockItem}">
|
||||
<userControls:EditableListBoxControl Margin="5,5,5,5" ItemsSource="{Binding Items}" />
|
||||
<userControls:EditableListBoxControl Margin="5,5,5,5" ItemsSource="{Binding Items}" AutoCompleteItemsSource="{Binding ElementName=TopLevelGrid, Path=DataContext.AutocompleteItemMods}" />
|
||||
</DataTemplate>
|
||||
|
||||
<!-- Socket Groups Template -->
|
||||
@@ -97,14 +97,15 @@
|
||||
DisplayMemberPath="Description"
|
||||
SelectedValue="{Binding Color}"
|
||||
SelectedValuePath="Value" />
|
||||
<userControls:ThemeComponentSelectionControl ThemeComponent="{Binding ThemeComponent}" Margin="0,2,0,0">
|
||||
<!-- Disabled until there is a solution to GitHub Issue #68 (certain block items do not support trailing comments) -->
|
||||
<!--<userControls:ThemeComponentSelectionControl ThemeComponent="{Binding ThemeComponent}" Margin="0,2,0,0">
|
||||
<userControls:ThemeComponentSelectionControl.AvailableThemeComponents>
|
||||
<MultiBinding Converter="{StaticResource AvailableThemeComponentsConverter}">
|
||||
<Binding Path="DataContext.Script.ThemeComponents" RelativeSource="{RelativeSource AncestorType={x:Type views:ItemFilterScriptView}}"/>
|
||||
<Binding Path="." />
|
||||
</MultiBinding>
|
||||
</userControls:ThemeComponentSelectionControl.AvailableThemeComponents>
|
||||
</userControls:ThemeComponentSelectionControl>
|
||||
</userControls:ThemeComponentSelectionControl>-->
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
|
||||
@@ -133,14 +134,15 @@
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<xctk:ShortUpDown Grid.Column="0" Value="{Binding Value}" Minimum="{Binding Minimum}" Maximum="{Binding Maximum}" Margin="0,0,10,0" />
|
||||
<userControls:ThemeComponentSelectionControl Grid.Column="1" ThemeComponent="{Binding ThemeComponent}">
|
||||
<!-- Disabled until there is a solution to GitHub Issue #68 (certain block items do not support trailing comments) -->
|
||||
<!--<userControls:ThemeComponentSelectionControl Grid.Column="1" ThemeComponent="{Binding ThemeComponent}">
|
||||
<userControls:ThemeComponentSelectionControl.AvailableThemeComponents>
|
||||
<MultiBinding Converter="{StaticResource AvailableThemeComponentsConverter}">
|
||||
<Binding Path="DataContext.Script.ThemeComponents" RelativeSource="{RelativeSource AncestorType={x:Type views:ItemFilterScriptView}}"/>
|
||||
<Binding Path="." />
|
||||
</MultiBinding>
|
||||
</userControls:ThemeComponentSelectionControl.AvailableThemeComponents>
|
||||
</userControls:ThemeComponentSelectionControl>
|
||||
</userControls:ThemeComponentSelectionControl>-->
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
|
||||
@@ -197,14 +199,15 @@
|
||||
DisplayMemberPath="Description"
|
||||
SelectedValue="{Binding Shape}"
|
||||
SelectedValuePath="Value" />
|
||||
<userControls:ThemeComponentSelectionControl ThemeComponent="{Binding ThemeComponent}" Margin="0,2,0,0">
|
||||
<!-- Disabled until there is a solution to GitHub Issue #68 (certain block items do not support trailing comments) -->
|
||||
<!--<userControls:ThemeComponentSelectionControl ThemeComponent="{Binding ThemeComponent}" Margin="0,2,0,0">
|
||||
<userControls:ThemeComponentSelectionControl.AvailableThemeComponents>
|
||||
<MultiBinding Converter="{StaticResource AvailableThemeComponentsConverter}">
|
||||
<Binding Path="DataContext.Script.ThemeComponents" RelativeSource="{RelativeSource AncestorType={x:Type views:ItemFilterScriptView}}"/>
|
||||
<Binding Path="." />
|
||||
</MultiBinding>
|
||||
</userControls:ThemeComponentSelectionControl.AvailableThemeComponents>
|
||||
</userControls:ThemeComponentSelectionControl>
|
||||
</userControls:ThemeComponentSelectionControl>-->
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ using GalaSoft.MvvmLight.CommandWpf;
|
||||
using GalaSoft.MvvmLight.Messaging;
|
||||
using Microsoft.Win32;
|
||||
using Xceed.Wpf.Toolkit;
|
||||
using static System.Int32;
|
||||
|
||||
namespace Filtration.ViewModels
|
||||
{
|
||||
@@ -59,8 +60,7 @@ namespace Filtration.ViewModels
|
||||
|
||||
public override void Initialise(IItemFilterBlockBase itemFilterBlockBase, IItemFilterScriptViewModel parentScriptViewModel)
|
||||
{
|
||||
var itemFilterBlock = itemFilterBlockBase as IItemFilterBlock;
|
||||
if (itemFilterBlock == null || parentScriptViewModel == null)
|
||||
if (!(itemFilterBlockBase is IItemFilterBlock itemFilterBlock) || parentScriptViewModel == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(itemFilterBlock));
|
||||
}
|
||||
@@ -136,7 +136,7 @@ namespace Filtration.ViewModels
|
||||
|
||||
public bool AudioVisualBlockItemsGridVisible
|
||||
{
|
||||
get { return _audioVisualBlockItemsGridVisible; }
|
||||
get => _audioVisualBlockItemsGridVisible;
|
||||
set
|
||||
{
|
||||
_audioVisualBlockItemsGridVisible = value;
|
||||
@@ -150,7 +150,7 @@ namespace Filtration.ViewModels
|
||||
|
||||
public bool DisplaySettingsPopupOpen
|
||||
{
|
||||
get { return _displaySettingsPopupOpen; }
|
||||
get => _displaySettingsPopupOpen;
|
||||
set
|
||||
{
|
||||
_displaySettingsPopupOpen = value;
|
||||
@@ -162,6 +162,8 @@ namespace Filtration.ViewModels
|
||||
|
||||
public IEnumerable<string> AutoCompleteItemBaseTypes => _staticDataService.ItemBaseTypes;
|
||||
|
||||
public IEnumerable<string> AutocompleteItemMods => _staticDataService.ItemMods;
|
||||
|
||||
public List<Type> BlockItemTypesAvailable => new List<Type>
|
||||
{
|
||||
typeof (ItemLevelBlockItem),
|
||||
@@ -203,7 +205,7 @@ namespace Filtration.ViewModels
|
||||
|
||||
public bool BlockEnabled
|
||||
{
|
||||
get { return Block.Enabled; }
|
||||
get => Block.Enabled;
|
||||
set
|
||||
{
|
||||
if (Block.Enabled != value)
|
||||
@@ -217,10 +219,7 @@ namespace Filtration.ViewModels
|
||||
|
||||
public string BlockDescription
|
||||
{
|
||||
get
|
||||
{
|
||||
return Block.Description;
|
||||
}
|
||||
get => Block.Description;
|
||||
set
|
||||
{
|
||||
if (Block.Description != value)
|
||||
@@ -267,8 +266,7 @@ namespace Filtration.ViewModels
|
||||
|
||||
newBlockItem.PropertyChanged += OnBlockItemChanged;
|
||||
|
||||
var customSoundBlockItem = newBlockItem as CustomSoundBlockItem;
|
||||
if(customSoundBlockItem != null && _parentScriptViewModel.CustomSoundsAvailable.Count > 0)
|
||||
if(newBlockItem is CustomSoundBlockItem customSoundBlockItem && _parentScriptViewModel.CustomSoundsAvailable.Count > 0)
|
||||
{
|
||||
customSoundBlockItem.Value = _parentScriptViewModel.CustomSoundsAvailable[0];
|
||||
}
|
||||
@@ -352,7 +350,7 @@ namespace Filtration.ViewModels
|
||||
var replaceColorsWindow = new ReplaceColorsWindow { DataContext = _replaceColorsViewModel };
|
||||
replaceColorsWindow.ShowDialog();
|
||||
}
|
||||
|
||||
|
||||
private bool AddBlockItemAllowed(Type type)
|
||||
{
|
||||
var blockItem = (IItemFilterBlockItem)Activator.CreateInstance(type);
|
||||
@@ -362,16 +360,14 @@ namespace Filtration.ViewModels
|
||||
|
||||
private string ComputeFilePartFromNumber(string identifier)
|
||||
{
|
||||
if (Int32.TryParse(identifier, out int x))
|
||||
if (TryParse(identifier, out int x))
|
||||
{
|
||||
if (x <= 9)
|
||||
{
|
||||
return "AlertSound_0" + x + ".mp3";
|
||||
}
|
||||
else
|
||||
{
|
||||
return "AlertSound_" + x + ".mp3";
|
||||
}
|
||||
|
||||
return "AlertSound_" + x + ".mp3";
|
||||
}
|
||||
|
||||
return "";
|
||||
@@ -429,11 +425,9 @@ namespace Filtration.ViewModels
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
_mediaPlayer.Open(new Uri(prefix + filePart, UriKind.Relative));
|
||||
_mediaPlayer.Play();
|
||||
}
|
||||
|
||||
_mediaPlayer.Open(new Uri(prefix + filePart, UriKind.Relative));
|
||||
_mediaPlayer.Play();
|
||||
}
|
||||
|
||||
private void OnPlayPositionalSoundCommand()
|
||||
@@ -446,11 +440,9 @@ namespace Filtration.ViewModels
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
_mediaPlayer.Open(new Uri(prefix + filePart, UriKind.Relative));
|
||||
_mediaPlayer.Play();
|
||||
}
|
||||
|
||||
_mediaPlayer.Open(new Uri(prefix + filePart, UriKind.Relative));
|
||||
_mediaPlayer.Play();
|
||||
}
|
||||
|
||||
private void OnBlockEnabledStatusChanged(object sender, EventArgs e)
|
||||
@@ -460,13 +452,12 @@ namespace Filtration.ViewModels
|
||||
|
||||
private void OnBlockItemChanged(object sender, EventArgs e)
|
||||
{
|
||||
var itemFilterBlockItem = sender as IItemFilterBlockItem;
|
||||
if ( itemFilterBlockItem != null && itemFilterBlockItem.IsDirty)
|
||||
if (sender is IItemFilterBlockItem itemFilterBlockItem && itemFilterBlockItem.IsDirty)
|
||||
{
|
||||
IsDirty = true;
|
||||
}
|
||||
var customSoundBlockItem = sender as CustomSoundBlockItem;
|
||||
if (customSoundBlockItem != null)
|
||||
|
||||
if (sender is CustomSoundBlockItem customSoundBlockItem)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(customSoundBlockItem.Value) && _parentScriptViewModel.CustomSoundsAvailable.IndexOf(customSoundBlockItem.Value) < 0)
|
||||
{
|
||||
@@ -505,12 +496,11 @@ namespace Filtration.ViewModels
|
||||
|
||||
private void OnCustomSoundFileDialog()
|
||||
{
|
||||
OpenFileDialog fileDialog = new OpenFileDialog();
|
||||
fileDialog.DefaultExt = ".mp3";
|
||||
var poePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments).ToString() + @"\My Games\Path of Exile\";
|
||||
OpenFileDialog fileDialog = new OpenFileDialog {DefaultExt = ".mp3"};
|
||||
var poePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\My Games\Path of Exile\";
|
||||
fileDialog.InitialDirectory = poePath;
|
||||
|
||||
Nullable<bool> result = fileDialog.ShowDialog();
|
||||
bool? result = fileDialog.ShowDialog();
|
||||
if (result == true)
|
||||
{
|
||||
var fileName = fileDialog.FileName;
|
||||
@@ -531,7 +521,7 @@ namespace Filtration.ViewModels
|
||||
|
||||
private void OnPlayCustomSoundCommand()
|
||||
{
|
||||
var poePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments).ToString() + @"\My Games\Path of Exile\";
|
||||
var poePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\My Games\Path of Exile\";
|
||||
var identifier = BlockItems.OfType<CustomSoundBlockItem>().First().Value;
|
||||
|
||||
if(!Path.IsPathRooted(identifier))
|
||||
@@ -567,9 +557,11 @@ namespace Filtration.ViewModels
|
||||
var newGroup = new ItemFilterBlockGroup(BlockGroupSearch, null, AdvancedBlockGroup, false);
|
||||
if (baseBlock.BlockGroup == null)
|
||||
{
|
||||
baseBlock.BlockGroup = new ItemFilterBlockGroup("", null, false, true);
|
||||
baseBlock.BlockGroup.IsShowChecked = baseBlock.Action == BlockAction.Show;
|
||||
baseBlock.BlockGroup.IsEnableChecked = BlockEnabled;
|
||||
baseBlock.BlockGroup = new ItemFilterBlockGroup("", null, false, true)
|
||||
{
|
||||
IsShowChecked = baseBlock.Action == BlockAction.Show,
|
||||
IsEnableChecked = BlockEnabled
|
||||
};
|
||||
}
|
||||
newGroup.AddOrJoinBlockGroup(baseBlock.BlockGroup);
|
||||
blockToAdd.AddOrJoinBlockGroup(newGroup);
|
||||
@@ -609,8 +601,7 @@ namespace Filtration.ViewModels
|
||||
|
||||
private void UpdateBlockGroups()
|
||||
{
|
||||
var baseBlock = Block as ItemFilterBlock;
|
||||
if (baseBlock == null)
|
||||
if (!(Block is ItemFilterBlock baseBlock))
|
||||
return;
|
||||
|
||||
var currentGroup = baseBlock.BlockGroup;
|
||||
@@ -636,7 +627,7 @@ namespace Filtration.ViewModels
|
||||
|
||||
BlockGroups = new ObservableCollection<ItemFilterBlockGroup>(groupList);
|
||||
BlockGroupSuggestions = new ObservableCollection<string>();
|
||||
|
||||
|
||||
foreach(var child in topGroup.ChildGroups)
|
||||
{
|
||||
if(!child.IsLeafNode)
|
||||
@@ -644,7 +635,7 @@ namespace Filtration.ViewModels
|
||||
BlockGroupSuggestions.Add(child.GroupName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
RaisePropertyChanged(nameof(BlockGroups));
|
||||
RaisePropertyChanged(nameof(BlockGroupSuggestions));
|
||||
}
|
||||
|
||||
@@ -143,6 +143,7 @@ namespace Filtration.ViewModels
|
||||
{
|
||||
RaisePropertyChanged(nameof(SelectedBlockViewModels));
|
||||
RaisePropertyChanged(nameof(LastSelectedBlockViewModel));
|
||||
Messenger.Default.Send(new NotificationMessage("LastSelectedBlockChanged"));
|
||||
};
|
||||
_lastAddedBlocks = new List<IItemFilterBlockViewModelBase>();
|
||||
_showAdvanced = Settings.Default.ShowAdvanced;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Windows.Media.Imaging;
|
||||
using Filtration.Parser.Interface.Services;
|
||||
using GalaSoft.MvvmLight.Messaging;
|
||||
@@ -28,19 +29,10 @@ namespace Filtration.ViewModels.ToolPanes
|
||||
|
||||
Messenger.Default.Register<NotificationMessage>(this, message =>
|
||||
{
|
||||
switch (message.Notification)
|
||||
{
|
||||
case "LastSelectedBlockChanged":
|
||||
{
|
||||
OnLastSelectedBlockChanged(this, EventArgs.Empty);
|
||||
break;
|
||||
}
|
||||
case "ActiveDocumentChanged":
|
||||
{
|
||||
OnLastSelectedBlockChanged(this, EventArgs.Empty);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (message.Notification == "LastSelectedBlockChanged")
|
||||
OnLastSelectedBlockChanged(this, EventArgs.Empty);
|
||||
else if (message.Notification == "ActiveDocumentChanged")
|
||||
OnLastSelectedBlockChanged(this, EventArgs.Empty);
|
||||
});
|
||||
|
||||
}
|
||||
@@ -49,7 +41,7 @@ namespace Filtration.ViewModels.ToolPanes
|
||||
|
||||
public string PreviewText
|
||||
{
|
||||
get { return _previewText; }
|
||||
get => _previewText;
|
||||
private set
|
||||
{
|
||||
_previewText = value;
|
||||
@@ -64,15 +56,17 @@ namespace Filtration.ViewModels.ToolPanes
|
||||
|
||||
private void OnLastSelectedBlockChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (AvalonDockWorkspaceViewModel.ActiveScriptViewModel?.LastSelectedBlockViewModel == null)
|
||||
if (AvalonDockWorkspaceViewModel.ActiveScriptViewModel?.SelectedBlockViewModels == null ||
|
||||
AvalonDockWorkspaceViewModel.ActiveScriptViewModel.SelectedBlockViewModels.Count == 0 ||
|
||||
AvalonDockWorkspaceViewModel.ActiveScriptViewModel.SelectedBlockViewModels.FirstOrDefault() == null)
|
||||
{
|
||||
PreviewText = string.Empty;
|
||||
return;
|
||||
}
|
||||
|
||||
PreviewText =
|
||||
_itemFilterBlockTranslator.TranslateItemFilterBlockBaseToString(
|
||||
AvalonDockWorkspaceViewModel.ActiveScriptViewModel.LastSelectedBlockViewModel.BaseBlock);
|
||||
|
||||
PreviewText = AvalonDockWorkspaceViewModel.ActiveScriptViewModel.SelectedBlockViewModels
|
||||
.Select(s => _itemFilterBlockTranslator.TranslateItemFilterBlockBaseToString(s.BaseBlock))
|
||||
.Aggregate((prev, curr) => prev + Environment.NewLine + Environment.NewLine + curr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace Filtration.ViewModels
|
||||
updateService.UpdateProgressChanged += UpdateServiceOnUpdateProgressChanged;
|
||||
updateService.UpdateStatusChanged += UpdateServiceOnUpdateStatusChanged;
|
||||
|
||||
|
||||
|
||||
HideUpdateWindowCommand = new RelayCommand(OnHideUpdateWindowCommand, () => UpdateStatus == UpdateStatus.UpdateAvailable || UpdateStatus == UpdateStatus.Error);
|
||||
NextStepCommand = new RelayCommand(async () => await OnNextStepCommandAsync(), () => NextStepCommandEnabled);
|
||||
|
||||
@@ -100,39 +100,39 @@ namespace Filtration.ViewModels
|
||||
}
|
||||
|
||||
private bool NextStepCommandEnabled => UpdateStatus == UpdateStatus.UpdateAvailable || UpdateStatus == UpdateStatus.ReadyToApplyUpdate || UpdateStatus == UpdateStatus.UpdateComplete;
|
||||
|
||||
|
||||
private async Task OnNextStepCommandAsync()
|
||||
{
|
||||
switch (UpdateStatus)
|
||||
{
|
||||
case UpdateStatus.UpdateAvailable:
|
||||
{
|
||||
await _updateService.DownloadUpdatesAsync();
|
||||
break;
|
||||
}
|
||||
{
|
||||
await _updateService.DownloadUpdatesAsync();
|
||||
break;
|
||||
}
|
||||
case UpdateStatus.ReadyToApplyUpdate:
|
||||
{
|
||||
if (!_updateTabShown)
|
||||
{
|
||||
// When the update has downloaded and is ready to apply, clicking the button
|
||||
// closes the update popup and shows the update tab.
|
||||
_avalonDockWorkspaceViewModel.AddDocument(this);
|
||||
Visible = false;
|
||||
_updateTabShown = true;
|
||||
NextStepButtonText = "Update";
|
||||
}
|
||||
else
|
||||
{
|
||||
await _updateService.ApplyUpdatesAsync();
|
||||
}
|
||||
if (!_updateTabShown)
|
||||
{
|
||||
// When the update has downloaded and is ready to apply, clicking the button
|
||||
// closes the update popup and shows the update tab.
|
||||
_avalonDockWorkspaceViewModel.AddDocument(this);
|
||||
Visible = false;
|
||||
_updateTabShown = true;
|
||||
NextStepButtonText = "Update";
|
||||
}
|
||||
else
|
||||
{
|
||||
await _updateService.ApplyUpdatesAsync();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case UpdateStatus.UpdateComplete:
|
||||
{
|
||||
_updateService.RestartAfterUpdate();
|
||||
break;
|
||||
}
|
||||
{
|
||||
_updateService.RestartAfterUpdate();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -144,7 +144,6 @@ namespace Filtration.ViewModels
|
||||
{
|
||||
Visible = true;
|
||||
NextStepButtonText = "Download";
|
||||
RaisePropertyChanged(nameof(ReleaseNotes));
|
||||
RaisePropertyChanged(nameof(Version));
|
||||
break;
|
||||
}
|
||||
@@ -156,6 +155,7 @@ namespace Filtration.ViewModels
|
||||
}
|
||||
case UpdateStatus.ReadyToApplyUpdate:
|
||||
{
|
||||
RaisePropertyChanged(nameof(ReleaseNotes));
|
||||
NextStepButtonText = "Update Ready";
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -8,6 +8,6 @@
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="300" d:DesignWidth="300">
|
||||
<Grid>
|
||||
<TextBlock Text="{Binding PreviewText}" ToolTip="{Binding PreviewText}" Margin="10" />
|
||||
<TextBox IsReadOnly="True" Text="{Binding PreviewText, Mode=OneWay}" ToolTip="{Binding PreviewText}" Padding="5" Background="Transparent" BorderThickness="0" />
|
||||
</Grid>
|
||||
</UserControl>
|
||||
|
||||
11
README.md
11
README.md
@@ -2,10 +2,9 @@
|
||||
|
||||
Filtration is an editor for Path of Exile item filter scripts.
|
||||
|
||||
## Current Release (Released 2018-08-30)
|
||||
<b>Installer</b> <a href="https://github.com/ben-wallis/Filtration/releases/download/0.19/filtration_0.19_setup.exe">filtration_0.19_setup.exe</a>
|
||||
|
||||
<b>Zip File</b> <a href="https://github.com/ben-wallis/Filtration/releases/download/0.19/filtration_0.19.zip">filtration_0.19.zip</a>
|
||||
## Current Release (Released 2018-09-30)
|
||||
<b>Installer</b><br>
|
||||
<a href="https://github.com/ben-wallis/Filtration/releases/download/1.0.2/Setup.exe">Setup.exe</a>
|
||||
|
||||
## System Requirements
|
||||
Filtration requires .NET Framework 4.6.1 installed.
|
||||
@@ -25,10 +24,10 @@ If you'd like to make your script fully compatible with Filtration, please take
|
||||
## Screenshots
|
||||
|
||||
##### Main Window
|
||||
<img src="http://i.imgur.com/eAsMoSo.png" />
|
||||
<img src="https://i.imgur.com/d3tKEab.png" />
|
||||
|
||||
##### Theme Editor
|
||||
<img src="http://i.imgur.com/FJWJknO.png" />
|
||||
<img src="https://i.imgur.com/Pi9wds1.png" />
|
||||
|
||||
## Contact
|
||||
You can find me on irc.freenode.net in #filtration
|
||||
|
||||
Reference in New Issue
Block a user