From 89b686cd0af7d7a2615c80b42f1b9ca0a6fa022d Mon Sep 17 00:00:00 2001 From: Justin Swanson <justin.c.swanson@gmail.com> Date: Fri, 11 Oct 2019 17:18:51 -0500 Subject: [PATCH] Added ReactiveUI and DynamicData. ViewModel made ReactiveObject --- Wabbajack.Test/app.config | 4 ++++ Wabbajack/App.config | 4 ++++ Wabbajack/AppState.cs | 9 +++++---- Wabbajack/NexusApi/NexusApi.cs | 7 ++++--- Wabbajack/ViewModel.cs | 16 ++++++++++----- Wabbajack/Wabbajack.csproj | 37 ++++++++++++++++++++++++++++++++++ Wabbajack/packages.config | 11 ++++++++++ 7 files changed, 76 insertions(+), 12 deletions(-) diff --git a/Wabbajack.Test/app.config b/Wabbajack.Test/app.config index e936cc13..ec5c75f5 100644 --- a/Wabbajack.Test/app.config +++ b/Wabbajack.Test/app.config @@ -6,6 +6,10 @@ <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" /> </dependentAssembly> + <dependentAssembly> + <assemblyIdentity name="System.Reactive" publicKeyToken="94bc3704cddfc263" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" /> + </dependentAssembly> </assemblyBinding> </runtime> </configuration> \ No newline at end of file diff --git a/Wabbajack/App.config b/Wabbajack/App.config index b0634730..5905ef43 100644 --- a/Wabbajack/App.config +++ b/Wabbajack/App.config @@ -10,6 +10,10 @@ <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" /> </dependentAssembly> + <dependentAssembly> + <assemblyIdentity name="System.Reactive" publicKeyToken="94bc3704cddfc263" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" /> + </dependentAssembly> </assemblyBinding> </runtime> diff --git a/Wabbajack/AppState.cs b/Wabbajack/AppState.cs index 6ecc34ab..1b781501 100644 --- a/Wabbajack/AppState.cs +++ b/Wabbajack/AppState.cs @@ -1,4 +1,5 @@ -using System; +using ReactiveUI; +using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; @@ -101,8 +102,8 @@ namespace Wabbajack set { _htmlReport = value; - RaisePropertyChanged(); - RaisePropertyChanged(nameof(ShowReportButton)); + this.RaisePropertyChanged(); + this.RaisePropertyChanged(nameof(ShowReportButton)); } } @@ -292,7 +293,7 @@ namespace Wabbajack set { _splashScreenImage = value; - RaisePropertyChanged(); + this.RaisePropertyChanged(); } } diff --git a/Wabbajack/NexusApi/NexusApi.cs b/Wabbajack/NexusApi/NexusApi.cs index 08713a1c..ead13582 100644 --- a/Wabbajack/NexusApi/NexusApi.cs +++ b/Wabbajack/NexusApi/NexusApi.cs @@ -1,4 +1,5 @@ -using System; +using ReactiveUI; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; @@ -136,8 +137,8 @@ namespace Wabbajack.NexusApi _dailyRemaining = Math.Min(dailyRemaining, hourlyRemaining); _hourlyRemaining = Math.Min(dailyRemaining, hourlyRemaining); } - RaisePropertyChanged(nameof(DailyRemaining)); - RaisePropertyChanged(nameof(HourlyRemaining)); + this.RaisePropertyChanged(nameof(DailyRemaining)); + this.RaisePropertyChanged(nameof(HourlyRemaining)); } #endregion diff --git a/Wabbajack/ViewModel.cs b/Wabbajack/ViewModel.cs index 6f76989c..e7689f3e 100644 --- a/Wabbajack/ViewModel.cs +++ b/Wabbajack/ViewModel.cs @@ -1,20 +1,26 @@ -using System; +using ReactiveUI; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; +using System.Reactive.Disposables; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; namespace Wabbajack { - public class ViewModel : INotifyPropertyChanged + public class ViewModel : ReactiveObject, IDisposable { - public event PropertyChangedEventHandler PropertyChanged; + private readonly Lazy<CompositeDisposable> _CompositeDisposable = new Lazy<CompositeDisposable>(); + public CompositeDisposable CompositeDisposable => _CompositeDisposable.Value; - protected void RaisePropertyChanged([CallerMemberName] string name = null) + public virtual void Dispose() { - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); + if (_CompositeDisposable.IsValueCreated) + { + _CompositeDisposable.Value.Dispose(); + } } protected void RaiseAndSetIfChanged<T>( diff --git a/Wabbajack/Wabbajack.csproj b/Wabbajack/Wabbajack.csproj index 4557dd5d..d8b2059e 100644 --- a/Wabbajack/Wabbajack.csproj +++ b/Wabbajack/Wabbajack.csproj @@ -105,6 +105,9 @@ <Reference Include="Costura, Version=4.0.0.0, Culture=neutral, PublicKeyToken=9919ef960d84173d, processorArchitecture=MSIL"> <HintPath>..\packages\Costura.Fody.4.0.0\lib\net40\Costura.dll</HintPath> </Reference> + <Reference Include="DynamicData, Version=6.13.0.0, Culture=neutral, processorArchitecture=MSIL"> + <HintPath>..\packages\DynamicData.6.13.17\lib\net461\DynamicData.dll</HintPath> + </Reference> <Reference Include="ICSharpCode.SharpZipLib, Version=1.2.0.246, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL"> <HintPath>..\packages\SharpZipLib.1.2.0\lib\net45\ICSharpCode.SharpZipLib.dll</HintPath> </Reference> @@ -132,9 +135,28 @@ <Reference Include="Newtonsoft.Json.Bson, Version=1.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <HintPath>..\packages\Newtonsoft.Json.Bson.1.0.2\lib\net45\Newtonsoft.Json.Bson.dll</HintPath> </Reference> + <Reference Include="Pharmacist.Common, Version=1.2.0.0, Culture=neutral, processorArchitecture=MSIL"> + <HintPath>..\packages\Pharmacist.Common.1.2.2\lib\netstandard2.0\Pharmacist.Common.dll</HintPath> + </Reference> + <Reference Include="PresentationFramework.Aero" /> + <Reference Include="ReactiveUI, Version=10.4.0.0, Culture=neutral, processorArchitecture=MSIL"> + <HintPath>..\packages\ReactiveUI.10.4.1\lib\net461\ReactiveUI.dll</HintPath> + </Reference> + <Reference Include="ReactiveUI.Events.WPF, Version=10.4.0.0, Culture=neutral, processorArchitecture=MSIL"> + <HintPath>..\packages\ReactiveUI.Events.WPF.10.4.1\lib\net461\ReactiveUI.Events.WPF.dll</HintPath> + </Reference> + <Reference Include="ReactiveUI.WPF, Version=10.4.0.0, Culture=neutral, processorArchitecture=MSIL"> + <HintPath>..\packages\ReactiveUI.WPF.10.4.1\lib\net461\ReactiveUI.WPF.dll</HintPath> + </Reference> <Reference Include="SharpCompress, Version=0.23.0.0, Culture=neutral, PublicKeyToken=afb0a02973931d96, processorArchitecture=MSIL"> <HintPath>..\packages\SharpCompress.0.23.0\lib\net45\SharpCompress.dll</HintPath> </Reference> + <Reference Include="Splat, Version=9.1.0.0, Culture=neutral, processorArchitecture=MSIL"> + <HintPath>..\packages\Splat.9.1.1\lib\net461\Splat.dll</HintPath> + </Reference> + <Reference Include="Splat.Drawing, Version=9.1.0.0, Culture=neutral, processorArchitecture=MSIL"> + <HintPath>..\packages\Splat.Drawing.9.1.1\lib\net461\Splat.Drawing.dll</HintPath> + </Reference> <Reference Include="System" /> <Reference Include="System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <HintPath>..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll</HintPath> @@ -143,6 +165,11 @@ <Reference Include="System.Data" /> <Reference Include="System.Design" /> <Reference Include="System.Drawing" /> + <Reference Include="System.Drawing.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> + <HintPath>..\packages\System.Drawing.Primitives.4.3.0\lib\net45\System.Drawing.Primitives.dll</HintPath> + <Private>True</Private> + <Private>True</Private> + </Reference> <Reference Include="System.IO.Compression" /> <Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <HintPath>..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll</HintPath> @@ -151,14 +178,24 @@ <Reference Include="System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <HintPath>..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll</HintPath> </Reference> + <Reference Include="System.Reactive, Version=4.2.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL"> + <HintPath>..\packages\System.Reactive.4.2.0\lib\net46\System.Reactive.dll</HintPath> + </Reference> <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath> </Reference> <Reference Include="System.Runtime.Serialization" /> <Reference Include="System.Security" /> <Reference Include="System.ServiceModel" /> + <Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> + <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath> + </Reference> <Reference Include="System.Transactions" /> + <Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> + <HintPath>..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll</HintPath> + </Reference> <Reference Include="System.Web" /> + <Reference Include="System.Windows" /> <Reference Include="System.Windows.Forms" /> <Reference Include="System.Xml" /> <Reference Include="Microsoft.CSharp" /> diff --git a/Wabbajack/packages.config b/Wabbajack/packages.config index 48d6efbc..7dd622df 100644 --- a/Wabbajack/packages.config +++ b/Wabbajack/packages.config @@ -3,6 +3,7 @@ <package id="AlphaFS" version="2.2.6" targetFramework="net472" /> <package id="CommonMark.NET" version="0.15.1" targetFramework="net472" /> <package id="Costura.Fody" version="4.0.0" targetFramework="net472" /> + <package id="DynamicData" version="6.13.17" targetFramework="net472" /> <package id="Fody" version="5.1.1" targetFramework="net472" developmentDependency="true" /> <package id="GitInfo" version="2.0.20" targetFramework="net472" developmentDependency="true" /> <package id="K4os.Compression.LZ4" version="1.1.11" targetFramework="net472" /> @@ -13,13 +14,23 @@ <package id="Microsoft-WindowsAPICodePack-Shell" version="1.1.3.3" targetFramework="net472" /> <package id="Newtonsoft.Json" version="12.0.2" targetFramework="net472" /> <package id="Newtonsoft.Json.Bson" version="1.0.2" targetFramework="net472" /> + <package id="Pharmacist.Common" version="1.2.2" targetFramework="net472" /> <package id="protobuf-net" version="2.4.0" targetFramework="net472" /> + <package id="ReactiveUI" version="10.4.1" targetFramework="net472" /> + <package id="ReactiveUI.Events.WPF" version="10.4.1" targetFramework="net472" /> + <package id="ReactiveUI.WPF" version="10.4.1" targetFramework="net472" /> <package id="SharpCompress" version="0.23.0" targetFramework="net472" /> <package id="SharpZipLib" version="1.2.0" targetFramework="net472" /> + <package id="Splat" version="9.1.1" targetFramework="net472" /> + <package id="Splat.Drawing" version="9.1.1" targetFramework="net472" /> <package id="System.Buffers" version="4.4.0" targetFramework="net472" /> + <package id="System.Drawing.Primitives" version="4.3.0" targetFramework="net472" /> <package id="System.Memory" version="4.5.3" targetFramework="net472" /> <package id="System.Numerics.Vectors" version="4.4.0" targetFramework="net472" /> + <package id="System.Reactive" version="4.2.0" targetFramework="net472" /> <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net472" /> + <package id="System.Threading.Tasks.Extensions" version="4.5.3" targetFramework="net472" /> + <package id="System.ValueTuple" version="4.5.0" targetFramework="net472" /> <package id="WebSocketSharpFork" version="1.0.4.0" targetFramework="net472" /> <package id="WPFThemes.DarkBlend" version="1.0.8" targetFramework="net472" /> <package id="YamlDotNet" version="7.0.0" targetFramework="net472" />