From 4487f0343f68ef605e88114e815f1aadf069cbde Mon Sep 17 00:00:00 2001 From: Geoffroy Bonneville Date: Mon, 11 Sep 2017 18:25:00 +0200 Subject: [PATCH] WIP open a database --- .gitignore | 31 + .vs/ModernKeePass/v14/.suo | Bin 355840 -> 217600 bytes ModernKeePass/Common/NavigationHelper.cs | 436 + ModernKeePass/Common/ObservableDictionary.cs | 149 + ModernKeePass/Common/RelayCommand.cs | 86 + ModernKeePass/Common/SuspensionManager.cs | 269 + ModernKeePass/MainPage.xaml | 3 +- ModernKeePass/MainPage.xaml.cs | 35 +- ModernKeePass/ModernKeePass.csproj | 57 +- ModernKeePass/Pages/DatabaseViewPage.xaml | 127 + ModernKeePass/Pages/DatabaseViewPage.xaml.cs | 105 + ModernKeePass/obj/Debug/App.g.cs | 27 + ...gnTimeResolveAssemblyReferencesInput.cache | Bin 14069 -> 14442 bytes ModernKeePass/obj/Debug/MainPage.g.cs | 36 + ModernKeePass/obj/Debug/MainPage.g.i.cs | 5 +- ModernKeePass/obj/Debug/XamlSaveStateFile.xml | 3 + ModernKeePass/obj/Debug/XamlTypeInfo.g.cs | 614 + ModernKeePass/packages.config | 9 + ModernKeePassLib/ModernKeePassLib.nuspec | 11 +- ModernKeePassLib/PwDatabase.cs | 4 +- .../ThirdPartyNotices.txt | 31 + .../dotnet_library_license.txt | 128 + .../lib/netstandard1.0/_._ | 0 .../runtime.json | 406 + .../ThirdPartyNotices.txt | 31 + .../dotnet_library_license.txt | 128 + .../lib/net45/_._ | 0 .../System.ComponentModel.DataAnnotations.dll | Bin 0 -> 21944 bytes .../lib/netcore50/System.Core.dll | Bin 0 -> 28488 bytes .../lib/netcore50/System.Net.dll | Bin 0 -> 21312 bytes .../lib/netcore50/System.Numerics.dll | Bin 0 -> 20312 bytes .../System.Runtime.Serialization.dll | Bin 0 -> 21400 bytes .../lib/netcore50/System.ServiceModel.Web.dll | Bin 0 -> 20864 bytes .../lib/netcore50/System.ServiceModel.dll | Bin 0 -> 26472 bytes .../lib/netcore50/System.Windows.dll | Bin 0 -> 20824 bytes .../lib/netcore50/System.Xml.Linq.dll | Bin 0 -> 21848 bytes .../netcore50/System.Xml.Serialization.dll | Bin 0 -> 20864 bytes .../lib/netcore50/System.Xml.dll | Bin 0 -> 22856 bytes .../lib/netcore50/System.dll | Bin 0 -> 23344 bytes .../System.ComponentModel.DataAnnotations.dll | Bin 0 -> 21944 bytes .../lib/netstandard1.0/System.Core.dll | Bin 0 -> 28848 bytes .../lib/netstandard1.0/System.Net.dll | Bin 0 -> 21168 bytes .../lib/netstandard1.0/System.Numerics.dll | Bin 0 -> 20312 bytes .../System.Runtime.Serialization.dll | Bin 0 -> 21240 bytes .../System.ServiceModel.Web.dll | Bin 0 -> 20864 bytes .../netstandard1.0/System.ServiceModel.dll | Bin 0 -> 26320 bytes .../lib/netstandard1.0/System.Windows.dll | Bin 0 -> 20672 bytes .../lib/netstandard1.0/System.Xml.Linq.dll | Bin 0 -> 21696 bytes .../System.Xml.Serialization.dll | Bin 0 -> 20712 bytes .../lib/netstandard1.0/System.Xml.dll | Bin 0 -> 22704 bytes .../lib/netstandard1.0/System.dll | Bin 0 -> 23712 bytes .../lib/win8/_._ | 0 .../lib/wp80/_._ | 0 .../lib/wpa81/_._ | 0 .../ref/net45/_._ | 0 .../System.ComponentModel.DataAnnotations.dll | Bin 0 -> 21432 bytes .../ref/netcore50/System.Core.dll | Bin 0 -> 24240 bytes .../ref/netcore50/System.Net.dll | Bin 0 -> 21160 bytes .../ref/netcore50/System.Numerics.dll | Bin 0 -> 20160 bytes .../System.Runtime.Serialization.dll | Bin 0 -> 21240 bytes .../ref/netcore50/System.ServiceModel.Web.dll | Bin 0 -> 20864 bytes .../ref/netcore50/System.ServiceModel.dll | Bin 0 -> 27344 bytes .../ref/netcore50/System.Windows.dll | Bin 0 -> 20664 bytes .../ref/netcore50/System.Xml.Linq.dll | Bin 0 -> 21184 bytes .../netcore50/System.Xml.Serialization.dll | Bin 0 -> 21224 bytes .../ref/netcore50/System.Xml.dll | Bin 0 -> 21672 bytes .../ref/netcore50/System.dll | Bin 0 -> 24224 bytes .../ref/netcore50/mscorlib.dll | Bin 0 -> 38568 bytes .../System.ComponentModel.DataAnnotations.dll | Bin 0 -> 21432 bytes .../ref/netstandard1.0/System.Core.dll | Bin 0 -> 24240 bytes .../ref/netstandard1.0/System.Net.dll | Bin 0 -> 21160 bytes .../ref/netstandard1.0/System.Numerics.dll | Bin 0 -> 20160 bytes .../System.Runtime.Serialization.dll | Bin 0 -> 21240 bytes .../System.ServiceModel.Web.dll | Bin 0 -> 20864 bytes .../netstandard1.0/System.ServiceModel.dll | Bin 0 -> 27344 bytes .../ref/netstandard1.0/System.Windows.dll | Bin 0 -> 20664 bytes .../ref/netstandard1.0/System.Xml.Linq.dll | Bin 0 -> 21184 bytes .../System.Xml.Serialization.dll | Bin 0 -> 21224 bytes .../ref/netstandard1.0/System.Xml.dll | Bin 0 -> 21672 bytes .../ref/netstandard1.0/System.dll | Bin 0 -> 24224 bytes .../ref/netstandard1.0/mscorlib.dll | Bin 0 -> 38568 bytes .../ref/win8/_._ | 0 .../ref/wp80/_._ | 0 .../ref/wpa81/_._ | 0 .../System.ComponentModel.DataAnnotations.dll | Bin 0 -> 21784 bytes .../aot/lib/netcore50/System.Core.dll | Bin 0 -> 29512 bytes .../runtimes/aot/lib/netcore50/System.Net.dll | Bin 0 -> 21832 bytes .../aot/lib/netcore50/System.Numerics.dll | Bin 0 -> 20160 bytes .../System.Runtime.Serialization.dll | Bin 0 -> 21912 bytes .../lib/netcore50/System.ServiceModel.Web.dll | Bin 0 -> 20704 bytes .../aot/lib/netcore50/System.ServiceModel.dll | Bin 0 -> 34160 bytes .../aot/lib/netcore50/System.Windows.dll | Bin 0 -> 20824 bytes .../aot/lib/netcore50/System.Xml.Linq.dll | Bin 0 -> 21848 bytes .../netcore50/System.Xml.Serialization.dll | Bin 0 -> 21384 bytes .../runtimes/aot/lib/netcore50/System.Xml.dll | Bin 0 -> 24392 bytes .../runtimes/aot/lib/netcore50/System.dll | Bin 0 -> 35120 bytes .../runtimes/aot/lib/netcore50/mscorlib.dll | Bin 0 -> 50856 bytes .../lib/netstandard1.2/ModernKeePassLib.dll | Bin 0 -> 212480 bytes .../NETStandard.Library.2.0.0/LICENSE.TXT | 21 + .../THIRD-PARTY-NOTICES.TXT | 31 + .../build/NETStandard.Library.targets | 23 + .../NETStandard.Library.targets | 12 + .../ref/Microsoft.Win32.Primitives.dll | Bin 0 -> 21224 bytes .../netstandard2.0/ref/System.AppContext.dll | Bin 0 -> 21192 bytes .../ref/System.Collections.Concurrent.dll | Bin 0 -> 21240 bytes .../ref/System.Collections.NonGeneric.dll | Bin 0 -> 21240 bytes .../ref/System.Collections.Specialized.dll | Bin 0 -> 21240 bytes .../netstandard2.0/ref/System.Collections.dll | Bin 0 -> 21704 bytes .../ref/System.ComponentModel.Composition.dll | Bin 0 -> 21256 bytes .../System.ComponentModel.EventBasedAsync.dll | Bin 0 -> 21784 bytes .../ref/System.ComponentModel.Primitives.dll | Bin 0 -> 21760 bytes .../System.ComponentModel.TypeConverter.dll | Bin 0 -> 22800 bytes .../ref/System.ComponentModel.dll | Bin 0 -> 21208 bytes .../netstandard2.0/ref/System.Console.dll | Bin 0 -> 21176 bytes .../build/netstandard2.0/ref/System.Core.dll | Bin 0 -> 26288 bytes .../netstandard2.0/ref/System.Data.Common.dll | Bin 0 -> 22216 bytes .../build/netstandard2.0/ref/System.Data.dll | Bin 0 -> 25776 bytes .../ref/System.Diagnostics.Contracts.dll | Bin 0 -> 21744 bytes .../ref/System.Diagnostics.Debug.dll | Bin 0 -> 21216 bytes .../System.Diagnostics.FileVersionInfo.dll | Bin 0 -> 21256 bytes .../ref/System.Diagnostics.Process.dll | Bin 0 -> 21736 bytes .../ref/System.Diagnostics.StackTrace.dll | Bin 0 -> 21240 bytes ...em.Diagnostics.TextWriterTraceListener.dll | Bin 0 -> 21296 bytes .../ref/System.Diagnostics.Tools.dll | Bin 0 -> 21216 bytes .../ref/System.Diagnostics.TraceSource.dll | Bin 0 -> 21752 bytes .../ref/System.Diagnostics.Tracing.dll | Bin 0 -> 21736 bytes .../ref/System.Drawing.Primitives.dll | Bin 0 -> 21224 bytes .../netstandard2.0/ref/System.Drawing.dll | Bin 0 -> 21176 bytes .../ref/System.Dynamic.Runtime.dll | Bin 0 -> 22232 bytes .../ref/System.Globalization.Calendars.dll | Bin 0 -> 21752 bytes .../ref/System.Globalization.Extensions.dll | Bin 0 -> 21248 bytes .../ref/System.Globalization.dll | Bin 0 -> 21200 bytes .../ref/System.IO.Compression.FileSystem.dll | Bin 0 -> 21248 bytes .../ref/System.IO.Compression.ZipFile.dll | Bin 0 -> 21240 bytes .../ref/System.IO.Compression.dll | Bin 0 -> 21208 bytes .../ref/System.IO.FileSystem.DriveInfo.dll | Bin 0 -> 21240 bytes .../ref/System.IO.FileSystem.Primitives.dll | Bin 0 -> 21248 bytes .../ref/System.IO.FileSystem.Watcher.dll | Bin 0 -> 21232 bytes .../ref/System.IO.FileSystem.dll | Bin 0 -> 21200 bytes .../ref/System.IO.IsolatedStorage.dll | Bin 0 -> 21224 bytes .../ref/System.IO.MemoryMappedFiles.dll | Bin 0 -> 21232 bytes .../netstandard2.0/ref/System.IO.Pipes.dll | Bin 0 -> 21184 bytes .../ref/System.IO.UnmanagedMemoryStream.dll | Bin 0 -> 21248 bytes .../build/netstandard2.0/ref/System.IO.dll | Bin 0 -> 21160 bytes .../ref/System.Linq.Expressions.dll | Bin 0 -> 22240 bytes .../ref/System.Linq.Parallel.dll | Bin 0 -> 21200 bytes .../ref/System.Linq.Queryable.dll | Bin 0 -> 21208 bytes .../build/netstandard2.0/ref/System.Linq.dll | Bin 0 -> 21160 bytes .../netstandard2.0/ref/System.Net.Http.dll | Bin 0 -> 22712 bytes .../ref/System.Net.NameResolution.dll | Bin 0 -> 21224 bytes .../ref/System.Net.NetworkInformation.dll | Bin 0 -> 22264 bytes .../netstandard2.0/ref/System.Net.Ping.dll | Bin 0 -> 21184 bytes .../ref/System.Net.Primitives.dll | Bin 0 -> 22232 bytes .../ref/System.Net.Requests.dll | Bin 0 -> 21200 bytes .../ref/System.Net.Security.dll | Bin 0 -> 21712 bytes .../netstandard2.0/ref/System.Net.Sockets.dll | Bin 0 -> 21704 bytes .../ref/System.Net.WebHeaderCollection.dll | Bin 0 -> 21240 bytes .../ref/System.Net.WebSockets.Client.dll | Bin 0 -> 21232 bytes .../ref/System.Net.WebSockets.dll | Bin 0 -> 21208 bytes .../build/netstandard2.0/ref/System.Net.dll | Bin 0 -> 22696 bytes .../netstandard2.0/ref/System.Numerics.dll | Bin 0 -> 20672 bytes .../netstandard2.0/ref/System.ObjectModel.dll | Bin 0 -> 21704 bytes .../ref/System.Reflection.Extensions.dll | Bin 0 -> 21232 bytes .../ref/System.Reflection.Primitives.dll | Bin 0 -> 21744 bytes .../netstandard2.0/ref/System.Reflection.dll | Bin 0 -> 22216 bytes .../ref/System.Resources.Reader.dll | Bin 0 -> 21208 bytes .../ref/System.Resources.ResourceManager.dll | Bin 0 -> 21248 bytes .../ref/System.Resources.Writer.dll | Bin 0 -> 21216 bytes ...ystem.Runtime.CompilerServices.VisualC.dll | Bin 0 -> 21792 bytes .../ref/System.Runtime.Extensions.dll | Bin 0 -> 21736 bytes .../ref/System.Runtime.Handles.dll | Bin 0 -> 21208 bytes ...ime.InteropServices.RuntimeInformation.dll | Bin 0 -> 21328 bytes .../ref/System.Runtime.InteropServices.dll | Bin 0 -> 24312 bytes .../ref/System.Runtime.Numerics.dll | Bin 0 -> 21208 bytes ...ystem.Runtime.Serialization.Formatters.dll | Bin 0 -> 21280 bytes .../ref/System.Runtime.Serialization.Json.dll | Bin 0 -> 21256 bytes ...ystem.Runtime.Serialization.Primitives.dll | Bin 0 -> 21792 bytes .../ref/System.Runtime.Serialization.Xml.dll | Bin 0 -> 21760 bytes .../ref/System.Runtime.Serialization.dll | Bin 0 -> 22256 bytes .../netstandard2.0/ref/System.Runtime.dll | Bin 0 -> 29368 bytes .../ref/System.Security.Claims.dll | Bin 0 -> 21208 bytes ...ystem.Security.Cryptography.Algorithms.dll | Bin 0 -> 21792 bytes .../ref/System.Security.Cryptography.Csp.dll | Bin 0 -> 21248 bytes .../System.Security.Cryptography.Encoding.dll | Bin 0 -> 21264 bytes ...ystem.Security.Cryptography.Primitives.dll | Bin 0 -> 21792 bytes ...Security.Cryptography.X509Certificates.dll | Bin 0 -> 22848 bytes .../ref/System.Security.Principal.dll | Bin 0 -> 21224 bytes .../ref/System.Security.SecureString.dll | Bin 0 -> 21232 bytes .../ref/System.ServiceModel.Web.dll | Bin 0 -> 21216 bytes .../ref/System.Text.Encoding.Extensions.dll | Bin 0 -> 21248 bytes .../ref/System.Text.Encoding.dll | Bin 0 -> 21712 bytes .../ref/System.Text.RegularExpressions.dll | Bin 0 -> 21240 bytes .../ref/System.Threading.Overlapped.dll | Bin 0 -> 21232 bytes .../ref/System.Threading.Tasks.Parallel.dll | Bin 0 -> 21248 bytes .../ref/System.Threading.Tasks.dll | Bin 0 -> 22232 bytes .../ref/System.Threading.Thread.dll | Bin 0 -> 21216 bytes .../ref/System.Threading.ThreadPool.dll | Bin 0 -> 21232 bytes .../ref/System.Threading.Timer.dll | Bin 0 -> 21208 bytes .../netstandard2.0/ref/System.Threading.dll | Bin 0 -> 22208 bytes .../ref/System.Transactions.dll | Bin 0 -> 22224 bytes .../netstandard2.0/ref/System.ValueTuple.dll | Bin 0 -> 21192 bytes .../build/netstandard2.0/ref/System.Web.dll | Bin 0 -> 21160 bytes .../netstandard2.0/ref/System.Windows.dll | Bin 0 -> 21688 bytes .../netstandard2.0/ref/System.Xml.Linq.dll | Bin 0 -> 21696 bytes .../ref/System.Xml.ReaderWriter.dll | Bin 0 -> 21728 bytes .../ref/System.Xml.Serialization.dll | Bin 0 -> 21728 bytes .../ref/System.Xml.XDocument.dll | Bin 0 -> 21712 bytes .../ref/System.Xml.XPath.XDocument.dll | Bin 0 -> 21224 bytes .../netstandard2.0/ref/System.Xml.XPath.dll | Bin 0 -> 21184 bytes .../ref/System.Xml.XmlDocument.dll | Bin 0 -> 21720 bytes .../ref/System.Xml.XmlSerializer.dll | Bin 0 -> 21728 bytes .../build/netstandard2.0/ref/System.Xml.dll | Bin 0 -> 29352 bytes .../build/netstandard2.0/ref/System.dll | Bin 0 -> 47256 bytes .../build/netstandard2.0/ref/mscorlib.dll | Bin 0 -> 54432 bytes .../build/netstandard2.0/ref/netstandard.dll | Bin 0 -> 1319752 bytes .../build/netstandard2.0/ref/netstandard.xml | 149249 +++++++++++++++ .../lib/netstandard1.0/_._ | 0 .../ThirdPartyNotices.txt | 31 + .../dotnet_library_license.txt | 128 + .../lib/MonoAndroid10/_._ | 0 .../lib/MonoTouch10/_._ | 0 ...ime.InteropServices.RuntimeInformation.dll | Bin 0 -> 33256 bytes ...ime.InteropServices.RuntimeInformation.dll | Bin 0 -> 22352 bytes ...ime.InteropServices.RuntimeInformation.dll | Bin 0 -> 32744 bytes ...ime.InteropServices.RuntimeInformation.dll | Bin 0 -> 32744 bytes .../lib/xamarinios10/_._ | 0 .../lib/xamarinmac20/_._ | 0 .../lib/xamarintvos10/_._ | 0 .../lib/xamarinwatchos10/_._ | 0 .../ref/MonoAndroid10/_._ | 0 .../ref/MonoTouch10/_._ | 0 ...ime.InteropServices.RuntimeInformation.dll | Bin 0 -> 22504 bytes .../ref/xamarinios10/_._ | 0 .../ref/xamarinmac20/_._ | 0 .../ref/xamarintvos10/_._ | 0 .../ref/xamarinwatchos10/_._ | 0 ...ime.InteropServices.RuntimeInformation.dll | Bin 0 -> 32744 bytes ...ime.InteropServices.RuntimeInformation.dll | Bin 0 -> 27616 bytes ...ime.InteropServices.RuntimeInformation.dll | Bin 0 -> 33256 bytes ...ime.InteropServices.RuntimeInformation.dll | Bin 0 -> 32744 bytes ...ime.InteropServices.RuntimeInformation.dll | Bin 0 -> 33256 bytes .../ThirdPartyNotices.txt | 31 + .../dotnet_library_license.txt | 128 + .../lib/portable-win8+wp8+wpa81/_._ | 0 .../lib/win8/_._ | 0 .../lib/wp80/_._ | 0 .../lib/wpa81/_._ | 0 .../System.Runtime.WindowsRuntime.dll | Bin 0 -> 28408 bytes .../System.Runtime.WindowsRuntime.xml | 818 + .../de/System.Runtime.WindowsRuntime.xml | 820 + .../es/System.Runtime.WindowsRuntime.xml | 816 + .../fr/System.Runtime.WindowsRuntime.xml | 823 + .../it/System.Runtime.WindowsRuntime.xml | 806 + .../ja/System.Runtime.WindowsRuntime.xml | 859 + .../ko/System.Runtime.WindowsRuntime.xml | 855 + .../ru/System.Runtime.WindowsRuntime.xml | 752 + .../zh-hans/System.Runtime.WindowsRuntime.xml | 828 + .../zh-hant/System.Runtime.WindowsRuntime.xml | 831 + .../System.Runtime.WindowsRuntime.dll | Bin 0 -> 28160 bytes .../System.Runtime.WindowsRuntime.xml | 818 + .../de/System.Runtime.WindowsRuntime.xml | 820 + .../es/System.Runtime.WindowsRuntime.xml | 816 + .../fr/System.Runtime.WindowsRuntime.xml | 823 + .../it/System.Runtime.WindowsRuntime.xml | 806 + .../ja/System.Runtime.WindowsRuntime.xml | 859 + .../ko/System.Runtime.WindowsRuntime.xml | 855 + .../ru/System.Runtime.WindowsRuntime.xml | 752 + .../zh-hans/System.Runtime.WindowsRuntime.xml | 828 + .../zh-hant/System.Runtime.WindowsRuntime.xml | 831 + .../System.Runtime.WindowsRuntime.dll | Bin 0 -> 28408 bytes .../System.Runtime.WindowsRuntime.xml | 818 + .../de/System.Runtime.WindowsRuntime.xml | 820 + .../es/System.Runtime.WindowsRuntime.xml | 816 + .../fr/System.Runtime.WindowsRuntime.xml | 823 + .../it/System.Runtime.WindowsRuntime.xml | 806 + .../ja/System.Runtime.WindowsRuntime.xml | 859 + .../ko/System.Runtime.WindowsRuntime.xml | 855 + .../ru/System.Runtime.WindowsRuntime.xml | 752 + .../zh-hans/System.Runtime.WindowsRuntime.xml | 828 + .../zh-hant/System.Runtime.WindowsRuntime.xml | 831 + .../ref/portable-win8+wp8+wpa81/_._ | 0 .../ref/win8/_._ | 0 .../ref/wp80/_._ | 0 .../ref/wpa81/_._ | 0 .../System.Runtime.WindowsRuntime.dll | Bin 0 -> 126360 bytes .../System.Runtime.WindowsRuntime.dll | Bin 0 -> 135576 bytes 286 files changed, 176971 insertions(+), 38 deletions(-) create mode 100644 ModernKeePass/Common/NavigationHelper.cs create mode 100644 ModernKeePass/Common/ObservableDictionary.cs create mode 100644 ModernKeePass/Common/RelayCommand.cs create mode 100644 ModernKeePass/Common/SuspensionManager.cs create mode 100644 ModernKeePass/Pages/DatabaseViewPage.xaml create mode 100644 ModernKeePass/Pages/DatabaseViewPage.xaml.cs create mode 100644 ModernKeePass/packages.config create mode 100644 packages/Microsoft.NETCore.Platforms.1.1.0/ThirdPartyNotices.txt create mode 100644 packages/Microsoft.NETCore.Platforms.1.1.0/dotnet_library_license.txt create mode 100644 packages/Microsoft.NETCore.Platforms.1.1.0/lib/netstandard1.0/_._ create mode 100644 packages/Microsoft.NETCore.Platforms.1.1.0/runtime.json create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ThirdPartyNotices.txt create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/dotnet_library_license.txt create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/net45/_._ create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netcore50/System.ComponentModel.DataAnnotations.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netcore50/System.Core.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netcore50/System.Net.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netcore50/System.Numerics.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netcore50/System.Runtime.Serialization.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netcore50/System.ServiceModel.Web.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netcore50/System.ServiceModel.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netcore50/System.Windows.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netcore50/System.Xml.Linq.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netcore50/System.Xml.Serialization.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netcore50/System.Xml.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netcore50/System.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netstandard1.0/System.ComponentModel.DataAnnotations.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netstandard1.0/System.Core.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netstandard1.0/System.Net.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netstandard1.0/System.Numerics.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netstandard1.0/System.Runtime.Serialization.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netstandard1.0/System.ServiceModel.Web.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netstandard1.0/System.ServiceModel.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netstandard1.0/System.Windows.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netstandard1.0/System.Xml.Linq.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netstandard1.0/System.Xml.Serialization.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netstandard1.0/System.Xml.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/netstandard1.0/System.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/win8/_._ create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/wp80/_._ create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/lib/wpa81/_._ create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/net45/_._ create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netcore50/System.ComponentModel.DataAnnotations.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netcore50/System.Core.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netcore50/System.Net.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netcore50/System.Numerics.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netcore50/System.Runtime.Serialization.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netcore50/System.ServiceModel.Web.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netcore50/System.ServiceModel.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netcore50/System.Windows.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netcore50/System.Xml.Linq.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netcore50/System.Xml.Serialization.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netcore50/System.Xml.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netcore50/System.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netcore50/mscorlib.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netstandard1.0/System.ComponentModel.DataAnnotations.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netstandard1.0/System.Core.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netstandard1.0/System.Net.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netstandard1.0/System.Numerics.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netstandard1.0/System.Runtime.Serialization.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netstandard1.0/System.ServiceModel.Web.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netstandard1.0/System.ServiceModel.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netstandard1.0/System.Windows.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netstandard1.0/System.Xml.Linq.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netstandard1.0/System.Xml.Serialization.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netstandard1.0/System.Xml.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netstandard1.0/System.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/netstandard1.0/mscorlib.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/win8/_._ create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/wp80/_._ create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/ref/wpa81/_._ create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/runtimes/aot/lib/netcore50/System.ComponentModel.DataAnnotations.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/runtimes/aot/lib/netcore50/System.Core.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/runtimes/aot/lib/netcore50/System.Net.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/runtimes/aot/lib/netcore50/System.Numerics.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/runtimes/aot/lib/netcore50/System.Runtime.Serialization.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/runtimes/aot/lib/netcore50/System.ServiceModel.Web.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/runtimes/aot/lib/netcore50/System.ServiceModel.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/runtimes/aot/lib/netcore50/System.Windows.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/runtimes/aot/lib/netcore50/System.Xml.Linq.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/runtimes/aot/lib/netcore50/System.Xml.Serialization.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/runtimes/aot/lib/netcore50/System.Xml.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/runtimes/aot/lib/netcore50/System.dll create mode 100644 packages/Microsoft.NETCore.Portable.Compatibility.1.0.1/runtimes/aot/lib/netcore50/mscorlib.dll create mode 100644 packages/ModernKeePassLib.2.19.0.27133/lib/netstandard1.2/ModernKeePassLib.dll create mode 100644 packages/NETStandard.Library.2.0.0/LICENSE.TXT create mode 100644 packages/NETStandard.Library.2.0.0/THIRD-PARTY-NOTICES.TXT create mode 100644 packages/NETStandard.Library.2.0.0/build/NETStandard.Library.targets create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/NETStandard.Library.targets create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/Microsoft.Win32.Primitives.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.AppContext.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Collections.Concurrent.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Collections.NonGeneric.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Collections.Specialized.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Collections.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.ComponentModel.Composition.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.ComponentModel.EventBasedAsync.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.ComponentModel.Primitives.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.ComponentModel.TypeConverter.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.ComponentModel.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Console.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Core.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Data.Common.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Data.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Diagnostics.Contracts.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Diagnostics.Debug.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Diagnostics.FileVersionInfo.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Diagnostics.Process.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Diagnostics.StackTrace.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Diagnostics.TextWriterTraceListener.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Diagnostics.Tools.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Diagnostics.TraceSource.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Diagnostics.Tracing.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Drawing.Primitives.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Drawing.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Dynamic.Runtime.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Globalization.Calendars.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Globalization.Extensions.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Globalization.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.IO.Compression.FileSystem.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.IO.Compression.ZipFile.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.IO.Compression.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.IO.FileSystem.DriveInfo.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.IO.FileSystem.Primitives.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.IO.FileSystem.Watcher.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.IO.FileSystem.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.IO.IsolatedStorage.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.IO.MemoryMappedFiles.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.IO.Pipes.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.IO.UnmanagedMemoryStream.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.IO.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Linq.Expressions.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Linq.Parallel.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Linq.Queryable.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Linq.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Net.Http.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Net.NameResolution.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Net.NetworkInformation.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Net.Ping.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Net.Primitives.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Net.Requests.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Net.Security.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Net.Sockets.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Net.WebHeaderCollection.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Net.WebSockets.Client.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Net.WebSockets.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Net.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Numerics.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.ObjectModel.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Reflection.Extensions.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Reflection.Primitives.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Reflection.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Resources.Reader.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Resources.ResourceManager.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Resources.Writer.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Runtime.CompilerServices.VisualC.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Runtime.Extensions.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Runtime.Handles.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Runtime.InteropServices.RuntimeInformation.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Runtime.InteropServices.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Runtime.Numerics.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Runtime.Serialization.Formatters.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Runtime.Serialization.Json.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Runtime.Serialization.Primitives.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Runtime.Serialization.Xml.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Runtime.Serialization.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Runtime.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Security.Claims.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Security.Cryptography.Algorithms.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Security.Cryptography.Csp.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Security.Cryptography.Encoding.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Security.Cryptography.Primitives.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Security.Cryptography.X509Certificates.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Security.Principal.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Security.SecureString.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.ServiceModel.Web.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Text.Encoding.Extensions.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Text.Encoding.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Text.RegularExpressions.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Threading.Overlapped.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Threading.Tasks.Parallel.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Threading.Tasks.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Threading.Thread.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Threading.ThreadPool.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Threading.Timer.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Threading.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Transactions.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.ValueTuple.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Web.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Windows.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Xml.Linq.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Xml.ReaderWriter.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Xml.Serialization.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Xml.XDocument.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Xml.XPath.XDocument.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Xml.XPath.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Xml.XmlDocument.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Xml.XmlSerializer.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.Xml.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/System.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/mscorlib.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/netstandard.dll create mode 100644 packages/NETStandard.Library.2.0.0/build/netstandard2.0/ref/netstandard.xml create mode 100644 packages/NETStandard.Library.2.0.0/lib/netstandard1.0/_._ create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/ThirdPartyNotices.txt create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/dotnet_library_license.txt create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/lib/MonoAndroid10/_._ create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/lib/MonoTouch10/_._ create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/lib/net45/System.Runtime.InteropServices.RuntimeInformation.dll create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/lib/win8/System.Runtime.InteropServices.RuntimeInformation.dll create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/lib/wpa81/System.Runtime.InteropServices.RuntimeInformation.dll create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/lib/xamarinios10/_._ create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/lib/xamarinmac20/_._ create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/lib/xamarintvos10/_._ create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/lib/xamarinwatchos10/_._ create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/ref/MonoAndroid10/_._ create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/ref/MonoTouch10/_._ create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/ref/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/ref/xamarinios10/_._ create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/ref/xamarinmac20/_._ create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/ref/xamarintvos10/_._ create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/ref/xamarinwatchos10/_._ create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/runtimes/aot/lib/netcore50/System.Runtime.InteropServices.RuntimeInformation.dll create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/runtimes/unix/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/runtimes/win/lib/net45/System.Runtime.InteropServices.RuntimeInformation.dll create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/runtimes/win/lib/netcore50/System.Runtime.InteropServices.RuntimeInformation.dll create mode 100644 packages/System.Runtime.InteropServices.RuntimeInformation.4.3.0/runtimes/win/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ThirdPartyNotices.txt create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/dotnet_library_license.txt create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/lib/portable-win8+wp8+wpa81/_._ create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/lib/win8/_._ create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/lib/wp80/_._ create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/lib/wpa81/_._ create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netcore50/System.Runtime.WindowsRuntime.dll create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netcore50/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netcore50/de/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netcore50/es/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netcore50/fr/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netcore50/it/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netcore50/ja/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netcore50/ko/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netcore50/ru/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netcore50/zh-hans/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netcore50/zh-hant/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.0/System.Runtime.WindowsRuntime.dll create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.0/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.0/de/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.0/es/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.0/fr/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.0/it/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.0/ja/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.0/ko/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.0/ru/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.0/zh-hans/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.0/zh-hant/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.2/System.Runtime.WindowsRuntime.dll create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.2/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.2/de/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.2/es/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.2/fr/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.2/it/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.2/ja/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.2/ko/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.2/ru/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.2/zh-hans/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/netstandard1.2/zh-hant/System.Runtime.WindowsRuntime.xml create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/portable-win8+wp8+wpa81/_._ create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/win8/_._ create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/wp80/_._ create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/ref/wpa81/_._ create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/runtimes/win8-aot/lib/netcore50/System.Runtime.WindowsRuntime.dll create mode 100644 packages/System.Runtime.WindowsRuntime.4.3.0/runtimes/win8/lib/netstandard1.3/System.Runtime.WindowsRuntime.dll diff --git a/.gitignore b/.gitignore index 69539a5..246f7e8 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,35 @@ # This .gitignore file was automatically created by Microsoft(R) Visual Studio. ################################################################################ +#ignore thumbnails created by windows +Thumbs.db +#Ignore files build by Visual Studio +*.obj +*.exe +*.pdb +*.user +*.aps +*.pch +*.vspscc +*_i.c +*_p.c +*.ncb +*.suo +*.tlb +*.tlh +*.bak +*.cache +*.ilk +*.log +[Bb]in +[Dd]ebug*/ +*.lib +*.sbr +obj/ +[Rr]elease*/ +_ReSharper*/ +[Tt]est[Rr]esult* +Translation/TrlUtil.vshost.exe.manifest *.nupkg +.vs/ +/UpgradeLog.htm diff --git a/.vs/ModernKeePass/v14/.suo b/.vs/ModernKeePass/v14/.suo index 06f98fe0937a4a98bdf72c45f2402b05606ad3ed..b523ee1eca0999a6af77ab184fb1d5278e3e0a6f 100644 GIT binary patch delta 17805 zcmeHu4O~>$o%TIgiVDu4qVl02qCs(h5l03FX9mTO2qq?4 ztEq4er%lt=Sbv)Bo4N{Fr_II$+pM)oV@#XucDE+gwCS5#Cy)XBJ3w(l{dO1Z-vAUZ7Irj{3FH6KF}=aKC3f>;zyukOa&DJ^~7W{|3eY6M;8@DL@*K0#Jq#u#*9*$VJ!#fmC2J zK$VyVI}xC`8yVT7y1UQAVqg^?X3UR455}IzR%>1%d@kqk#ncX?MbB2pAEw{9@IqLY8`jJUvrKjUXu5(=+Ff z5(U8sj0VO56p#pe3^3OJoCJG3kP1u$k^zcmf<4LaR=TE_%_qx{{**?Hi=>by_-q0;16#Z=h;lk>ZTWrM z{|oKo=R`TFEyAPy7`=T;;+wCq0*Ta#V$3y?g3&f1VES_9qlnGoGEvzuus|YB7SKO( zDP*Eku16P2JA+cOdzHqR;+{y`5frOjkJ%EI4_6$i3S{xx^cbjuXh6Ax^7R6WQdL4vz(7pZu`ej*;+btxMs7UK5_RaV?u9{#x#u)1($&L< zbVDE|zjB%tDnAv|xaViAL?Yc32$H9w!KeSM7HNGg>ilS^R^-z2EULAooPE-|{u}Mj zvsiM>Xf~q6!N3Gy67V}<77zyf2SCmEFTYLhQGPeckDlLxJr1}8yaBum{9nKfP&k>l z;r;_~#qSsAw=a{z^+oCKe#P%8qSZ@*fIr!h{;8|A^ z8PB_}vy3S;fqhX)Iu@w9CZR!a3NFEeCp)4$@Khrd3pV(8;Dckdzc~ zptb3={ymI(ktsps2B8QEU4k2KH*Wii0nb63CxK}!S%{V zu85z!$mZ*62)94gmKg~n4x&mF0?ekjzzte&KOh(^DOSzXVa9goof?9s16PK?n-W2O3?0`JjXQD>omMmZ=uL zZMPKFS(f@3JD4eUWEdq)nsDbKPil=cU!a@rFy#I7XP9rU(6FI#7)Thl5yG718w32& zW~q=HbEF7w`2}`}wPhOBihP+qr8yZWqi>&L%J%Kku%13euUakA6kfkuGVqVgQheu{ zSr2Q5{1vBW_8>|34OI6pF*Vr)C1>31gfBP;8SA`m9;fBTAF%}ALh>UlB&&l&$ghx3 zMX-WXA`^|-etSlL4$bs2__ya5l@_92GMIc%Pz5l zE3|Ec%z9N}e$j=IS6ZYDZuo|z>&&WrR>O@=QXD_LMT+6qa;32o=0SDYg=#1@rJ6!wmPU`%@CuH(iK1Su$dp=268kCKV%A zF-9fm)#Z=&qk$o)c%sxLTDcNcsAseu(Jns_%01EIp7!(XjI<-j_sEs=jOngJy0lPI z!JP)jCB|DrHL>Fs+H6Huw|lawsoYd!_tbBr}N zm!n^OgRL3^js{&0R$W>u8!?b+-7Uv~IzyO-(_l4z8CZYQ;6DY(5Gvuj25GACRE7Uc z#JdasHh)~J8eT3;MO+(xnQ*16DepomtB^5P&3rNf)*yH?vd%;S>2OVjO+{G|ql&M8 zkc}v)IWu!k%*Y)r`nN|O&i}DUL%U~pMeg4Nv~8|l}Dk&F!qZA@1M1uCAD zJqOFgzpL&MTOfgT!<6~Q5|u$EM%=SpU?=vo7RC=Yv330IEi9(}5_9OjgL>0RSnOraUw{*U7x)p-pZ%ZABYF68m!E9D`Efrr2Lt$nZ5zSQta z#tRQ*Sld)x@V%k(aNgX?MzQ_;)P7c{tU8)x*jcIhy5XN5dq-IL)bJ7J8zzcr^r`i} z)25GFAKt6hsU9~eer5Z*1op6U>aGf}@dis|y0M7S1oSl8^BX8#Q;?7N&qC*i!=GdY zA3#v=0`CDd1m1^z+3%)j!iRmHKk`4{fc*)%fo?z$y`K&jMcKE0tY@l0fAVZoeY z^Fn@6Vk5XQTPjkD#>6Ry*F|XGjQGV6%|!2$@#4eFdD9#=l7goyzyBnP$C{;)qfO9i zCXAP9_)i5UL$hIvi(fg;C3d0mp_kZb?y*QlrSh3X<>-HOC|&C_cvdcpQ|ixmD63zI z?KGZwZ9IFdr|_x#P&O;z7YrwNly8yb1uoJDyXdvpCVbq+H@=R5GjFjp3j8OsmZ{(KKX2bU zf-*FjExAn%PM61Gw>q3PbDT}ZHjl?%Un3#Mm4JNY^ydEdt8X!8%oXAF&th5J=IQ27fGrfs$w#Ee9`-hRL2ZF&cW)K#CJQ`h(QAu+BTJ19gWzB+FfqY02=-S z2Ww|n`Qr{27ZDt~dNRN0U@O(+k$10Dg+_mBV>En09XntMp$F2@>dlzugFEMF=Yp|Z~4D_U03>1}8Y9sJB(5F&L z>~*%1wYEB&LCu3gi8YZdR#&Ydyctdsf!2V(sNx2P-BW6}Z8YV%3+s!kTsB+1mdc3f z4Jlsh+^9ZbJ<-y79o-vN=(5}DJ*vjg(vBb~!y=cx&g$A!Vy)EDLLbPm8D$mOTve2; z#%3zhMk6q`H^-%Jo6Fqj_BiWEVQ6E5lHQzhxq&1=P0`_i$C!QyocdUL4*TiVq}jL< z(~$sXhtr;InZGBNh1=_^og3XI(r9kKs-=|1K!o6MQ&9Uz%pvL&sHhNhlqVU93Jmk7 zo!4lurXs}(t5{JfR#b@<)nbKBtXLyf)QA;p#R|Jvu}-Y0rIdc73mFz72F#Jg8{W{q z6#3vu;lR%aj(t0fA8%yQIy;s{I(VF@XK#pp#WDC+#i8SA>)8;E?je!?(7}fHt2@dX z*k0%kYKy9H)$u0t@$1>-$PiWeQV>C-d`33faFYFMzM_E*$$Fy%ihSzmP` zjiVgK%~QuDsf*|amvbG~j_LWBgRXl25nY|t;WXSA7c|bZc}z=eZl?nZIN9i*z%$cL z8Kw+=td1pS^*Jg|38!9J;Y)~VP1)yL>oNZ7Fbw<4A?}tOXwC&M&{~-$q_6VLl>O+e zVrL`9^%7fy(`|=l*)*%RqGFDp)@-zW)LOKf#mTrIW+ z8y4F7D!a|yH%?p@#x9jZ5!Jxvn+nORuW~e!`m(uf4x82OixU)OR8}zpsyw!8EZdmW zeG5p)>M4HH9NSte_6z;Qp(Wq!tY71>SLJzf)V02EM#ikd26YdB{fHIKsqPzrWajdq zM;dG{&!z%vUHcB!m3>QvN2<{*c9(BU(KiDCs~*qU&gAz}(@tiP?)+|O>x&4~kRgnS8!@7Tg-e}DR$cyl(?VAZJWLzsUW zq0emcyU6$sqPR&CH)l$6Arn@K>zW!qU=JHbDv5uxlg$jFsPvGt3&)DrcCy%Z7c1d& z;NY=)S=5mh7tP{p;n^UPV$`k|qGOiu?|sBXxj3_z>>@0#J9=jPkql z{q|e1jX-}#>Oh*e5&j2&j@0BA#HYi8mfs23p%v&?rXTZtvoAEWYxIOC`vSey0WVzQ4P*cL~GfErmw#`GrMcT zhDmQ+JAU$wU->RzTaB6#!~NRUw9f6U&!z1b)?c@}{o0L7T{r*3aw*m@FCuMa?vu~| z^zEE%ZC1j{O7(c1Vo9}3HqV`V*W|Q0mV375(-wq4hPsYNI&nYQau3Vr|J=aRBM!h% zoi(&&9i}v_8>V4Cn;DhW*Nk{lZ59OzgGFJ_LT4b#iQwQ3+t|90a`oW>?%c*|hnIsQ zqf6#`aBh7rt9i~1sZ>Xs>eV=lDW~kScuNZ|UL7qgluzA@yMtpbYy)2qD$i0HPG!=d zQ*zeN3@Lk&ri-AoHcjJ$x}|KsVLRLH&F+@EL~qMZ_Mv2;?QrmoHD@WBRCa)bg;vD# z>@q1_iAhW3qlajw^KE-^jKGF$vuQZQuN{x*sZn~B`?5L5g}RlufNAy`2(MbcQaqP(}L4}?s8?pa=W4<4EbnD zQJ^KfrCXd9QGTnRzQ@n|+Zj?8t|{|0;h`fTlBs~jS3Ap>s@;H_N;4C)FlAs*ajJlQ zo_*^zG*V8I)2C!i+sbDpXbzFYmhy}5i%TR^mD}g?Rt=EfVTbQ!BDek@%~Y92YA!#! zTk{Y}x{M!xj7=lg5O4=QZjOu#Wzxf=y@&6Tu8M7T$#;sx41Q)88_tj3&(83!eJqK0 zK=tZrGLjC>r@BvT|E(CwCk&ONc#=b|6r=*1qS$^$u9!#fq;SWS(5miM5>mD z%c3QR_U5GsSq78=%K_T*QmTLV7SIbsIXj4>mG3rk0 z0(Y$5=H=4Au(pwj%E7`odeI_$0>;37$drugKRix-*`fu{yMVw&W_SuBJ_!#p6fr*A z7cm9TbV3V69R3aj^fihFvrJuGYC(O_3lkfa0h%XxcBc z`4Uwo5F{=Y`39|6po@oR@C7lyav8J~trY=UD#VUr#}5aBBPP$b`Fv@|*>SN}zHSkOf@UtcHXc(YHiF4lex@3&mRTP)Yu zHg>;qb@GeKvmvQ6wV=d%{l_ds{A=^sUq?}YPd?jw{Uln+M<%d1Z_(Y-?=@|!&0e!X zJjs+L*BgA}{fP>xh4sq_4DLYn17oTR_xjk2@n=@cHSJDmtoMvna|<%WlD}R;b9Vx3Zwzp9SF)9(^_AW40)IG)TAc9 zdY&}QTktyTU_7--ZsFNpHq3jrMp^@Ms97qY*DI!acl?2EWn5e&ZBWkT8@eVZjJNHO26^Y!O7DK=yES;d>2~kd+)tJCzkYX{_b?s^iV`059)>!b z6JyKg7lU1?0;})BRNa706KyzM*m(4Ls|Y@e5Q8XDGweoet~|(^_RbwP3q(tWHYwez!#arsm*U)*rPp;d4_f4(05hy7an?i?0vH ztJ$SJL_`_Z2$M4XdZ_+;X=lN${EGGRE@fd2YG15FKUDF>7HK9=eu%|-cbCbJv+tk1 zuH}^_(p5&Rqjb`t%w2+e;376E1V zd)rLZ$LyOJhp!TQKqAv)YT_sc$1Usu`TqaQ9pm+SYjgufbv zLG(p&xh1D0XHHIWZfRcbvR*=iHs}5!#z*01_kRI}F@Q!DZ3AzjFbweUQy9cZ=;@hJ z>$E^0jzc9n2Ekvw=Eq_os00IX9L?ZOdr1zp6bhzYoR8$7%+=dA+PMZ%5xDD59R)tf%Jn5+Zu4o1QA6r?Lzr)}TzsP{3IH^~p1Q9Q=BSlU`m#>>*C5 zI$w}Dp*+b*)QCTiI9YOA;)GF?sB&Z&HH}IW`_e0E)6z3+shQJOCg1J9`27dPLf2nk zL5d}WG%@G`A_$uQUObDRLut0FWX|87XYt?5H}@q#zBteFXHhJge{d{L7p+LW1P#p^ z^7%@0EHyZ9Sos(?8#RRLy8ZNv2fn>wMfQ$+!(V&jp?@O&gP+>S#tpWsO~GRiDX~jA zUO$Q07ySmD28pKF1D^yh7?`e*6NBXz(VM*)S0;a31|q&M1JMtQatd_tpdR&Z4V+i` zu6z7^$^e`Crn?*W6FxQ~nlXHyGnik_mIi5vl4w{rB%3xF1TrK$dO4nwEW$y$63;g= z6;=3%vK%L8w|c^+_Ze$c8YI%D@)VRVh{lMIn2p^wsW)UCAVwrVF|t`@JtE6-a(9C4 zpf7^zk+@0q9$4PPdr*!CRZ?Wy&7OgmqAS%3(+5a))M{f-!rr(0eH@I&&%x}X%-qb* zb8@9@>8#g`}mlb#VLIlAwT=`GQQ$3K1-yFJ?@v#V<5^ zW2%=%n)IAzT3k6jyUTAMW5{h{_$a2x8BhQ|lhm~o4ukjDeVWahm?%1=t0uW?1l)8~ zviw}_$rXQrZiw!;!i!a2YQ$}7tg=+TD0gl)aaKcB&dT3}AnPwq(#5F6t-l01=1d3v z?p)nHqIBpBvTxiIDKGLC&5{)MS9&F$gcM9+-~3Aa*b#mbTosQEKVvIR{2K#IP+P(P3wKv(!jutq)xe0qF+1@k5qNk`e|qS831w5QYx@$6hF zmUpa_W7!UGezA02WbL>@-mZLfJY3m!REITfC*PhgIeEu1HZ17NBpjF@Kx2>c#l=L= zm5uaXDU}`+zaTxAujBC+$uYaU=leQZx-D3p>C>gaDqZSdrEmQP58F0W;w*o3z0~P# zsg%Zw+;X4f==t0#M&+j-RIkpx!)%gEf9pN^#uHBIm(rbY&b_!f-z)Kq8p<1=XsHsD z??u_W`Qp3fI=VgAde1dUzhvwO#Ofvl>UxLv(1&r5@BJj-joz50@;766*Lo(&>Y-EB zIk(f2d|#}5v>%R{`PlMa#-10ovO;`7337TEe{ZN9$un9RC}uTx{+k(+o-b`>3pA6= G)BgwFM6DhG delta 21360 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 + /// NavigationHelper aids in navigation between pages. It provides commands used to + /// navigate back and forward as well as registers for standard mouse and keyboard + /// shortcuts used to go back and forward in Windows and the hardware back button in + /// Windows Phone. In addition it integrates SuspensionManger to handle process lifetime + /// management and state management when navigating between pages. + /// + /// + /// To make use of NavigationHelper, follow these two steps or + /// start with a BasicPage or any other Page item template other than BlankPage. + /// + /// 1) Create an instance of the NavigationHelper somewhere such as in the + /// constructor for the page and register a callback for the LoadState and + /// SaveState events. + /// + /// public MyPage() + /// { + /// this.InitializeComponent(); + /// var navigationHelper = new NavigationHelper(this); + /// this.navigationHelper.LoadState += navigationHelper_LoadState; + /// this.navigationHelper.SaveState += navigationHelper_SaveState; + /// } + /// + /// private async void navigationHelper_LoadState(object sender, LoadStateEventArgs e) + /// { } + /// private async void navigationHelper_SaveState(object sender, LoadStateEventArgs e) + /// { } + /// + /// + /// 2) Register the page to call into the NavigationHelper whenever the page participates + /// in navigation by overriding the + /// and events. + /// + /// protected override void OnNavigatedTo(NavigationEventArgs e) + /// { + /// navigationHelper.OnNavigatedTo(e); + /// } + /// + /// protected override void OnNavigatedFrom(NavigationEventArgs e) + /// { + /// navigationHelper.OnNavigatedFrom(e); + /// } + /// + /// + [Windows.Foundation.Metadata.WebHostHidden] + public class NavigationHelper : DependencyObject + { + private Page Page { get; set; } + private Frame Frame { get { return this.Page.Frame; } } + + /// + /// Initializes a new instance of the class. + /// + /// A reference to the current page used for navigation. + /// This reference allows for frame manipulation and to ensure that keyboard + /// navigation requests only occur when the page is occupying the entire window. + public NavigationHelper(Page page) + { + this.Page = page; + + // When this page is part of the visual tree make two changes: + // 1) Map application view state to visual state for the page + // 2) Handle hardware navigation requests + this.Page.Loaded += (sender, e) => + { +#if WINDOWS_PHONE_APP + Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed; +#else + // Keyboard and mouse navigation only apply when occupying the entire window + if (this.Page.ActualHeight == Window.Current.Bounds.Height && + this.Page.ActualWidth == Window.Current.Bounds.Width) + { + // Listen to the window directly so focus isn't required + Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated += + CoreDispatcher_AcceleratorKeyActivated; + Window.Current.CoreWindow.PointerPressed += + this.CoreWindow_PointerPressed; + } +#endif + }; + + // Undo the same changes when the page is no longer visible + this.Page.Unloaded += (sender, e) => + { +#if WINDOWS_PHONE_APP + Windows.Phone.UI.Input.HardwareButtons.BackPressed -= HardwareButtons_BackPressed; +#else + Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated -= + CoreDispatcher_AcceleratorKeyActivated; + Window.Current.CoreWindow.PointerPressed -= + this.CoreWindow_PointerPressed; +#endif + }; + } + + #region Navigation support + + RelayCommand _goBackCommand; + RelayCommand _goForwardCommand; + + /// + /// used to bind to the back Button's Command property + /// for navigating to the most recent item in back navigation history, if a Frame + /// manages its own navigation history. + /// + /// The is set up to use the virtual method + /// as the Execute Action and for CanExecute. + /// + public RelayCommand GoBackCommand + { + get + { + if (_goBackCommand == null) + { + _goBackCommand = new RelayCommand( + () => this.GoBack(), + () => this.CanGoBack()); + } + return _goBackCommand; + } + set + { + _goBackCommand = value; + } + } + /// + /// used for navigating to the most recent item in + /// the forward navigation history, if a Frame manages its own navigation history. + /// + /// The is set up to use the virtual method + /// as the Execute Action and for CanExecute. + /// + public RelayCommand GoForwardCommand + { + get + { + if (_goForwardCommand == null) + { + _goForwardCommand = new RelayCommand( + () => this.GoForward(), + () => this.CanGoForward()); + } + return _goForwardCommand; + } + } + + /// + /// Virtual method used by the property + /// to determine if the can go back. + /// + /// + /// true if the has at least one entry + /// in the back navigation history. + /// + public virtual bool CanGoBack() + { + return this.Frame != null && this.Frame.CanGoBack; + } + /// + /// Virtual method used by the property + /// to determine if the can go forward. + /// + /// + /// true if the has at least one entry + /// in the forward navigation history. + /// + public virtual bool CanGoForward() + { + return this.Frame != null && this.Frame.CanGoForward; + } + + /// + /// Virtual method used by the property + /// to invoke the method. + /// + public virtual void GoBack() + { + if (this.Frame != null && this.Frame.CanGoBack) this.Frame.GoBack(); + } + /// + /// Virtual method used by the property + /// to invoke the method. + /// + public virtual void GoForward() + { + if (this.Frame != null && this.Frame.CanGoForward) this.Frame.GoForward(); + } + +#if WINDOWS_PHONE_APP + /// + /// Invoked when the hardware back button is pressed. For Windows Phone only. + /// + /// Instance that triggered the event. + /// Event data describing the conditions that led to the event. + private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e) + { + if (this.GoBackCommand.CanExecute(null)) + { + e.Handled = true; + this.GoBackCommand.Execute(null); + } + } +#else + /// + /// Invoked on every keystroke, including system keys such as Alt key combinations, when + /// this page is active and occupies the entire window. Used to detect keyboard navigation + /// between pages even when the page itself doesn't have focus. + /// + /// Instance that triggered the event. + /// Event data describing the conditions that led to the event. + private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, + AcceleratorKeyEventArgs e) + { + var virtualKey = e.VirtualKey; + + // Only investigate further when Left, Right, or the dedicated Previous or Next keys + // are pressed + if ((e.EventType == CoreAcceleratorKeyEventType.SystemKeyDown || + e.EventType == CoreAcceleratorKeyEventType.KeyDown) && + (virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right || + (int)virtualKey == 166 || (int)virtualKey == 167)) + { + var coreWindow = Window.Current.CoreWindow; + var downState = CoreVirtualKeyStates.Down; + bool menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState; + bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState; + bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState; + bool noModifiers = !menuKey && !controlKey && !shiftKey; + bool onlyAlt = menuKey && !controlKey && !shiftKey; + + if (((int)virtualKey == 166 && noModifiers) || + (virtualKey == VirtualKey.Left && onlyAlt)) + { + // When the previous key or Alt+Left are pressed navigate back + e.Handled = true; + this.GoBackCommand.Execute(null); + } + else if (((int)virtualKey == 167 && noModifiers) || + (virtualKey == VirtualKey.Right && onlyAlt)) + { + // When the next key or Alt+Right are pressed navigate forward + e.Handled = true; + this.GoForwardCommand.Execute(null); + } + } + } + + /// + /// Invoked on every mouse click, touch screen tap, or equivalent interaction when this + /// page is active and occupies the entire window. Used to detect browser-style next and + /// previous mouse button clicks to navigate between pages. + /// + /// Instance that triggered the event. + /// Event data describing the conditions that led to the event. + private void CoreWindow_PointerPressed(CoreWindow sender, + PointerEventArgs e) + { + var properties = e.CurrentPoint.Properties; + + // Ignore button chords with the left, right, and middle buttons + if (properties.IsLeftButtonPressed || properties.IsRightButtonPressed || + properties.IsMiddleButtonPressed) return; + + // If back or foward are pressed (but not both) navigate appropriately + bool backPressed = properties.IsXButton1Pressed; + bool forwardPressed = properties.IsXButton2Pressed; + if (backPressed ^ forwardPressed) + { + e.Handled = true; + if (backPressed) this.GoBackCommand.Execute(null); + if (forwardPressed) this.GoForwardCommand.Execute(null); + } + } +#endif + + #endregion + + #region Process lifetime management + + private String _pageKey; + + /// + /// Register this event on the current page to populate the page + /// with content passed during navigation as well as any saved + /// state provided when recreating a page from a prior session. + /// + public event LoadStateEventHandler LoadState; + /// + /// Register this event on the current page to preserve + /// state associated with the current page in case the + /// application is suspended or the page is discarded from + /// the navigaqtion cache. + /// + public event SaveStateEventHandler SaveState; + + /// + /// Invoked when this page is about to be displayed in a Frame. + /// This method calls , where all page specific + /// navigation and process lifetime management logic should be placed. + /// + /// Event data that describes how this page was reached. The Parameter + /// property provides the group to be displayed. + public void OnNavigatedTo(NavigationEventArgs e) + { + var frameState = SuspensionManager.SessionStateForFrame(this.Frame); + this._pageKey = "Page-" + this.Frame.BackStackDepth; + + if (e.NavigationMode == NavigationMode.New) + { + // Clear existing state for forward navigation when adding a new page to the + // navigation stack + var nextPageKey = this._pageKey; + int nextPageIndex = this.Frame.BackStackDepth; + while (frameState.Remove(nextPageKey)) + { + nextPageIndex++; + nextPageKey = "Page-" + nextPageIndex; + } + + // Pass the navigation parameter to the new page + if (this.LoadState != null) + { + this.LoadState(this, new LoadStateEventArgs(e.Parameter, null)); + } + } + else + { + // Pass the navigation parameter and preserved page state to the page, using + // the same strategy for loading suspended state and recreating pages discarded + // from cache + if (this.LoadState != null) + { + this.LoadState(this, new LoadStateEventArgs(e.Parameter, (Dictionary)frameState[this._pageKey])); + } + } + } + + /// + /// Invoked when this page will no longer be displayed in a Frame. + /// This method calls , where all page specific + /// navigation and process lifetime management logic should be placed. + /// + /// Event data that describes how this page was reached. The Parameter + /// property provides the group to be displayed. + public void OnNavigatedFrom(NavigationEventArgs e) + { + var frameState = SuspensionManager.SessionStateForFrame(this.Frame); + var pageState = new Dictionary(); + if (this.SaveState != null) + { + this.SaveState(this, new SaveStateEventArgs(pageState)); + } + frameState[_pageKey] = pageState; + } + + #endregion + } + + /// + /// Represents the method that will handle the event + /// + public delegate void LoadStateEventHandler(object sender, LoadStateEventArgs e); + /// + /// Represents the method that will handle the event + /// + public delegate void SaveStateEventHandler(object sender, SaveStateEventArgs e); + + /// + /// Class used to hold the event data required when a page attempts to load state. + /// + public class LoadStateEventArgs : EventArgs + { + /// + /// The parameter value passed to + /// when this page was initially requested. + /// + public Object NavigationParameter { get; private set; } + /// + /// A dictionary of state preserved by this page during an earlier + /// session. This will be null the first time a page is visited. + /// + public Dictionary PageState { get; private set; } + + /// + /// Initializes a new instance of the class. + /// + /// + /// The parameter value passed to + /// when this page was initially requested. + /// + /// + /// A dictionary of state preserved by this page during an earlier + /// session. This will be null the first time a page is visited. + /// + public LoadStateEventArgs(Object navigationParameter, Dictionary pageState) + : base() + { + this.NavigationParameter = navigationParameter; + this.PageState = pageState; + } + } + /// + /// Class used to hold the event data required when a page attempts to save state. + /// + public class SaveStateEventArgs : EventArgs + { + /// + /// An empty dictionary to be populated with serializable state. + /// + public Dictionary PageState { get; private set; } + + /// + /// Initializes a new instance of the class. + /// + /// An empty dictionary to be populated with serializable state. + public SaveStateEventArgs(Dictionary pageState) + : base() + { + this.PageState = pageState; + } + } +} diff --git a/ModernKeePass/Common/ObservableDictionary.cs b/ModernKeePass/Common/ObservableDictionary.cs new file mode 100644 index 0000000..429c553 --- /dev/null +++ b/ModernKeePass/Common/ObservableDictionary.cs @@ -0,0 +1,149 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Windows.Foundation.Collections; + +namespace ModernKeePass.Common +{ + /// + /// Implementation of IObservableMap that supports reentrancy for use as a default view + /// model. + /// + public class ObservableDictionary : IObservableMap + { + private class ObservableDictionaryChangedEventArgs : IMapChangedEventArgs + { + public ObservableDictionaryChangedEventArgs(CollectionChange change, string key) + { + this.CollectionChange = change; + this.Key = key; + } + + public CollectionChange CollectionChange { get; private set; } + public string Key { get; private set; } + } + + private Dictionary _dictionary = new Dictionary(); + public event MapChangedEventHandler MapChanged; + + private void InvokeMapChanged(CollectionChange change, string key) + { + var eventHandler = MapChanged; + if (eventHandler != null) + { + eventHandler(this, new ObservableDictionaryChangedEventArgs(change, key)); + } + } + + public void Add(string key, object value) + { + this._dictionary.Add(key, value); + this.InvokeMapChanged(CollectionChange.ItemInserted, key); + } + + public void Add(KeyValuePair item) + { + this.Add(item.Key, item.Value); + } + + public bool Remove(string key) + { + if (this._dictionary.Remove(key)) + { + this.InvokeMapChanged(CollectionChange.ItemRemoved, key); + return true; + } + return false; + } + + public bool Remove(KeyValuePair item) + { + object currentValue; + if (this._dictionary.TryGetValue(item.Key, out currentValue) && + Object.Equals(item.Value, currentValue) && this._dictionary.Remove(item.Key)) + { + this.InvokeMapChanged(CollectionChange.ItemRemoved, item.Key); + return true; + } + return false; + } + + public object this[string key] + { + get + { + return this._dictionary[key]; + } + set + { + this._dictionary[key] = value; + this.InvokeMapChanged(CollectionChange.ItemChanged, key); + } + } + + public void Clear() + { + var priorKeys = this._dictionary.Keys.ToArray(); + this._dictionary.Clear(); + foreach (var key in priorKeys) + { + this.InvokeMapChanged(CollectionChange.ItemRemoved, key); + } + } + + public ICollection Keys + { + get { return this._dictionary.Keys; } + } + + public bool ContainsKey(string key) + { + return this._dictionary.ContainsKey(key); + } + + public bool TryGetValue(string key, out object value) + { + return this._dictionary.TryGetValue(key, out value); + } + + public ICollection Values + { + get { return this._dictionary.Values; } + } + + public bool Contains(KeyValuePair item) + { + return this._dictionary.Contains(item); + } + + public int Count + { + get { return this._dictionary.Count; } + } + + public bool IsReadOnly + { + get { return false; } + } + + public IEnumerator> GetEnumerator() + { + return this._dictionary.GetEnumerator(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return this._dictionary.GetEnumerator(); + } + + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + int arraySize = array.Length; + foreach (var pair in this._dictionary) + { + if (arrayIndex >= arraySize) break; + array[arrayIndex++] = pair; + } + } + } +} diff --git a/ModernKeePass/Common/RelayCommand.cs b/ModernKeePass/Common/RelayCommand.cs new file mode 100644 index 0000000..72739be --- /dev/null +++ b/ModernKeePass/Common/RelayCommand.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Input; + +namespace ModernKeePass.Common +{ + /// + /// A command whose sole purpose is to relay its functionality + /// to other objects by invoking delegates. + /// The default return value for the CanExecute method is 'true'. + /// needs to be called whenever + /// is expected to return a different value. + /// + public class RelayCommand : ICommand + { + private readonly Action _execute; + private readonly Func _canExecute; + + /// + /// Raised when RaiseCanExecuteChanged is called. + /// + public event EventHandler CanExecuteChanged; + + /// + /// Creates a new command that can always execute. + /// + /// The execution logic. + public RelayCommand(Action execute) + : this(execute, null) + { + } + + /// + /// Creates a new command. + /// + /// The execution logic. + /// The execution status logic. + public RelayCommand(Action execute, Func canExecute) + { + if (execute == null) + throw new ArgumentNullException("execute"); + _execute = execute; + _canExecute = canExecute; + } + + /// + /// Determines whether this can execute in its current state. + /// + /// + /// Data used by the command. If the command does not require data to be passed, this object can be set to null. + /// + /// true if this command can be executed; otherwise, false. + public bool CanExecute(object parameter) + { + return _canExecute == null ? true : _canExecute(); + } + + /// + /// Executes the on the current command target. + /// + /// + /// Data used by the command. If the command does not require data to be passed, this object can be set to null. + /// + public void Execute(object parameter) + { + _execute(); + } + + /// + /// Method used to raise the event + /// to indicate that the return value of the + /// method has changed. + /// + public void RaiseCanExecuteChanged() + { + var handler = CanExecuteChanged; + if (handler != null) + { + handler(this, EventArgs.Empty); + } + } + } +} \ No newline at end of file diff --git a/ModernKeePass/Common/SuspensionManager.cs b/ModernKeePass/Common/SuspensionManager.cs new file mode 100644 index 0000000..b0eb4c0 --- /dev/null +++ b/ModernKeePass/Common/SuspensionManager.cs @@ -0,0 +1,269 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; +using Windows.ApplicationModel; +using Windows.Storage; +using Windows.Storage.Streams; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; + +namespace ModernKeePass.Common +{ + /// + /// SuspensionManager captures global session state to simplify process lifetime management + /// for an application. Note that session state will be automatically cleared under a variety + /// of conditions and should only be used to store information that would be convenient to + /// carry across sessions, but that should be discarded when an application crashes or is + /// upgraded. + /// + internal sealed class SuspensionManager + { + private static Dictionary _sessionState = new Dictionary(); + private static List _knownTypes = new List(); + private const string sessionStateFilename = "_sessionState.xml"; + + /// + /// Provides access to global session state for the current session. This state is + /// serialized by and restored by + /// , so values must be serializable by + /// and should be as compact as possible. Strings + /// and other self-contained data types are strongly recommended. + /// + public static Dictionary SessionState + { + get { return _sessionState; } + } + + /// + /// List of custom types provided to the when + /// reading and writing session state. Initially empty, additional types may be + /// added to customize the serialization process. + /// + public static List KnownTypes + { + get { return _knownTypes; } + } + + /// + /// Save the current . Any instances + /// registered with will also preserve their current + /// navigation stack, which in turn gives their active an opportunity + /// to save its state. + /// + /// An asynchronous task that reflects when session state has been saved. + public static async Task SaveAsync() + { + try + { + // Save the navigation state for all registered frames + foreach (var weakFrameReference in _registeredFrames) + { + Frame frame; + if (weakFrameReference.TryGetTarget(out frame)) + { + SaveFrameNavigationState(frame); + } + } + + // Serialize the session state synchronously to avoid asynchronous access to shared + // state + MemoryStream sessionData = new MemoryStream(); + DataContractSerializer serializer = new DataContractSerializer(typeof(Dictionary), _knownTypes); + serializer.WriteObject(sessionData, _sessionState); + + // Get an output stream for the SessionState file and write the state asynchronously + StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(sessionStateFilename, CreationCollisionOption.ReplaceExisting); + using (Stream fileStream = await file.OpenStreamForWriteAsync()) + { + sessionData.Seek(0, SeekOrigin.Begin); + await sessionData.CopyToAsync(fileStream); + } + } + catch (Exception e) + { + throw new SuspensionManagerException(e); + } + } + + /// + /// Restores previously saved . Any instances + /// registered with will also restore their prior navigation + /// state, which in turn gives their active an opportunity restore its + /// state. + /// + /// An optional key that identifies the type of session. + /// This can be used to distinguish between multiple application launch scenarios. + /// An asynchronous task that reflects when session state has been read. The + /// content of should not be relied upon until this task + /// completes. + public static async Task RestoreAsync(String sessionBaseKey = null) + { + _sessionState = new Dictionary(); + + try + { + // Get the input stream for the SessionState file + StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(sessionStateFilename); + using (IInputStream inStream = await file.OpenSequentialReadAsync()) + { + // Deserialize the Session State + DataContractSerializer serializer = new DataContractSerializer(typeof(Dictionary), _knownTypes); + _sessionState = (Dictionary)serializer.ReadObject(inStream.AsStreamForRead()); + } + + // Restore any registered frames to their saved state + foreach (var weakFrameReference in _registeredFrames) + { + Frame frame; + if (weakFrameReference.TryGetTarget(out frame) && (string)frame.GetValue(FrameSessionBaseKeyProperty) == sessionBaseKey) + { + frame.ClearValue(FrameSessionStateProperty); + RestoreFrameNavigationState(frame); + } + } + } + catch (Exception e) + { + throw new SuspensionManagerException(e); + } + } + + private static DependencyProperty FrameSessionStateKeyProperty = + DependencyProperty.RegisterAttached("_FrameSessionStateKey", typeof(String), typeof(SuspensionManager), null); + private static DependencyProperty FrameSessionBaseKeyProperty = + DependencyProperty.RegisterAttached("_FrameSessionBaseKeyParams", typeof(String), typeof(SuspensionManager), null); + private static DependencyProperty FrameSessionStateProperty = + DependencyProperty.RegisterAttached("_FrameSessionState", typeof(Dictionary), typeof(SuspensionManager), null); + private static List> _registeredFrames = new List>(); + + /// + /// Registers a instance to allow its navigation history to be saved to + /// and restored from . Frames should be registered once + /// immediately after creation if they will participate in session state management. Upon + /// registration if state has already been restored for the specified key + /// the navigation history will immediately be restored. Subsequent invocations of + /// will also restore navigation history. + /// + /// An instance whose navigation history should be managed by + /// + /// A unique key into used to + /// store navigation-related information. + /// An optional key that identifies the type of session. + /// This can be used to distinguish between multiple application launch scenarios. + public static void RegisterFrame(Frame frame, String sessionStateKey, String sessionBaseKey = null) + { + if (frame.GetValue(FrameSessionStateKeyProperty) != null) + { + throw new InvalidOperationException("Frames can only be registered to one session state key"); + } + + if (frame.GetValue(FrameSessionStateProperty) != null) + { + throw new InvalidOperationException("Frames must be either be registered before accessing frame session state, or not registered at all"); + } + + if (!string.IsNullOrEmpty(sessionBaseKey)) + { + frame.SetValue(FrameSessionBaseKeyProperty, sessionBaseKey); + sessionStateKey = sessionBaseKey + "_" + sessionStateKey; + } + + // Use a dependency property to associate the session key with a frame, and keep a list of frames whose + // navigation state should be managed + frame.SetValue(FrameSessionStateKeyProperty, sessionStateKey); + _registeredFrames.Add(new WeakReference(frame)); + + // Check to see if navigation state can be restored + RestoreFrameNavigationState(frame); + } + + /// + /// Disassociates a previously registered by + /// from . Any navigation state previously captured will be + /// removed. + /// + /// An instance whose navigation history should no longer be + /// managed. + public static void UnregisterFrame(Frame frame) + { + // Remove session state and remove the frame from the list of frames whose navigation + // state will be saved (along with any weak references that are no longer reachable) + SessionState.Remove((String)frame.GetValue(FrameSessionStateKeyProperty)); + _registeredFrames.RemoveAll((weakFrameReference) => + { + Frame testFrame; + return !weakFrameReference.TryGetTarget(out testFrame) || testFrame == frame; + }); + } + + /// + /// Provides storage for session state associated with the specified . + /// Frames that have been previously registered with have + /// their session state saved and restored automatically as a part of the global + /// . Frames that are not registered have transient state + /// that can still be useful when restoring pages that have been discarded from the + /// navigation cache. + /// + /// Apps may choose to rely on to manage + /// page-specific state instead of working with frame session state directly. + /// The instance for which session state is desired. + /// A collection of state subject to the same serialization mechanism as + /// . + public static Dictionary SessionStateForFrame(Frame frame) + { + var frameState = (Dictionary)frame.GetValue(FrameSessionStateProperty); + + if (frameState == null) + { + var frameSessionKey = (String)frame.GetValue(FrameSessionStateKeyProperty); + if (frameSessionKey != null) + { + // Registered frames reflect the corresponding session state + if (!_sessionState.ContainsKey(frameSessionKey)) + { + _sessionState[frameSessionKey] = new Dictionary(); + } + frameState = (Dictionary)_sessionState[frameSessionKey]; + } + else + { + // Frames that aren't registered have transient state + frameState = new Dictionary(); + } + frame.SetValue(FrameSessionStateProperty, frameState); + } + return frameState; + } + + private static void RestoreFrameNavigationState(Frame frame) + { + var frameState = SessionStateForFrame(frame); + if (frameState.ContainsKey("Navigation")) + { + frame.SetNavigationState((String)frameState["Navigation"]); + } + } + + private static void SaveFrameNavigationState(Frame frame) + { + var frameState = SessionStateForFrame(frame); + frameState["Navigation"] = frame.GetNavigationState(); + } + } + public class SuspensionManagerException : Exception + { + public SuspensionManagerException() + { + } + + public SuspensionManagerException(Exception e) + : base("SuspensionManager failed", e) + { + + } + } +} diff --git a/ModernKeePass/MainPage.xaml b/ModernKeePass/MainPage.xaml index e0cf7c6..bd209e2 100644 --- a/ModernKeePass/MainPage.xaml +++ b/ModernKeePass/MainPage.xaml @@ -8,6 +8,7 @@ mc:Ignorable="d"> - +