More modernization

- Split generic "common" libraries into specific libraries
- Use other packages in lieu of custom code
- General cleanup
This commit is contained in:
2023-04-05 16:06:38 -04:00
parent f480a6c373
commit b5f570688d
46 changed files with 1210 additions and 656 deletions

6
.gitmodules vendored
View File

@@ -1,6 +0,0 @@
[submodule "Common.Wpf"]
path = Common.Wpf
url = https://github.com/ckaczor/Common.Wpf.git
[submodule "Common"]
path = Common
url = https://github.com/ckaczor/Common.git

View File

@@ -4,7 +4,7 @@
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Common.Wpf;component/Toolbar/SplitButton/SplitButtonStyle.xaml" />
<ResourceDictionary Source="pack://application:,,,/Wpf.Controls.Toolbar;component/SplitButton/SplitButtonStyle.xaml" />
<ResourceDictionary Source="Style.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

View File

@@ -1,13 +1,12 @@
using Common.Debug;
using Common.Helpers;
using Common.IO;
using Common.Settings;
using Common.Wpf.Extensions;
using CKaczor.GenericSettingsProvider;
using CKaczor.Wpf.Application;
using FeedCenter.Data;
using FeedCenter.Properties;
using Serilog;
using System;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Windows.Threading;
namespace FeedCenter
{
@@ -34,32 +33,23 @@ namespace FeedCenter
var app = new App();
app.InitializeComponent();
// Create an isolation handle to see if we are already running
var isolationHandle = ApplicationIsolation.GetIsolationHandle(FeedCenter.Properties.Resources.ApplicationName);
// Create an single instance handle to see if we are already running
var isolationHandle = SingleInstance.GetSingleInstanceHandleAsync(Name).Result;
// If there is another copy then pass it the command line and exit
if (isolationHandle == null)
{
InterprocessMessageSender.SendMessage(FeedCenter.Properties.Resources.ApplicationName, Environment.CommandLine);
return;
}
// Use the handle over the lifetime of the application
using (isolationHandle)
{
// Set the data directory based on debug or not
AppDomain.CurrentDomain.SetData("DataDirectory", SystemConfiguration.DataDirectory);
// Get the data directory
var path = AppDomain.CurrentDomain.GetData("DataDirectory").ToString();
// Set the path
Database.DatabasePath = path;
Database.DatabaseFile = System.IO.Path.Combine(path, Settings.Default.DatabaseFile);
Database.DatabasePath = SystemConfiguration.DataDirectory;
Database.DatabaseFile = Path.Combine(SystemConfiguration.DataDirectory, Settings.Default.DatabaseFile);
Database.Load();
// Get the generic provider
var genericProvider = (GenericSettingsProvider) Settings.Default.Providers[typeof(GenericSettingsProvider).Name];
var genericProvider = (GenericSettingsProvider) Settings.Default.Providers[nameof(GenericSettingsProvider)];
if (genericProvider == null)
return;
@@ -73,8 +63,22 @@ namespace FeedCenter
genericProvider.GetVersionList = SettingsStore.GetVersionList;
genericProvider.DeleteOldVersionsOnUpgrade = !IsDebugBuild;
// Initialize the tracer with the current process ID
Tracer.Initialize(SystemConfiguration.UserSettingsPath, FeedCenter.Properties.Resources.ApplicationName, Process.GetCurrentProcess().Id.ToString(CultureInfo.InvariantCulture), false);
Log.Logger = new LoggerConfiguration()
.Enrich.WithThreadId()
.WriteTo.Console()
.WriteTo.File(
Path.Join(SystemConfiguration.UserSettingsPath, $"{FeedCenter.Properties.Resources.ApplicationName}_.txt"),
rollingInterval: RollingInterval.Day, retainedFileCountLimit: 5,
outputTemplate: "[{Timestamp:u} - {ThreadId} - {Level:u3}] {Message:lj}{NewLine}{Exception}")
.CreateLogger();
Log.Logger.Information("---");
Log.Logger.Information("Application started");
Log.Logger.Information("Command line arguments:");
foreach (var arg in Environment.GetCommandLineArgs().Select((value, index) => (Value: value, Index: index)))
Log.Logger.Information("\tArg {0}: {1}", arg.Index, arg.Value);
Current.DispatcherUnhandledException += HandleCurrentDispatcherUnhandledException;
AppDomain.CurrentDomain.UnhandledException += HandleCurrentDomainUnhandledException;
@@ -103,22 +107,19 @@ namespace FeedCenter
// Run the app
app.Run(mainWindow);
// Terminate the tracer
Tracer.Dispose();
}
}
private static void HandleCurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Tracer.WriteException((Exception) e.ExceptionObject);
Tracer.Flush();
Log.Logger.Error((Exception) e.ExceptionObject, "Exception");
}
private static void HandleCurrentDispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
private static void HandleCurrentDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
Tracer.WriteException(e.Exception);
Tracer.Flush();
Log.Logger.Error(e.Exception, "Exception");
}
public static string Name => FeedCenter.Properties.Resources.ApplicationName;
}
}
}

View File

@@ -1,73 +0,0 @@
using Common.Debug;
using Common.Internet;
using FeedCenter.Properties;
using System;
using System.Diagnostics;
namespace FeedCenter
{
public static class BrowserCommon
{
public static Browser FindBrowser(string browserKey)
{
Browser browser = null;
// Get the list of installed browsers
var browsers = Browser.DetectInstalledBrowsers();
// Make sure the desired browser exists
if (browsers.ContainsKey(browserKey))
{
// Get the browser
browser = browsers[browserKey];
}
return browser;
}
public static bool OpenLink(string url)
{
// Get the browser
var browser = FindBrowser(Settings.Default.Browser);
// Start the browser
return OpenLink(browser, url);
}
public static bool OpenLink(Browser browser, string url)
{
try
{
// Don't bother with empty links
if (String.IsNullOrEmpty(url))
return true;
// Add quotes around the URL for safety
url = $"\"{url}\"";
// Start the browser
if (browser == null)
{
var ps = new ProcessStartInfo(url)
{
UseShellExecute = true,
Verb = "open"
};
Process.Start(ps);
}
else
Process.Start(browser.Command, url);
return true;
}
catch (Exception exception)
{
// Just log the exception
Tracer.WriteException(exception);
return false;
}
}
}
}

View File

@@ -1,5 +1,5 @@
using Common.Debug;
using FeedCenter.Properties;
using FeedCenter.Properties;
using Serilog;
using System;
using System.Collections.Generic;
using System.Data.SqlServerCe;
@@ -38,9 +38,9 @@ namespace FeedCenter.Data
private static SqlServerCeFileVersion GetFileVersion(string databasePath)
{
// Create a mapping of version numbers to the version enumeration
var versionMapping = new Dictionary<int, SqlServerCeFileVersion>
{
{ 0x73616261, SqlServerCeFileVersion.Version20 },
var versionMapping = new Dictionary<int, SqlServerCeFileVersion>
{
{ 0x73616261, SqlServerCeFileVersion.Version20 },
{ 0x002dd714, SqlServerCeFileVersion.Version30 },
{ 0x00357b9d, SqlServerCeFileVersion.Version35 },
{ 0x003d0900, SqlServerCeFileVersion.Version40 }
@@ -63,7 +63,7 @@ namespace FeedCenter.Data
}
catch (Exception exception)
{
Tracer.WriteException(exception);
Log.Logger.Error(exception, "Exception");
throw;
}
@@ -78,16 +78,16 @@ namespace FeedCenter.Data
public static void CreateDatabase()
{
Tracer.WriteLine("Creating database engine");
Log.Logger.Information("Creating database engine");
// Create the database engine
using var engine = new SqlCeEngine($"Data Source={DatabaseFile}");
Tracer.WriteLine("Creating database");
Log.Logger.Information("Creating database");
// Create the database itself
engine.CreateDatabase();
Tracer.WriteLine("Running database script");
Log.Logger.Information("Running database script");
// Run the creation script
ExecuteScript(Resources.CreateDatabase);
@@ -113,34 +113,34 @@ namespace FeedCenter.Data
if (string.IsNullOrEmpty(versionString))
versionString = "0";
Tracer.WriteLine("Database version: {0}", versionString);
Log.Logger.Information("Database version: {0}", versionString);
return int.Parse(versionString);
}
public static void UpdateDatabase()
{
Tracer.WriteLine("Getting database file version");
Log.Logger.Information("Getting database file version");
// Get the database file version
var fileVersion = GetFileVersion(DatabaseFile);
Tracer.WriteLine("Database file version: {0}", fileVersion);
Log.Logger.Information("Database file version: {0}", fileVersion);
// See if we need to upgrade the database file version
if (fileVersion != SqlServerCeFileVersion.Version40)
{
Tracer.WriteLine("Creating database engine");
Log.Logger.Information("Creating database engine");
// Create the database engine
using var engine = new SqlCeEngine($"Data Source={DatabaseFile}");
Tracer.WriteLine("Upgrading database");
Log.Logger.Information("Upgrading database");
// Upgrade the database (if needed)
engine.Upgrade();
}
Tracer.WriteLine("Getting database version");
Log.Logger.Information("Getting database version");
// Create a database connection
using var connection = new SqlCeConnection($"Data Source={DatabaseFile}");
@@ -183,11 +183,11 @@ namespace FeedCenter.Data
public static void MaintainDatabase()
{
Tracer.WriteLine("Creating database engine");
Log.Logger.Information("Creating database engine");
// Create the database engine
using var engine = new SqlCeEngine($"Data Source={DatabaseFile}");
Tracer.WriteLine("Shrinking database");
Log.Logger.Information("Shrinking database");
// Compact the database
engine.Shrink();

View File

@@ -125,22 +125,50 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Public\namebasedgrid\src\NameBasedGrid\NameBasedGrid.csproj" />
<ProjectReference Include="..\Common.Wpf\Common.Native\Common.Native.csproj" />
<ProjectReference Include="..\Common.Wpf\Common.Wpf.csproj" />
<ProjectReference Include="..\Common\Common.csproj" />
<ProjectReference Include="..\..\ApplicationUpdate\ApplicationUpdate.csproj" />
<ProjectReference Include="..\..\GenericSettingsProvider\GenericSettingsProvider.csproj" />
<ProjectReference Include="..\..\InstalledBrowsers\InstalledBrowsers.csproj" />
<ProjectReference Include="..\..\Wpf.Application.SingleInstance\Wpf.Application.SingleInstance.csproj" />
<ProjectReference Include="..\..\Wpf.Application.StartWithWindows\Wpf.Application.StartWithWindows.csproj" />
<ProjectReference Include="..\..\Wpf.Controls.HtmlTextBlock\Wpf.Controls.HtmlTextBlock.csproj" />
<ProjectReference Include="..\..\Wpf.Controls.Link\Wpf.Controls.Link.csproj" />
<ProjectReference Include="..\..\Wpf.Controls.Toolbar\Wpf.Controls.Toolbar.csproj" />
<ProjectReference Include="..\..\Wpf.Validation\Wpf.Validation.csproj" />
<ProjectReference Include="..\..\Wpf.Windows.ControlBox\Wpf.Windows.ControlBox.csproj" />
<ProjectReference Include="..\..\Wpf.Windows.SnappingWindow\Wpf.Windows.SnappingWindow.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="2.0.123" />
<PackageReference Include="DebounceThrottle" Version="2.0.0" />
<PackageReference Include="HtmlAgilityPack" Version="1.11.46" />
<PackageReference Include="HtmlTextWriter" Version="2.1.1" />
<PackageReference Include="Microsoft.SqlServer.Compact" Version="4.0.8876.1" GeneratePathProperty="true" />
<PackageReference Include="Microsoft.SqlServer.Compact" Version="4.0.8876.1" GeneratePathProperty="true">
<NoWarn>NU1701</NoWarn>
</PackageReference>
<PackageReference Include="Microsoft.Windows.Compatibility" Version="7.0.0" />
<PackageReference Include="Realm" Version="10.20.0" />
<PackageReference Include="Serilog" Version="2.12.0" />
<PackageReference Include="Serilog.Enrichers.Thread" Version="3.1.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
</ItemGroup>
<ItemGroup>
<Compile Remove="SqlSettingsProvider.cs" />
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Settings.Designer.cs">
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<None Update="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<PropertyGroup>
<PostBuildEvent>
if not exist "$(TargetDir)x86" md "$(TargetDir)x86"

View File

@@ -3,8 +3,8 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:windows="clr-namespace:Common.Wpf.Windows;assembly=Common.Wpf"
xmlns:my="clr-namespace:FeedCenter.Properties"
xmlns:controlBox="clr-namespace:CKaczor.Wpf.Windows;assembly=Wpf.Windows.ControlBox"
mc:Ignorable="d"
Title="{x:Static my:Resources.FeedChooserWindow}"
Height="247.297"
@@ -12,8 +12,8 @@
WindowStartupLocation="CenterOwner"
Icon="/FeedCenter;component/Resources/Application.ico"
FocusManager.FocusedElement="{Binding ElementName=FeedDataGrid}"
windows:ControlBox.HasMaximizeButton="False"
windows:ControlBox.HasMinimizeButton="False">
controlBox:ControlBox.HasMaximizeButton="False"
controlBox:ControlBox.HasMinimizeButton="False">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />

View File

@@ -1,16 +1,16 @@
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:FeedCenter.Properties"
xmlns:linkControl="clr-namespace:Common.Wpf.LinkControl;assembly=Common.Wpf"
xmlns:windows="clr-namespace:Common.Wpf.Windows;assembly=Common.Wpf"
xmlns:linkControl="clr-namespace:CKaczor.Wpf.Controls;assembly=Wpf.Controls.Link"
xmlns:controlBox="clr-namespace:CKaczor.Wpf.Windows;assembly=Wpf.Windows.ControlBox"
x:Class="FeedCenter.FeedErrorWindow"
Title="{x:Static my:Resources.FeedErrorWindow}"
Height="300"
Width="550"
WindowStartupLocation="CenterOwner"
Icon="/FeedCenter;component/Resources/Application.ico"
windows:ControlBox.HasMaximizeButton="False"
windows:ControlBox.HasMinimizeButton="False">
controlBox:ControlBox.HasMaximizeButton="False"
controlBox:ControlBox.HasMinimizeButton="False">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="225*" />
@@ -53,31 +53,31 @@
BorderBrush="{DynamicResource {x:Static SystemColors.ActiveBorderBrushKey}}">
<StackPanel Orientation="Horizontal"
Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
<linkControl:LinkControl x:Name="EditFeedButton"
Margin="2"
Click="HandleEditFeedButtonClick"
Text="{x:Static my:Resources.EditLink}"
ToolTip="{x:Static my:Resources.EditFeedButton}" />
<linkControl:LinkControl x:Name="DeleteFeedButton"
Margin="2"
Click="HandleDeleteFeedButtonClick"
Text="{x:Static my:Resources.DeleteLink}"
ToolTip="{x:Static my:Resources.DeleteFeedButton}" />
<linkControl:LinkControl x:Name="RefreshCurrent"
Margin="2"
Click="HandleRefreshCurrentButtonClick"
Text="{x:Static my:Resources.RefreshCurrent}"
ToolTip="{x:Static my:Resources.RefreshCurrent}" />
<linkControl:LinkControl x:Name="OpenPage"
Margin="6,2,2,2"
Click="HandleOpenPageButtonClick"
Text="{x:Static my:Resources.OpenPage}"
ToolTip="{x:Static my:Resources.OpenPage}" />
<linkControl:LinkControl x:Name="OpenFeed"
Margin="2"
Click="HandleOpenFeedButtonClick"
Text="{x:Static my:Resources.OpenFeed}"
ToolTip="{x:Static my:Resources.OpenFeed}" />
<linkControl:Link x:Name="EditFeedButton"
Margin="2"
Click="HandleEditFeedButtonClick"
Text="{x:Static my:Resources.EditLink}"
ToolTip="{x:Static my:Resources.EditFeedButton}" />
<linkControl:Link x:Name="DeleteFeedButton"
Margin="2"
Click="HandleDeleteFeedButtonClick"
Text="{x:Static my:Resources.DeleteLink}"
ToolTip="{x:Static my:Resources.DeleteFeedButton}" />
<linkControl:Link x:Name="RefreshCurrent"
Margin="2"
Click="HandleRefreshCurrentButtonClick"
Text="{x:Static my:Resources.RefreshCurrent}"
ToolTip="{x:Static my:Resources.RefreshCurrent}" />
<linkControl:Link x:Name="OpenPage"
Margin="6,2,2,2"
Click="HandleOpenPageButtonClick"
Text="{x:Static my:Resources.OpenPage}"
ToolTip="{x:Static my:Resources.OpenPage}" />
<linkControl:Link x:Name="OpenFeed"
Margin="2"
Click="HandleOpenFeedButtonClick"
Text="{x:Static my:Resources.OpenFeed}"
ToolTip="{x:Static my:Resources.OpenFeed}" />
</StackPanel>
</Border>
<Grid DockPanel.Dock="Right"
@@ -102,4 +102,4 @@
Grid.Column="2" />
</Grid>
</Grid>
</Window>
</Window>

View File

@@ -1,9 +1,11 @@
using FeedCenter.Options;
using CKaczor.InstalledBrowsers;
using FeedCenter.Data;
using FeedCenter.Options;
using FeedCenter.Properties;
using System.ComponentModel;
using System.Windows;
using System.Windows.Data;
using System.Windows.Input;
using FeedCenter.Data;
namespace FeedCenter
{
@@ -87,13 +89,13 @@ namespace FeedCenter
private void HandleOpenPageButtonClick(object sender, RoutedEventArgs e)
{
var feed = (Feed) FeedDataGrid.SelectedItem;
BrowserCommon.OpenLink(feed.Link);
InstalledBrowser.OpenLink(Settings.Default.Browser, feed.Link);
}
private void HandleOpenFeedButtonClick(object sender, RoutedEventArgs e)
{
var feed = (Feed) FeedDataGrid.SelectedItem;
BrowserCommon.OpenLink(feed.Source);
InstalledBrowser.OpenLink(Settings.Default.Browser, feed.Source);
}
private void HandleOkayButtonClick(object sender, RoutedEventArgs e)
@@ -129,4 +131,4 @@ namespace FeedCenter
IsEnabled = true;
}
}
}
}

View File

@@ -1,5 +1,5 @@
using System;
using Common.Debug;
using Serilog;
using System;
using System.Xml;
namespace FeedCenter.FeedParsers
@@ -68,7 +68,7 @@ namespace FeedCenter.FeedParsers
}
catch (XmlException xmlException)
{
Tracer.WriteLine("XML error: " + xmlException.Message + "\n" + feedText);
Log.Logger.Error(xmlException, "Exception: {0}", feedText);
return FeedReadResult.InvalidXml;
}

View File

@@ -1,4 +1,4 @@
using Common.Debug;
using Serilog;
using System;
using System.Linq;
using System.Xml;
@@ -55,7 +55,7 @@ namespace FeedCenter.FeedParsers
// Check to see if we already have this feed item
if (existingFeedItem == null)
{
Tracer.WriteLine("New link: " + newFeedItem.Link);
Log.Logger.Information("New link: " + newFeedItem.Link);
// Associate the new item with the right feed
newFeedItem.Feed = Feed;
@@ -71,7 +71,7 @@ namespace FeedCenter.FeedParsers
}
else
{
Tracer.WriteLine("Existing link: " + newFeedItem.Link);
Log.Logger.Information("Existing link: " + newFeedItem.Link);
// Update the fields in the existing item
existingFeedItem.Link = newFeedItem.Link;
@@ -150,8 +150,8 @@ namespace FeedCenter.FeedParsers
}
catch (Exception exception)
{
Tracer.WriteException(exception);
Log.Logger.Error(exception, "Exception: {0}", feedText);
return FeedType.Unknown;
}
}

View File

@@ -1,6 +1,7 @@
using Common.Debug;
using Common.Xml;
using Serilog;
using System;
using System.Xml;
using FeedCenter.Xml;
namespace FeedCenter.FeedParsers
{
@@ -73,7 +74,7 @@ namespace FeedCenter.FeedParsers
}
catch (XmlException xmlException)
{
Tracer.WriteLine("XML error: " + xmlException.Message + "\n" + feedText);
Log.Logger.Error(xmlException, "Exception: {0}", feedText);
return FeedReadResult.InvalidXml;
}

View File

@@ -1,7 +1,7 @@
using Common.Debug;
using Common.Xml;
using Serilog;
using System;
using System.Xml;
using FeedCenter.Xml;
namespace FeedCenter.FeedParsers
{
@@ -67,7 +67,7 @@ namespace FeedCenter.FeedParsers
}
catch (XmlException xmlException)
{
Tracer.WriteLine("XML error: " + xmlException.Message + "\n" + feedText);
Log.Logger.Error(xmlException, "Exception: {0}", feedText);
return FeedReadResult.InvalidXml;
}

View File

@@ -1,10 +1,9 @@
using Common.Debug;
using Common.Update;
using Common.Xml;
using CKaczor.ApplicationUpdate;
using FeedCenter.Data;
using FeedCenter.FeedParsers;
using FeedCenter.Properties;
using Realms;
using Serilog;
using System;
using System.Collections.Generic;
using System.Diagnostics;
@@ -16,6 +15,8 @@ using System.Net.Http.Headers;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using FeedCenter.Xml;
using Resources = FeedCenter.Properties.Resources;
namespace FeedCenter
{
@@ -64,6 +65,7 @@ namespace FeedCenter
[PrimaryKey]
[MapTo("ID")]
public Guid Id { get; set; }
public string Name { get; set; }
public string Title { get; set; }
public string Source { get; set; }
@@ -140,8 +142,7 @@ namespace FeedCenter
public FeedReadResult Read(FeedCenterEntities database, bool forceRead = false)
{
Tracer.WriteLine("Reading feed: {0}", Source);
Tracer.IncrementIndentLevel();
Log.Logger.Information("Reading feed: {0}", Source);
var result = ReadFeed(database, forceRead);
@@ -166,8 +167,7 @@ namespace FeedCenter
if (result == FeedReadResult.Success && LastUpdated == Extensions.SqlDateTimeZero.Value)
LastUpdated = DateTimeOffset.Now;
Tracer.DecrementIndentLevel();
Tracer.WriteLine("Done reading feed: {0}", result);
Log.Logger.Information("Done reading feed: {0}", result);
return result;
}
@@ -236,7 +236,7 @@ namespace FeedCenter
}
catch (IOException ioException)
{
Tracer.WriteLine(ioException.Message);
Log.Logger.Error(ioException, "Exception");
return Tuple.Create(FeedReadResult.ConnectionFailed, string.Empty);
}
@@ -281,7 +281,7 @@ namespace FeedCenter
break;
}
Tracer.WriteException(webException);
Log.Logger.Error(webException, "Exception");
if (result == FeedReadResult.UnknownError)
Debug.Print("Unknown error");
@@ -290,7 +290,7 @@ namespace FeedCenter
}
catch (Exception exception)
{
Tracer.WriteLine(exception.Message);
Log.Logger.Error(exception, "Exception");
return Tuple.Create(FeedReadResult.UnknownError, string.Empty);
}
@@ -357,13 +357,13 @@ namespace FeedCenter
}
catch (InvalidFeedFormatException exception)
{
Tracer.WriteException(exception.InnerException);
Log.Logger.Error(exception, "Exception");
return FeedReadResult.InvalidXml;
}
catch (Exception exception)
{
Tracer.WriteLine(exception.Message);
Log.Logger.Error(exception, "Exception");
return FeedReadResult.UnknownError;
}

View File

@@ -1,12 +1,12 @@
using System;
using FeedCenter.Properties;
using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using FeedCenter.Properties;
namespace FeedCenter
{
public partial class MainWindow : IDisposable
public partial class MainWindow
{
private void DisplayCategory()
{
@@ -96,12 +96,5 @@ namespace FeedCenter
Settings.Default.LastCategoryID = _currentCategory?.Id.ToString() ?? string.Empty;
}
public void Dispose()
{
_mainTimer?.Dispose();
_feedReadWorker?.Dispose();
_commandLineListener?.Dispose();
}
}
}
}

View File

@@ -1,42 +1,38 @@
using Common.IO;
using System;
using System;
namespace FeedCenter
{
public partial class MainWindow
{
private InterprocessMessageListener _commandLineListener;
private void HandleCommandLine(object sender, InterprocessMessageListener.InterprocessMessageEventArgs e)
private void HandleCommandLine(string commandLine)
{
// If the command line is blank then ignore it
if (e.Message.Length == 0)
if (commandLine.Length == 0)
return;
// Pad the command line with a trailing space just to be lazy in parsing
var commandLine = e.Message + " ";
commandLine += " ";
// Look for the feed URL in the command line
var startPosition = commandLine.IndexOf("feed://", StringComparison.Ordinal);
// If we found one then we should extract and process it
if (startPosition > 0)
{
// Advance past the protocol
startPosition += 7;
// If nothing was found then exit
if (startPosition <= 0) return;
// Starting at the URL position look for the next space
var endPosition = commandLine.IndexOf(" ", startPosition, StringComparison.Ordinal);
// Advance past the protocol
startPosition += 7;
// Extract the feed URL
var feedUrl = commandLine.Substring(startPosition, endPosition - startPosition);
// Starting at the URL position look for the next space
var endPosition = commandLine.IndexOf(" ", startPosition, StringComparison.Ordinal);
// Add the HTTP protocol by default
feedUrl = "http://" + feedUrl;
// Extract the feed URL
var feedUrl = commandLine.Substring(startPosition, endPosition - startPosition);
// Create a new feed using the URL
HandleNewFeed(feedUrl);
}
// Add the HTTP protocol by default
feedUrl = "http://" + feedUrl;
// Create a new feed using the URL
HandleNewFeed(feedUrl);
}
}
}
}

View File

@@ -1,20 +1,29 @@
using System;
using FeedCenter.Options;
using System;
using System.Linq;
using System.Net;
using Common.Internet;
using FeedCenter.Options;
namespace FeedCenter
{
public partial class MainWindow
{
private delegate void NewFeedDelegate(string feedUrl);
private static string GetAbsoluteUrlString(string baseUrl, string url)
{
var uri = new Uri(url, UriKind.RelativeOrAbsolute);
if (!uri.IsAbsoluteUri)
uri = new Uri(new Uri(baseUrl), uri);
return uri.ToString();
}
private void HandleNewFeed(string feedUrl)
{
// Create and configure the new feed
var feed = Feed.Create(_database);
feed.Source = feedUrl;
feed.Category = _database.DefaultCategory;
feed.Enabled = true;
// Try to detect the feed type
var feedTypeResult = feed.DetectFeedType();
@@ -32,7 +41,7 @@ namespace FeedCenter
// Look for all RSS or atom links in the document
var rssLinks = htmlDocument.DocumentNode.Descendants("link")
.Where(n => n.Attributes["type"] != null && (n.Attributes["type"].Value == "application/rss+xml" || n.Attributes["type"].Value == "application/atom+xml"))
.Select(n => new Tuple<string, string>(UrlHelper.GetAbsoluteUrlString(feed.Source, n.Attributes["href"].Value), WebUtility.HtmlDecode(n.Attributes["title"]?.Value ?? feedUrl)))
.Select(n => new Tuple<string, string>(GetAbsoluteUrlString(feed.Source, n.Attributes["href"].Value), WebUtility.HtmlDecode(n.Attributes["title"]?.Value ?? feedUrl)))
.Distinct()
.ToList();
@@ -91,4 +100,4 @@ namespace FeedCenter
}
}
}
}
}

View File

@@ -1,4 +1,6 @@
using System;
using CKaczor.InstalledBrowsers;
using FeedCenter.Properties;
using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
@@ -49,19 +51,19 @@ namespace FeedCenter
// Get the feed item
var feedItem = (FeedItem) ((ListBoxItem) sender).DataContext;
// Open the item link
if (BrowserCommon.OpenLink(feedItem.Link))
{
// The feed item has been read and is no longer new
_database.SaveChanges(() =>
{
feedItem.BeenRead = true;
feedItem.New = false;
});
// Try to open the item link
if (!InstalledBrowser.OpenLink(Settings.Default.Browser, feedItem.Link))
return;
// Remove the item from the list
LinkTextList.Items.Remove(feedItem);
}
// The feed item has been read and is no longer new
_database.SaveChanges(() =>
{
feedItem.BeenRead = true;
feedItem.New = false;
});
// Remove the item from the list
LinkTextList.Items.Remove(feedItem);
}
private void HandleFeedButtonClick(object sender, RoutedEventArgs e)
@@ -130,4 +132,4 @@ namespace FeedCenter
DisplayFeed();
}
}
}
}

View File

@@ -1,4 +1,4 @@
using Common.Update;
using CKaczor.ApplicationUpdate;
using FeedCenter.Properties;
using System;
using System.Collections.Generic;
@@ -113,8 +113,8 @@ namespace FeedCenter
// Set the text to match the number of errors
FeedErrorsLink.Text = feedErrorCount == 1
? Properties.Resources.FeedErrorLink
: string.Format(Properties.Resources.FeedErrorsLink, feedErrorCount);
? Properties.Resources.FeedErrorLink
: string.Format(Properties.Resources.FeedErrorsLink, feedErrorCount);
}
private static void HandleFeedReadWorkerStart(object sender, DoWorkEventArgs e)
@@ -123,10 +123,10 @@ namespace FeedCenter
var database = new FeedCenterEntities();
// Get the worker
var worker = (BackgroundWorker)sender;
var worker = (BackgroundWorker) sender;
// Get the input information
var workerInput = (FeedReadWorkerInput)e.Argument ?? new FeedReadWorkerInput { Feed = null, ForceRead = false };
var workerInput = (FeedReadWorkerInput) e.Argument ?? new FeedReadWorkerInput { Feed = null, ForceRead = false };
// Setup for progress
var currentProgress = 0;
@@ -179,4 +179,4 @@ namespace FeedCenter
Thread.Sleep(Settings.Default.ProgressSleepInterval * 3);
}
}
}
}

View File

@@ -1,4 +1,5 @@
using FeedCenter.Properties;
using CKaczor.InstalledBrowsers;
using FeedCenter.Properties;
using System.Windows;
using System.Windows.Input;
@@ -26,7 +27,7 @@ namespace FeedCenter
{
// Open the link for the current feed on a left double click
if (e.ClickCount == 2 && e.ChangedButton == MouseButton.Left)
BrowserCommon.OpenLink(_currentFeed.Link);
InstalledBrowser.OpenLink(Settings.Default.Browser, _currentFeed.Link);
}
}
}
}

View File

@@ -2,13 +2,13 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:properties="clr-namespace:FeedCenter.Properties"
xmlns:windows="clr-namespace:Common.Wpf.Windows;assembly=Common.Wpf"
xmlns:toolbar="clr-namespace:Common.Wpf.Toolbar;assembly=Common.Wpf"
xmlns:splitButton="clr-namespace:Common.Wpf.Toolbar.SplitButton;assembly=Common.Wpf"
xmlns:linkControl="clr-namespace:Common.Wpf.LinkControl;assembly=Common.Wpf"
xmlns:htmlTextBlock="clr-namespace:Common.Wpf.HtmlTextBlock;assembly=Common.Wpf"
xmlns:windows="clr-namespace:CKaczor.Wpf.Windows;assembly=Wpf.Windows.SnappingWindow"
xmlns:toolbar="clr-namespace:CKaczor.Wpf.Controls.Toolbar;assembly=Wpf.Controls.Toolbar"
xmlns:splitButton="clr-namespace:CKaczor.Wpf.Controls.Toolbar;assembly=Wpf.Controls.Toolbar"
xmlns:htmlTextBlock="clr-namespace:CKaczor.Wpf.Controls;assembly=Wpf.Controls.HtmlTextBlock"
xmlns:system="clr-namespace:System;assembly=mscorlib"
xmlns:nameBasedGrid="clr-namespace:NameBasedGrid;assembly=NameBasedGrid"
xmlns:controls="clr-namespace:CKaczor.Wpf.Controls;assembly=Wpf.Controls.Link"
Title="MainWindow"
Height="360"
Width="252"
@@ -80,18 +80,19 @@
FontFamily="Marlett"
Content="r"
FontSize="8"
Grid.Column="1"></Button>
Grid.Column="1">
</Button>
</Grid>
<linkControl:LinkControl Name="NewVersionLink"
Height="21"
nameBasedGrid:NameBasedGrid.Row="NewVersionRow"
Text="{x:Static properties:Resources.NewVersionLink}"
Background="AntiqueWhite"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Center"
Visibility="Collapsed"
Click="HandleNewVersionLinkClick">
</linkControl:LinkControl>
<controls:Link Name="NewVersionLink"
Height="21"
nameBasedGrid:NameBasedGrid.Row="NewVersionRow"
Text="{x:Static properties:Resources.NewVersionLink}"
Background="AntiqueWhite"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Center"
Visibility="Collapsed"
Click="HandleNewVersionLinkClick">
</controls:Link>
<Grid Name="CategoryGrid"
Height="21"
nameBasedGrid:NameBasedGrid.Row="CategoryRow"
@@ -186,12 +187,14 @@
<Setter Property="Panel.Background"
TargetName="Bd">
<Setter.Value>
<DynamicResource ResourceKey="{x:Static SystemColors.HighlightBrushKey}" />
<DynamicResource
ResourceKey="{x:Static SystemColors.HighlightBrushKey}" />
</Setter.Value>
</Setter>
<Setter Property="TextElement.Foreground">
<Setter.Value>
<DynamicResource ResourceKey="{x:Static SystemColors.HighlightTextBrushKey}" />
<DynamicResource
ResourceKey="{x:Static SystemColors.HighlightTextBrushKey}" />
</Setter.Value>
</Setter>
<Setter Property="Panel.Cursor"
@@ -295,17 +298,17 @@
</splitButton:SplitButton>
</ToolBar>
</ToolBarTray>
<linkControl:LinkControl Name="FeedErrorsLink"
Height="21"
nameBasedGrid:NameBasedGrid.Row="FeedErrorsRow"
Text="{x:Static properties:Resources.FeedErrorsLink}"
ToolTip="{x:Static properties:Resources.showErrorsToolbarButton}"
Background="AntiqueWhite"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Center"
Visibility="Collapsed"
Click="HandleShowErrorsButtonClick">
</linkControl:LinkControl>
<controls:Link Name="FeedErrorsLink"
Height="21"
nameBasedGrid:NameBasedGrid.Row="FeedErrorsRow"
Text="{x:Static properties:Resources.FeedErrorsLink}"
ToolTip="{x:Static properties:Resources.showErrorsToolbarButton}"
Background="AntiqueWhite"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Center"
Visibility="Collapsed"
Click="HandleShowErrorsButtonClick">
</controls:Link>
</nameBasedGrid:NameBasedGrid>
</Border>
</windows:SnappingWindow>
</windows:SnappingWindow>

View File

@@ -1,9 +1,8 @@
using Common.Debug;
using Common.Helpers;
using Common.IO;
using Common.Update;
using CKaczor.ApplicationUpdate;
using CKaczor.Wpf.Application;
using FeedCenter.Data;
using FeedCenter.Properties;
using Serilog;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -14,7 +13,7 @@ using System.Windows.Media;
namespace FeedCenter
{
public partial class MainWindow
public partial class MainWindow : IDisposable
{
private FeedCenterEntities _database;
private int _feedIndex;
@@ -28,6 +27,21 @@ namespace FeedCenter
InitializeComponent();
}
protected override async void OnClosed(EventArgs e)
{
base.OnClosed(e);
await SingleInstance.Stop();
}
public void Dispose()
{
_mainTimer?.Dispose();
_feedReadWorker?.Dispose();
GC.SuppressFinalize(this);
}
public async void Initialize()
{
// Setup the update handler
@@ -52,12 +66,12 @@ namespace FeedCenter
// Setup the database
_database = Database.Entities;
// Initialize the command line listener
_commandLineListener = new InterprocessMessageListener(Properties.Resources.ApplicationName);
_commandLineListener.MessageReceived += HandleCommandLine;
// Initialize the single instance listener
SingleInstance.MessageReceived += SingleInstance_MessageReceived;
await SingleInstance.StartAsync(App.Name);
// Handle any command line we were started with
HandleCommandLine(null, new InterprocessMessageListener.InterprocessMessageEventArgs(Environment.CommandLine));
HandleCommandLine(Environment.CommandLine);
// Create a timer to keep track of things we need to do
InitializeTimer();
@@ -73,7 +87,12 @@ namespace FeedCenter
if (UpdateCheck.UpdateAvailable)
NewVersionLink.Visibility = Visibility.Visible;
Tracer.WriteLine("MainForm creation finished");
Log.Logger.Information("MainForm creation finished");
}
private void SingleInstance_MessageReceived(object sender, string commandLine)
{
HandleCommandLine(commandLine);
}
#region Setting events
@@ -87,30 +106,36 @@ namespace FeedCenter
return;
}
if (e.PropertyName == Reflection.GetPropertyName(() => Settings.Default.MultipleLineDisplay))
switch (e.PropertyName)
{
// Update the current feed
DisplayFeed();
}
else if (e.PropertyName == Reflection.GetPropertyName(() => Settings.Default.WindowLocked))
{
// Update the window for the new window lock value
HandleWindowLockState();
}
else if (e.PropertyName == Reflection.GetPropertyName(() => Settings.Default.ToolbarLocation))
{
// Update the window for the toolbar location
switch (Settings.Default.ToolbarLocation)
{
case Dock.Top:
NameBasedGrid.NameBasedGrid.SetRow(NavigationToolbarTray, "TopToolbarRow");
case nameof(Settings.Default.MultipleLineDisplay):
// Update the current feed
DisplayFeed();
break;
case nameof(Settings.Default.WindowLocked):
// Update the window for the new window lock value
HandleWindowLockState();
break;
case nameof(Settings.Default.ToolbarLocation):
// Update the window for the toolbar location
switch (Settings.Default.ToolbarLocation)
{
case Dock.Top:
NameBasedGrid.NameBasedGrid.SetRow(NavigationToolbarTray, "TopToolbarRow");
break;
case Dock.Bottom:
NameBasedGrid.NameBasedGrid.SetRow(NavigationToolbarTray, "BottomToolbarRow");
break;
case Dock.Bottom:
NameBasedGrid.NameBasedGrid.SetRow(NavigationToolbarTray, "BottomToolbarRow");
break;
}
break;
case Dock.Left:
case Dock.Right:
throw new NotSupportedException();
default:
throw new ArgumentOutOfRangeException(nameof(Settings.Default.ToolbarLocation));
}
break;
}
}
@@ -124,15 +149,15 @@ namespace FeedCenter
var feedCount = _feedList?.Count() ?? 0;
// Set button states
PreviousToolbarButton.IsEnabled = (feedCount > 1);
NextToolbarButton.IsEnabled = (feedCount > 1);
RefreshToolbarButton.IsEnabled = (feedCount > 0);
FeedButton.IsEnabled = (feedCount > 0);
OpenAllToolbarButton.IsEnabled = (feedCount > 0);
MarkReadToolbarButton.IsEnabled = (feedCount > 0);
FeedLabel.Visibility = (feedCount == 0 ? Visibility.Hidden : Visibility.Visible);
FeedButton.Visibility = (feedCount > 1 ? Visibility.Hidden : Visibility.Visible);
CategoryGrid.Visibility = (_database.Categories.Count() > 1 ? Visibility.Visible : Visibility.Collapsed);
PreviousToolbarButton.IsEnabled = feedCount > 1;
NextToolbarButton.IsEnabled = feedCount > 1;
RefreshToolbarButton.IsEnabled = feedCount > 0;
FeedButton.IsEnabled = feedCount > 0;
OpenAllToolbarButton.IsEnabled = feedCount > 0;
MarkReadToolbarButton.IsEnabled = feedCount > 0;
FeedLabel.Visibility = feedCount == 0 ? Visibility.Hidden : Visibility.Visible;
FeedButton.Visibility = feedCount > 1 ? Visibility.Hidden : Visibility.Visible;
CategoryGrid.Visibility = _database.Categories.Count > 1 ? Visibility.Visible : Visibility.Collapsed;
}
private void InitializeDisplay()
@@ -196,7 +221,7 @@ namespace FeedCenter
_currentFeed = _feedList.OrderBy(feed => feed.Name).AsEnumerable().ElementAt(_feedIndex);
// If the current feed has unread items then we can display it
if (_currentFeed.Items.Count(item => !item.BeenRead) > 0)
if (_currentFeed.Items.Any(item => !item.BeenRead))
{
found = true;
break;
@@ -204,8 +229,7 @@ namespace FeedCenter
// Increment the index and adjust if we've gone around the end
_feedIndex = (_feedIndex + 1) % feedCount;
}
while (_feedIndex != startIndex);
} while (_feedIndex != startIndex);
// If nothing was found then clear the current feed
if (!found)
@@ -263,7 +287,7 @@ namespace FeedCenter
_currentFeed = _feedList.OrderBy(feed => feed.Name).AsEnumerable().ElementAt(_feedIndex);
// If the current feed has unread items then we can display it
if (_currentFeed.Items.Count(item => !item.BeenRead) > 0)
if (_currentFeed.Items.Any(item => !item.BeenRead))
{
found = true;
break;
@@ -275,8 +299,7 @@ namespace FeedCenter
// If we've gone below the start of the list then reset to the end
if (_feedIndex < 0)
_feedIndex = feedCount - 1;
}
while (_feedIndex != startIndex);
} while (_feedIndex != startIndex);
// If nothing was found then clear the current feed
if (!found)
@@ -395,4 +418,4 @@ namespace FeedCenter
#endregion
}
}
}

View File

@@ -1,4 +1,5 @@
using FeedCenter.Options;
using CKaczor.InstalledBrowsers;
using FeedCenter.Options;
using FeedCenter.Properties;
using System.IO;
using System.Linq;
@@ -26,9 +27,6 @@ namespace FeedCenter
// Create a new list of feed items
var feedItems = (from FeedItem feedItem in LinkTextList.Items select feedItem).ToList();
// Get the browser
var browser = BrowserCommon.FindBrowser(Settings.Default.Browser);
// Cache the settings object
var settings = Settings.Default;
@@ -39,7 +37,7 @@ namespace FeedCenter
foreach (var feedItem in feedItems)
{
// Try to open the link
if (BrowserCommon.OpenLink(browser, feedItem.Link))
if (InstalledBrowser.OpenLink(Settings.Default.Browser, feedItem.Link))
{
// Mark the feed as read
_database.SaveChanges(() => feedItem.BeenRead = true);
@@ -236,9 +234,9 @@ namespace FeedCenter
textWriter.Flush();
textWriter.Close();
BrowserCommon.OpenLink(fileName);
InstalledBrowser.OpenLink(Settings.Default.Browser, fileName);
MarkAllItemsAsRead();
}
}
}
}

View File

@@ -1,4 +1,4 @@
using Common.Update;
using CKaczor.ApplicationUpdate;
using FeedCenter.Properties;
using System.Windows;
@@ -8,12 +8,13 @@ namespace FeedCenter
{
private static void InitializeUpdate()
{
UpdateCheck.ApplicationName = Properties.Resources.ApplicationDisplayName;
UpdateCheck.UpdateServerType = ServerType.GitHub;
UpdateCheck.UpdateServer = Settings.Default.VersionLocation;
UpdateCheck.ApplicationShutdown = ApplicationShutdown;
UpdateCheck.ApplicationCurrentMessage = ApplicationCurrentMessage;
UpdateCheck.ApplicationUpdateMessage = ApplicationUpdateMessage;
UpdateCheck.Initialize(ServerType.GitHub,
Settings.Default.VersionLocation,
string.Empty,
Properties.Resources.ApplicationDisplayName,
ApplicationShutdown,
ApplicationCurrentMessage,
ApplicationUpdateMessage);
}
private static bool ApplicationUpdateMessage(string title, string message)
@@ -33,8 +34,7 @@ namespace FeedCenter
private void HandleNewVersionLinkClick(object sender, RoutedEventArgs e)
{
// Display update information
UpdateCheck.DisplayUpdateInformation(true);
}
}
}
}

View File

@@ -1,11 +1,11 @@
using FeedCenter.Properties;
using DebounceThrottle;
using FeedCenter.Properties;
using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Interop;
using System.Windows.Media;
using Common.Helpers;
namespace FeedCenter
{
@@ -90,25 +90,22 @@ namespace FeedCenter
SaveWindowSettings();
// Save settings
_database.SaveChanges(() => Settings.Default.Save());
_database.SaveChanges(Settings.Default.Save);
// Get rid of the notification icon
NotificationIcon.Dispose();
}
private DelayedMethod _windowStateDelay;
private readonly DebounceDispatcher _updateWindowSettingsDispatcher = new(500);
private void HandleWindowSizeChanged(object sender, SizeChangedEventArgs e)
{
_windowStateDelay ??= new DelayedMethod(500, UpdateWindowSettings);
_windowStateDelay.Reset();
_updateWindowSettingsDispatcher.Debounce(() => Dispatcher.Invoke(UpdateWindowSettings));
}
private void HandleWindowLocationChanged(object sender, EventArgs e)
{
_windowStateDelay ??= new DelayedMethod(500, UpdateWindowSettings);
_windowStateDelay.Reset();
_updateWindowSettingsDispatcher.Debounce(() => Dispatcher.Invoke(UpdateWindowSettings));
}
private void UpdateBorder()
@@ -152,6 +149,7 @@ namespace FeedCenter
}
private bool _activated;
protected override void OnActivated(EventArgs e)
{
base.OnActivated(e);
@@ -172,4 +170,4 @@ namespace FeedCenter
Settings.Default.PropertyChanged += HandlePropertyChanged;
}
}
}
}

View File

@@ -20,10 +20,7 @@ namespace FeedCenter
// Setup the menu
var contextMenuStrip = new ContextMenuStrip();
var toolStripMenuItem = new ToolStripMenuItem(Resources.NotificationIconContextMenuLocked, null, HandleLockWindowClicked)
{
Checked = Settings.Default.WindowLocked
};
var toolStripMenuItem = new ToolStripMenuItem(Resources.NotificationIconContextMenuLocked, null, HandleLockWindowClicked) { Checked = Settings.Default.WindowLocked };
contextMenuStrip.Items.Add(toolStripMenuItem);
contextMenuStrip.Items.Add(new ToolStripSeparator());

View File

@@ -1,4 +1,4 @@
using Common.Update;
using CKaczor.ApplicationUpdate;
using System.Reflection;
namespace FeedCenter.Options
@@ -33,4 +33,4 @@ namespace FeedCenter.Options
public override string CategoryName => Properties.Resources.optionCategoryAbout;
}
}
}

View File

@@ -5,8 +5,8 @@
Height="300"
Width="500"
xmlns:my="clr-namespace:FeedCenter.Properties"
xmlns:linkControl="clr-namespace:Common.Wpf.LinkControl;assembly=Common.Wpf"
xmlns:feedCenter="clr-namespace:FeedCenter"
xmlns:controls="clr-namespace:CKaczor.Wpf.Controls;assembly=Wpf.Controls.Link"
WindowStartupLocation="CenterOwner"
Icon="/FeedCenter;component/Resources/Application.ico"
FocusManager.FocusedElement="{Binding ElementName=FeedLinkFilterText}">
@@ -61,18 +61,18 @@
<TextBlock Margin="2"
Text="{x:Static my:Resources.SelectLabel}">
</TextBlock>
<linkControl:LinkControl Margin="2"
Click="HandleSelectAll"
Text="{x:Static my:Resources.SelectAllLabel}">
</linkControl:LinkControl>
<linkControl:LinkControl Margin="2"
Click="HandleSelectNone"
Text="{x:Static my:Resources.SelectNoneLabel}">
</linkControl:LinkControl>
<linkControl:LinkControl Margin="2"
Click="HandleSelectInvert"
Text="{x:Static my:Resources.SelectInvertLabel}">
</linkControl:LinkControl>
<controls:Link Margin="2"
Click="HandleSelectAll"
Text="{x:Static my:Resources.SelectAllLabel}">
</controls:Link>
<controls:Link Margin="2"
Click="HandleSelectNone"
Text="{x:Static my:Resources.SelectNoneLabel}">
</controls:Link>
<controls:Link Margin="2"
Click="HandleSelectInvert"
Text="{x:Static my:Resources.SelectInvertLabel}">
</controls:Link>
</StackPanel>
</Border>
</Grid>
@@ -124,4 +124,4 @@
Width="75"
Grid.Row="3" />
</Grid>
</Window>
</Window>

View File

@@ -1,5 +1,4 @@
using Common.Wpf;
using System.Collections.Generic;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Windows;
@@ -36,7 +35,7 @@ namespace FeedCenter.Options
ShowDialog();
}
void HandleCollectionViewSourceFilter(object sender, FilterEventArgs e)
private void HandleCollectionViewSourceFilter(object sender, FilterEventArgs e)
{
var checkedListBoxItem = (CheckedListItem<Feed>) e.Item;

View File

@@ -2,44 +2,71 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:properties="clr-namespace:FeedCenter.Properties"
xmlns:feedCenter="clr-namespace:FeedCenter"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:validation="clr-namespace:CKaczor.Wpf.Validation;assembly=Wpf.Validation"
xmlns:controls="clr-namespace:CKaczor.Wpf.Windows;assembly=Wpf.Windows.ControlBox"
d:DataContext="{d:DesignInstance Type=feedCenter:Category}"
Title="CategoryWindow"
Height="119"
Width="339"
Width="300"
ResizeMode="NoResize"
SizeToContent="Height"
WindowStartupLocation="CenterOwner"
Icon="/FeedCenter;component/Resources/Application.ico"
FocusManager.FocusedElement="{Binding ElementName=NameTextBox}">
<Grid>
FocusManager.FocusedElement="{Binding ElementName=NameTextBox}"
controls:ControlBox.HasMinimizeButton="False"
controls:ControlBox.HasMaximizeButton="False">
<Grid Margin="8">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="367*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Content="{x:Static properties:Resources.feedCategoryLabel}"
HorizontalAlignment="Left"
Grid.Column="0"
Grid.Row="0"
Target="{Binding ElementName=NameTextBox}"
VerticalAlignment="Top"
VerticalContentAlignment="Center"
Margin="12,12,0,0" />
<TextBox Margin="7,14,12,0"
Name="NameTextBox"
Text="{Binding Path=Name, UpdateSourceTrigger=Explicit, ValidatesOnExceptions=True}"
VerticalAlignment="Top"
Grid.Column="1" />
<Button Content="{x:Static properties:Resources.OkayButton}"
Height="23"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Width="75"
IsDefault="True"
Margin="0,0,93,12"
Click="HandleOkayButtonClick"
Grid.Column="1" />
<Button Content="{x:Static properties:Resources.CancelButton}"
Height="23"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Width="75"
IsCancel="True"
Margin="0,0,12,12"
Grid.Column="1" />
VerticalAlignment="Center"
VerticalContentAlignment="Center" />
<TextBox Name="NameTextBox"
VerticalAlignment="Center"
Grid.Row="0"
Grid.Column="1">
<TextBox.Text>
<Binding Path="Name" UpdateSourceTrigger="Explicit" ValidatesOnExceptions="True">
<Binding.ValidationRules>
<validation:RequiredValidationRule></validation:RequiredValidationRule>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<StackPanel
Grid.Column="1"
Grid.Row="2"
Orientation="Horizontal"
Margin="0,4,0,0"
HorizontalAlignment="Right">
<Button Content="{x:Static properties:Resources.OkayButton}"
Height="23"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Width="75"
Margin="0,0,5,0"
IsDefault="True"
Click="HandleOkayButtonClick" />
<Button Content="{x:Static properties:Resources.CancelButton}"
Height="23"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Width="75"
IsCancel="True" />
</StackPanel>
</Grid>
</Window>
</Window>

View File

@@ -1,8 +1,5 @@
using Common.Wpf.Extensions;
using System.Linq;
using CKaczor.Wpf.Validation;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace FeedCenter.Options
{
@@ -19,7 +16,9 @@ namespace FeedCenter.Options
DataContext = category;
// Set the title based on the state of the category
Title = string.IsNullOrWhiteSpace(category.Name) ? Properties.Resources.CategoryWindowAdd : Properties.Resources.CategoryWindowEdit;
Title = string.IsNullOrWhiteSpace(category.Name)
? Properties.Resources.CategoryWindowAdd
: Properties.Resources.CategoryWindowEdit;
// Set the window owner
Owner = owner;
@@ -30,29 +29,8 @@ namespace FeedCenter.Options
private void HandleOkayButtonClick(object sender, RoutedEventArgs e)
{
// Get a list of all explicit binding expressions
var bindingExpressions = this.GetBindingExpressions(new[] { UpdateSourceTrigger.Explicit });
// Loop over each binding expression and clear any existing error
bindingExpressions.ForEach(b => Validation.ClearInvalid(b.BindingExpression));
// Force all explicit bindings to update the source
bindingExpressions.ForEach(bindingExpression => bindingExpression.BindingExpression.UpdateSource());
// See if there are any errors
var hasError = bindingExpressions.Exists(bindingExpression => bindingExpression.BindingExpression.HasError);
// If there was an error then set focus to the bad controls
if (hasError)
{
// Get the first framework element with an error
var firstErrorElement = bindingExpressions.First(b => b.BindingExpression.HasError).FrameworkElement;
// Set focus
firstErrorElement.Focus();
if (!this.Validate())
return;
}
// Dialog is good
DialogResult = true;
@@ -61,4 +39,4 @@ namespace FeedCenter.Options
Close();
}
}
}
}

View File

@@ -0,0 +1,41 @@
using System.ComponentModel;
namespace FeedCenter.Options;
public class CheckedListItem<T> : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private bool _isChecked;
private readonly T _item;
public CheckedListItem() { }
public CheckedListItem(T item, bool isChecked = false)
{
_item = item;
_isChecked = isChecked;
}
public T Item
{
get => _item;
init
{
_item = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Item"));
}
}
public bool IsChecked
{
get => _isChecked;
set
{
_isChecked = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("IsChecked"));
}
}
}

View File

@@ -6,7 +6,7 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
d:DataContext="{d:DesignInstance Type=feedCenter:Feed}"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:validation="clr-namespace:Common.Wpf.Validation;assembly=Common.Wpf"
xmlns:validation="clr-namespace:CKaczor.Wpf.Validation;assembly=Wpf.Validation"
mc:Ignorable="d"
Title="FeedWindow"
Height="300"

View File

@@ -1,4 +1,4 @@
using Common.Wpf.Extensions;
using CKaczor.Wpf.Validation;
using System.Linq;
using System.Windows;
using System.Windows.Controls;

View File

@@ -4,8 +4,8 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:options="clr-namespace:FeedCenter.Options"
xmlns:linkControl="clr-namespace:Common.Wpf.LinkControl;assembly=Common.Wpf"
xmlns:properties="clr-namespace:FeedCenter.Properties"
xmlns:controls="clr-namespace:CKaczor.Wpf.Controls;assembly=Wpf.Controls.Link"
mc:Ignorable="d"
d:DesignHeight="311"
d:DesignWidth="425">
@@ -95,39 +95,39 @@
BorderBrush="{DynamicResource {x:Static SystemColors.ActiveBorderBrushKey}}">
<StackPanel Orientation="Horizontal"
Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
<linkControl:LinkControl Name="AddFeedButton"
Margin="2"
Click="HandleAddFeedButtonClick"
Text="{x:Static properties:Resources.AddLink}"
ToolTip="{x:Static properties:Resources.AddFeedButton}">
</linkControl:LinkControl>
<linkControl:LinkControl Name="EditFeedButton"
Margin="2"
Click="HandleEditFeedButtonClick"
Text="{x:Static properties:Resources.EditLink}"
ToolTip="{x:Static properties:Resources.EditFeedButton}">
</linkControl:LinkControl>
<linkControl:LinkControl Name="DeleteFeedButton"
Margin="2"
Click="HandleDeleteFeedButtonClick"
Text="{x:Static properties:Resources.DeleteLink}"
ToolTip="{x:Static properties:Resources.DeleteFeedButton}">
</linkControl:LinkControl>
<linkControl:LinkControl Margin="6,2,2,2"
Click="HandleImportButtonClick"
Text="{x:Static properties:Resources.ImportLink}"
ToolTip="{x:Static properties:Resources.ImportFeedsButton}">
</linkControl:LinkControl>
<linkControl:LinkControl Margin="2"
Click="HandleExportButtonClick"
Text="{x:Static properties:Resources.ExportLink}"
ToolTip="{x:Static properties:Resources.ExportFeedsButton}">
</linkControl:LinkControl>
<linkControl:LinkControl Margin="6,2,2,2"
Click="HandleMultipleEditClick"
Text="{x:Static properties:Resources.MultipleEditLink}"
ToolTip="{x:Static properties:Resources.MultipleEditButton}">
</linkControl:LinkControl>
<controls:Link Name="AddFeedButton"
Margin="2"
Click="HandleAddFeedButtonClick"
Text="{x:Static properties:Resources.AddLink}"
ToolTip="{x:Static properties:Resources.AddFeedButton}">
</controls:Link>
<controls:Link Name="EditFeedButton"
Margin="2"
Click="HandleEditFeedButtonClick"
Text="{x:Static properties:Resources.EditLink}"
ToolTip="{x:Static properties:Resources.EditFeedButton}">
</controls:Link>
<controls:Link Name="DeleteFeedButton"
Margin="2"
Click="HandleDeleteFeedButtonClick"
Text="{x:Static properties:Resources.DeleteLink}"
ToolTip="{x:Static properties:Resources.DeleteFeedButton}">
</controls:Link>
<controls:Link Margin="6,2,2,2"
Click="HandleImportButtonClick"
Text="{x:Static properties:Resources.ImportLink}"
ToolTip="{x:Static properties:Resources.ImportFeedsButton}">
</controls:Link>
<controls:Link Margin="2"
Click="HandleExportButtonClick"
Text="{x:Static properties:Resources.ExportLink}"
ToolTip="{x:Static properties:Resources.ExportFeedsButton}">
</controls:Link>
<controls:Link Margin="6,2,2,2"
Click="HandleMultipleEditClick"
Text="{x:Static properties:Resources.MultipleEditLink}"
ToolTip="{x:Static properties:Resources.MultipleEditButton}">
</controls:Link>
</StackPanel>
</Border>
<Border Grid.Row="1"
@@ -136,24 +136,24 @@
BorderBrush="{DynamicResource {x:Static SystemColors.ActiveBorderBrushKey}}">
<StackPanel Orientation="Horizontal"
Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
<linkControl:LinkControl Name="AddCategoryButton"
Margin="2"
Click="HandleAddCategoryButtonClick"
Text="{x:Static properties:Resources.AddLink}"
ToolTip="{x:Static properties:Resources.AddCategoryButton}">
</linkControl:LinkControl>
<linkControl:LinkControl Name="EditCategoryButton"
Margin="2"
Click="HandleEditCategoryButtonClick"
Text="{x:Static properties:Resources.EditLink}"
ToolTip="{x:Static properties:Resources.EditCategoryButton}">
</linkControl:LinkControl>
<linkControl:LinkControl Name="DeleteCategoryButton"
Margin="2"
Click="HandleDeleteCategoryButtonClick"
Text="{x:Static properties:Resources.DeleteLink}"
ToolTip="{x:Static properties:Resources.DeleteCategoryButton}">
</linkControl:LinkControl>
<controls:Link Name="AddCategoryButton"
Margin="2"
Click="HandleAddCategoryButtonClick"
Text="{x:Static properties:Resources.AddLink}"
ToolTip="{x:Static properties:Resources.AddCategoryButton}">
</controls:Link>
<controls:Link Name="EditCategoryButton"
Margin="2"
Click="HandleEditCategoryButtonClick"
Text="{x:Static properties:Resources.EditLink}"
ToolTip="{x:Static properties:Resources.EditCategoryButton}">
</controls:Link>
<controls:Link Name="DeleteCategoryButton"
Margin="2"
Click="HandleDeleteCategoryButtonClick"
Text="{x:Static properties:Resources.DeleteLink}"
ToolTip="{x:Static properties:Resources.DeleteCategoryButton}">
</controls:Link>
</StackPanel>
</Border>
</Grid>

View File

@@ -38,8 +38,6 @@
Grid.Row="2"
Grid.Column="1"
VerticalContentAlignment="Center">
<ComboBoxItem Content="{x:Static properties:Resources.DefaultBrowserCaption}"
Tag="" />
</ComboBox>
<Label Content="{x:Static properties:Resources.defaultUserAgentLabel}"
Target="{Binding ElementName=BrowserComboBox}"

View File

@@ -1,7 +1,7 @@
using System.Collections.Generic;
using System.Windows;
using Common.Wpf.Extensions;
using Common.Internet;
using CKaczor.InstalledBrowsers;
using CKaczor.Wpf.Application;
using CKaczor.Wpf.Validation;
using System.Collections.Generic;
using System.Windows.Controls;
using System.Windows.Data;
@@ -46,7 +46,7 @@ namespace FeedCenter.Options
settings.StartWithWindows != StartWithWindowsCheckBox.IsChecked.Value)
settings.StartWithWindows = StartWithWindowsCheckBox.IsChecked.Value;
Application.Current.SetStartWithWindows(settings.StartWithWindows);
System.Windows.Application.Current.SetStartWithWindows(settings.StartWithWindows);
settings.Browser = (string) ((ComboBoxItem) BrowserComboBox.SelectedItem).Tag;
@@ -54,6 +54,8 @@ namespace FeedCenter.Options
var expressions = this.GetBindingExpressions(new[] { UpdateSourceTrigger.Explicit });
this.UpdateAllSources(expressions);
this.Validate();
}
public override string CategoryName => Properties.Resources.optionCategoryGeneral;
@@ -64,7 +66,7 @@ namespace FeedCenter.Options
ComboBoxItem selectedItem = null;
var browsers = Browser.DetectInstalledBrowsers();
var browsers = InstalledBrowser.GetInstalledBrowsers(true);
foreach (var browser in browsers)
{
var item = new ComboBoxItem { Content = browser.Value.Name, Tag = browser.Key };
@@ -129,4 +131,4 @@ namespace FeedCenter.Options
return userAgents;
}
}
}
}

View File

@@ -1,4 +1,4 @@
using Common.Update;
using CKaczor.ApplicationUpdate;
namespace FeedCenter.Options
{
@@ -34,4 +34,4 @@ namespace FeedCenter.Options
UpdateCheck.DisplayUpdateInformation(true);
}
}
}
}

View File

@@ -12,7 +12,7 @@ namespace FeedCenter.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
@@ -24,7 +24,7 @@ namespace FeedCenter.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Common.Settings.GenericSettingsProvider))]
[global::System.Configuration.SettingsProviderAttribute(typeof(CKaczor.GenericSettingsProvider.GenericSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool WindowLocked {
@@ -37,7 +37,7 @@ namespace FeedCenter.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Common.Settings.GenericSettingsProvider))]
[global::System.Configuration.SettingsProviderAttribute(typeof(CKaczor.GenericSettingsProvider.GenericSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("0,0")]
public global::System.Windows.Size WindowSize {
@@ -50,7 +50,7 @@ namespace FeedCenter.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Common.Settings.GenericSettingsProvider))]
[global::System.Configuration.SettingsProviderAttribute(typeof(CKaczor.GenericSettingsProvider.GenericSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("0,0")]
public global::System.Windows.Point WindowLocation {
@@ -111,7 +111,7 @@ namespace FeedCenter.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Common.Settings.GenericSettingsProvider))]
[global::System.Configuration.SettingsProviderAttribute(typeof(CKaczor.GenericSettingsProvider.GenericSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("00:01:00")]
public global::System.TimeSpan FeedScrollInterval {
@@ -124,7 +124,7 @@ namespace FeedCenter.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Common.Settings.GenericSettingsProvider))]
[global::System.Configuration.SettingsProviderAttribute(typeof(CKaczor.GenericSettingsProvider.GenericSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("00:30:00")]
public global::System.TimeSpan FeedCheckInterval {
@@ -137,7 +137,7 @@ namespace FeedCenter.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Common.Settings.GenericSettingsProvider))]
[global::System.Configuration.SettingsProviderAttribute(typeof(CKaczor.GenericSettingsProvider.GenericSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool DisplayEmptyFeeds {
@@ -150,7 +150,7 @@ namespace FeedCenter.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Common.Settings.GenericSettingsProvider))]
[global::System.Configuration.SettingsProviderAttribute(typeof(CKaczor.GenericSettingsProvider.GenericSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public global::System.DateTime LastVersionCheck {
get {
@@ -171,7 +171,7 @@ namespace FeedCenter.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Common.Settings.GenericSettingsProvider))]
[global::System.Configuration.SettingsProviderAttribute(typeof(CKaczor.GenericSettingsProvider.GenericSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool StartWithWindows {
@@ -196,7 +196,7 @@ namespace FeedCenter.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Common.Settings.GenericSettingsProvider))]
[global::System.Configuration.SettingsProviderAttribute(typeof(CKaczor.GenericSettingsProvider.GenericSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Bottom")]
public global::System.Windows.Controls.Dock ToolbarLocation {
@@ -209,7 +209,7 @@ namespace FeedCenter.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Common.Settings.GenericSettingsProvider))]
[global::System.Configuration.SettingsProviderAttribute(typeof(CKaczor.GenericSettingsProvider.GenericSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("500")]
public int OpenAllSleepInterval {
@@ -222,7 +222,7 @@ namespace FeedCenter.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Common.Settings.GenericSettingsProvider))]
[global::System.Configuration.SettingsProviderAttribute(typeof(CKaczor.GenericSettingsProvider.GenericSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string Browser {
@@ -235,7 +235,7 @@ namespace FeedCenter.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Common.Settings.GenericSettingsProvider))]
[global::System.Configuration.SettingsProviderAttribute(typeof(CKaczor.GenericSettingsProvider.GenericSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("1500")]
public int OpenAllSleepIntervalFirst {
@@ -248,7 +248,7 @@ namespace FeedCenter.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Common.Settings.GenericSettingsProvider))]
[global::System.Configuration.SettingsProviderAttribute(typeof(CKaczor.GenericSettingsProvider.GenericSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Normal")]
public global::FeedCenter.Options.MultipleLineDisplay MultipleLineDisplay {
@@ -282,7 +282,7 @@ namespace FeedCenter.Properties {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(Common.Settings.GenericSettingsProvider))]
[global::System.Configuration.SettingsProviderAttribute(typeof(CKaczor.GenericSettingsProvider.GenericSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string DefaultUserAgent {

View File

@@ -1,4 +1,4 @@
using Common.Update;
using CKaczor.ApplicationUpdate;
using FeedCenter.Data;
using FeedCenter.Properties;
using System;
@@ -33,7 +33,7 @@ namespace FeedCenter
#region Member variables
private readonly List<ProgressStep> _progressSteps = new List<ProgressStep>();
private readonly List<ProgressStep> _progressSteps = new();
private readonly Dispatcher _dispatcher;
private readonly BackgroundWorker _backgroundWorker;
@@ -205,7 +205,7 @@ namespace FeedCenter
private static bool UpdateDatabase()
{
// Update the database
// Database.UpdateDatabase();
// Database.UpdateDatabase();
return true;
}
@@ -225,4 +225,4 @@ namespace FeedCenter
_backgroundWorker?.Dispose();
}
}
}
}

View File

@@ -0,0 +1,59 @@
using System.Collections.Generic;
using System.IO;
using System.Xml;
using System.Xml.XPath;
namespace FeedCenter.Xml;
public static class XmlExtensions
{
public static XmlNamespaceManager GetAllNamespaces(this XmlDocument document)
{
// Create the namespace manager from the name table
var namespaceManager = new XmlNamespaceManager(document.NameTable);
// Create a dictionary of all namespaces
var allNamespaces = new Dictionary<string, string>();
// Create an XPathDocument from the XML of the XmlDocument
var xPathDocument = new XPathDocument(new StringReader(document.InnerXml));
// Create an XPathNavigator for the document
var xPathNavigator = xPathDocument.CreateNavigator();
if (xPathNavigator == null) return namespaceManager;
// Loop over all elements
while (xPathNavigator.MoveToFollowing(XPathNodeType.Element))
{
// Get the list of local namespaces
var localNamespaces = xPathNavigator.GetNamespacesInScope(XmlNamespaceScope.Local);
if (localNamespaces == null) continue;
// Add all local namespaces to the master list
foreach (var ns in localNamespaces)
allNamespaces[ns.Key] = ns.Value;
}
// Loop over all namespaces
foreach (var ns in allNamespaces)
{
// Use the key as the name
var namespaceName = ns.Key;
// If the name is blank then use "default" instead
if (string.IsNullOrEmpty(namespaceName))
namespaceName = "default";
// Add the namespace to the manager
namespaceManager.AddNamespace(namespaceName, ns.Value);
}
// Add the default namespace if missing
if (!namespaceManager.HasNamespace("default"))
namespaceManager.AddNamespace("default", "");
return namespaceManager;
}
}

View File

@@ -0,0 +1,231 @@
using System;
using System.IO;
using System.Text;
namespace FeedCenter.Xml;
/// <summary>
/// A StreamReader that excludes XML-illegal characters while reading.
/// </summary>
public class XmlSanitizingStream : StreamReader
{
/// <summary>
/// The character that denotes the end of a file has been reached.
/// </summary>
private const int Eof = -1;
/// <summary>Create an instance of XmlSanitizingStream.</summary>
/// <param name="streamToSanitize">
/// The stream to sanitize of illegal XML characters.
/// </param>
public XmlSanitizingStream(Stream streamToSanitize)
: base(streamToSanitize, true)
{
}
public XmlSanitizingStream(Stream streamToSanitize, Encoding encoding)
: base(streamToSanitize, encoding)
{
}
/// <summary>
/// Get whether an integer represents a legal XML 1.0 or 1.1 character. See
/// the specification at w3.org for these characters.
/// </summary>
/// <param name="xmlVersion">
/// The version number as a string. Use "1.0" for XML 1.0 character
/// validation, and use "1.1" for XML 1.1 character validation.
/// </param>
/// <param name="character"> </param>
public static bool IsLegalXmlChar(string xmlVersion, int character)
{
switch (xmlVersion)
{
case "1.1": // http://www.w3.org/TR/xml11/#charsets
{
return
!(
character <= 0x8 ||
character == 0xB ||
character == 0xC ||
(character >= 0xE && character <= 0x1F) ||
(character >= 0x7F && character <= 0x84) ||
(character >= 0x86 && character <= 0x9F) ||
character > 0x10FFFF
);
}
case "1.0": // http://www.w3.org/TR/REC-xml/#charsets
{
return
(
character == 0x9 /* == '\t' == 9 */ ||
character == 0xA /* == '\n' == 10 */ ||
character == 0xD /* == '\r' == 13 */ ||
(character >= 0x20 && character <= 0xD7FF) ||
(character >= 0xE000 && character <= 0xFFFD) ||
(character >= 0x10000 && character <= 0x10FFFF)
);
}
default:
{
throw new ArgumentOutOfRangeException
("xmlVersion", string.Format("'{0}' is not a valid XML version.", xmlVersion));
}
}
}
/// <summary>
/// Get whether an integer represents a legal XML 1.0 character. See the
/// specification at w3.org for these characters.
/// </summary>
public static bool IsLegalXmlChar(int character)
{
return IsLegalXmlChar("1.0", character);
}
public override int Read()
{
// Read each character, skipping over characters that XML has prohibited
int nextCharacter;
do
{
// Read a character
if ((nextCharacter = base.Read()) == Eof)
{
// If the character denotes the end of the file, stop reading
break;
}
}
// Skip the character if it's prohibited, and try the next
while (!IsLegalXmlChar(nextCharacter));
return nextCharacter;
}
public override int Peek()
{
// Return the next legal XML character without reading it
int nextCharacter;
do
{
// See what the next character is
nextCharacter = base.Peek();
} while
(
// If it's prohibited XML, skip over the character in the stream
// and try the next.
!IsLegalXmlChar(nextCharacter) &&
(nextCharacter = base.Read()) != Eof
);
return nextCharacter;
} // method
#region Read*() method overrides
// The following methods are exact copies of the methods in TextReader,
// extracting by disassembling it in Refelctor
public override int Read(char[] buffer, int index, int count)
{
if (buffer == null)
{
throw new ArgumentNullException("buffer");
}
if (index < 0)
{
throw new ArgumentOutOfRangeException("index");
}
if (count < 0)
{
throw new ArgumentOutOfRangeException("count");
}
if ((buffer.Length - index) < count)
{
throw new ArgumentException();
}
var num = 0;
do
{
var num2 = Read();
if (num2 == -1)
{
return num;
}
buffer[index + num++] = (char) num2;
} while (num < count);
return num;
}
public override int ReadBlock(char[] buffer, int index, int count)
{
int num;
var num2 = 0;
do
{
num2 += num = Read(buffer, index + num2, count - num2);
} while ((num > 0) && (num2 < count));
return num2;
}
public override string ReadLine()
{
var builder = new StringBuilder();
while (true)
{
var num = Read();
switch (num)
{
case -1:
if (builder.Length > 0)
{
return builder.ToString();
}
return null;
case 13:
case 10:
if ((num == 13) && (Peek() == 10))
{
Read();
}
return builder.ToString();
}
builder.Append((char) num);
}
}
public override string ReadToEnd()
{
int num;
var buffer = new char[0x1000];
var builder = new StringBuilder(0x1000);
while ((num = Read(buffer, 0, buffer.Length)) != 0)
{
builder.Append(buffer, 0, num);
}
return builder.ToString();
}
#endregion
} // class

1
Common

Submodule Common deleted from 686f33982d

Submodule Common.Wpf deleted from 8a82786166

View File

@@ -16,14 +16,30 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution", "Solution", "{14
README.md = README.md
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common.Native", "Common.Wpf\Common.Native\Common.Native.csproj", "{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common.Wpf", "Common.Wpf\Common.Wpf.csproj", "{0074C983-550E-4094-9E8C-F566FB669297}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common", "Common\Common.csproj", "{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NameBasedGrid", "..\..\Public\namebasedgrid\src\NameBasedGrid\NameBasedGrid.csproj", "{01D2D040-A2AF-42A1-9821-D1C6D77A3309}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Controls.Link", "..\Wpf.Controls.Link\Wpf.Controls.Link.csproj", "{D8A22337-E65C-4214-B2AC-EFD34350C0C5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Windows.SnappingWindow", "..\Wpf.Windows.SnappingWindow\Wpf.Windows.SnappingWindow.csproj", "{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Windows.ControlBox", "..\Wpf.Windows.ControlBox\Wpf.Windows.ControlBox.csproj", "{4203D266-E323-4E49-B5FD-B60C19D17EEF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Controls.Toolbar", "..\Wpf.Controls.Toolbar\Wpf.Controls.Toolbar.csproj", "{94D49D33-320E-4C9A-A93F-36813D6FB65F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Controls.HtmlTextBlock", "..\Wpf.Controls.HtmlTextBlock\Wpf.Controls.HtmlTextBlock.csproj", "{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Validation", "..\Wpf.Validation\Wpf.Validation.csproj", "{7AA16534-92EC-4ABF-BFF0-1EC373C91035}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Application.StartWithWindows", "..\Wpf.Application.StartWithWindows\Wpf.Application.StartWithWindows.csproj", "{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Application.SingleInstance", "..\Wpf.Application.SingleInstance\Wpf.Application.SingleInstance.csproj", "{7BF3C67C-239E-44D5-BA71-555A624550E8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InstalledBrowsers", "..\InstalledBrowsers\InstalledBrowsers.csproj", "{C1A3C38D-C802-4E40-9079-4C857063A3CE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GenericSettingsProvider", "..\GenericSettingsProvider\GenericSettingsProvider.csproj", "{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApplicationUpdate", "..\ApplicationUpdate\ApplicationUpdate.csproj", "{9A49783E-FFFB-4629-A877-4A9D3B52323F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug - With Setup|Any CPU = Debug - With Setup|Any CPU
@@ -126,102 +142,6 @@ Global
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release|x64.ActiveCfg = Release|x86
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release|x86.ActiveCfg = Release|x86
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release|x86.Build.0 = Release|x86
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Debug - With Setup|Any CPU.ActiveCfg = Debug|Any CPU
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Debug - With Setup|Any CPU.Build.0 = Debug|Any CPU
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Debug - With Setup|Mixed Platforms.ActiveCfg = Debug|x86
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Debug - With Setup|Mixed Platforms.Build.0 = Debug|x86
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Debug - With Setup|x64.ActiveCfg = Debug|x64
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Debug - With Setup|x64.Build.0 = Debug|x64
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Debug - With Setup|x86.ActiveCfg = Debug|x86
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Debug - With Setup|x86.Build.0 = Debug|x86
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Debug|Mixed Platforms.Build.0 = Debug|x86
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Debug|x64.ActiveCfg = Debug|x64
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Debug|x64.Build.0 = Debug|x64
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Debug|x86.ActiveCfg = Debug|x86
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Debug|x86.Build.0 = Debug|x86
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Release - With Setup|Any CPU.ActiveCfg = Release|Any CPU
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Release - With Setup|Any CPU.Build.0 = Release|Any CPU
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Release - With Setup|Mixed Platforms.ActiveCfg = Release|x86
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Release - With Setup|Mixed Platforms.Build.0 = Release|x86
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Release - With Setup|x64.ActiveCfg = Release|x64
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Release - With Setup|x64.Build.0 = Release|x64
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Release - With Setup|x86.ActiveCfg = Release|x86
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Release - With Setup|x86.Build.0 = Release|x86
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Release|Any CPU.Build.0 = Release|Any CPU
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Release|Mixed Platforms.ActiveCfg = Release|x86
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Release|Mixed Platforms.Build.0 = Release|x86
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Release|x64.ActiveCfg = Release|x64
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Release|x64.Build.0 = Release|x64
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Release|x86.ActiveCfg = Release|x86
{ED1C07A1-54F5-4796-8B06-2A0BB1960D84}.Release|x86.Build.0 = Release|x86
{0074C983-550E-4094-9E8C-F566FB669297}.Debug - With Setup|Any CPU.ActiveCfg = Debug|Any CPU
{0074C983-550E-4094-9E8C-F566FB669297}.Debug - With Setup|Any CPU.Build.0 = Debug|Any CPU
{0074C983-550E-4094-9E8C-F566FB669297}.Debug - With Setup|Mixed Platforms.ActiveCfg = Debug|x86
{0074C983-550E-4094-9E8C-F566FB669297}.Debug - With Setup|Mixed Platforms.Build.0 = Debug|x86
{0074C983-550E-4094-9E8C-F566FB669297}.Debug - With Setup|x64.ActiveCfg = Debug|x64
{0074C983-550E-4094-9E8C-F566FB669297}.Debug - With Setup|x64.Build.0 = Debug|x64
{0074C983-550E-4094-9E8C-F566FB669297}.Debug - With Setup|x86.ActiveCfg = Debug|x86
{0074C983-550E-4094-9E8C-F566FB669297}.Debug - With Setup|x86.Build.0 = Debug|x86
{0074C983-550E-4094-9E8C-F566FB669297}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0074C983-550E-4094-9E8C-F566FB669297}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0074C983-550E-4094-9E8C-F566FB669297}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{0074C983-550E-4094-9E8C-F566FB669297}.Debug|Mixed Platforms.Build.0 = Debug|x86
{0074C983-550E-4094-9E8C-F566FB669297}.Debug|x64.ActiveCfg = Debug|x64
{0074C983-550E-4094-9E8C-F566FB669297}.Debug|x64.Build.0 = Debug|x64
{0074C983-550E-4094-9E8C-F566FB669297}.Debug|x86.ActiveCfg = Debug|x86
{0074C983-550E-4094-9E8C-F566FB669297}.Debug|x86.Build.0 = Debug|x86
{0074C983-550E-4094-9E8C-F566FB669297}.Release - With Setup|Any CPU.ActiveCfg = Release|Any CPU
{0074C983-550E-4094-9E8C-F566FB669297}.Release - With Setup|Any CPU.Build.0 = Release|Any CPU
{0074C983-550E-4094-9E8C-F566FB669297}.Release - With Setup|Mixed Platforms.ActiveCfg = Release|x86
{0074C983-550E-4094-9E8C-F566FB669297}.Release - With Setup|Mixed Platforms.Build.0 = Release|x86
{0074C983-550E-4094-9E8C-F566FB669297}.Release - With Setup|x64.ActiveCfg = Release|x64
{0074C983-550E-4094-9E8C-F566FB669297}.Release - With Setup|x64.Build.0 = Release|x64
{0074C983-550E-4094-9E8C-F566FB669297}.Release - With Setup|x86.ActiveCfg = Release|x86
{0074C983-550E-4094-9E8C-F566FB669297}.Release - With Setup|x86.Build.0 = Release|x86
{0074C983-550E-4094-9E8C-F566FB669297}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0074C983-550E-4094-9E8C-F566FB669297}.Release|Any CPU.Build.0 = Release|Any CPU
{0074C983-550E-4094-9E8C-F566FB669297}.Release|Mixed Platforms.ActiveCfg = Release|x86
{0074C983-550E-4094-9E8C-F566FB669297}.Release|Mixed Platforms.Build.0 = Release|x86
{0074C983-550E-4094-9E8C-F566FB669297}.Release|x64.ActiveCfg = Release|x64
{0074C983-550E-4094-9E8C-F566FB669297}.Release|x64.Build.0 = Release|x64
{0074C983-550E-4094-9E8C-F566FB669297}.Release|x86.ActiveCfg = Release|x86
{0074C983-550E-4094-9E8C-F566FB669297}.Release|x86.Build.0 = Release|x86
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Debug - With Setup|Any CPU.ActiveCfg = Debug|Any CPU
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Debug - With Setup|Any CPU.Build.0 = Debug|Any CPU
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Debug - With Setup|Mixed Platforms.ActiveCfg = Debug|x86
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Debug - With Setup|Mixed Platforms.Build.0 = Debug|x86
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Debug - With Setup|x64.ActiveCfg = Debug|x64
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Debug - With Setup|x64.Build.0 = Debug|x64
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Debug - With Setup|x86.ActiveCfg = Debug|x86
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Debug - With Setup|x86.Build.0 = Debug|x86
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Debug|Mixed Platforms.Build.0 = Debug|x86
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Debug|x64.ActiveCfg = Debug|x64
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Debug|x64.Build.0 = Debug|x64
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Debug|x86.ActiveCfg = Debug|x86
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Debug|x86.Build.0 = Debug|x86
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Release - With Setup|Any CPU.ActiveCfg = Release|Any CPU
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Release - With Setup|Any CPU.Build.0 = Release|Any CPU
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Release - With Setup|Mixed Platforms.ActiveCfg = Release|x86
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Release - With Setup|Mixed Platforms.Build.0 = Release|x86
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Release - With Setup|x64.ActiveCfg = Release|x64
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Release - With Setup|x64.Build.0 = Release|x64
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Release - With Setup|x86.ActiveCfg = Release|x86
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Release - With Setup|x86.Build.0 = Release|x86
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Release|Any CPU.Build.0 = Release|Any CPU
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Release|Mixed Platforms.ActiveCfg = Release|x86
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Release|Mixed Platforms.Build.0 = Release|x86
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Release|x64.ActiveCfg = Release|x64
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Release|x64.Build.0 = Release|x64
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Release|x86.ActiveCfg = Release|x86
{17864D82-457D-4A0A-BC10-1D07F2B3A5D6}.Release|x86.Build.0 = Release|x86
{01D2D040-A2AF-42A1-9821-D1C6D77A3309}.Debug - With Setup|Any CPU.ActiveCfg = Debug|Any CPU
{01D2D040-A2AF-42A1-9821-D1C6D77A3309}.Debug - With Setup|Any CPU.Build.0 = Debug|Any CPU
{01D2D040-A2AF-42A1-9821-D1C6D77A3309}.Debug - With Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU
@@ -254,6 +174,358 @@ Global
{01D2D040-A2AF-42A1-9821-D1C6D77A3309}.Release|x64.Build.0 = Release|Any CPU
{01D2D040-A2AF-42A1-9821-D1C6D77A3309}.Release|x86.ActiveCfg = Release|Any CPU
{01D2D040-A2AF-42A1-9821-D1C6D77A3309}.Release|x86.Build.0 = Release|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Debug - With Setup|Any CPU.ActiveCfg = Debug|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Debug - With Setup|Any CPU.Build.0 = Debug|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Debug - With Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Debug - With Setup|Mixed Platforms.Build.0 = Debug|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Debug - With Setup|x64.ActiveCfg = Debug|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Debug - With Setup|x64.Build.0 = Debug|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Debug - With Setup|x86.ActiveCfg = Debug|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Debug - With Setup|x86.Build.0 = Debug|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Debug|x64.ActiveCfg = Debug|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Debug|x64.Build.0 = Debug|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Debug|x86.ActiveCfg = Debug|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Debug|x86.Build.0 = Debug|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Release - With Setup|Any CPU.ActiveCfg = Release|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Release - With Setup|Any CPU.Build.0 = Release|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Release - With Setup|Mixed Platforms.ActiveCfg = Release|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Release - With Setup|Mixed Platforms.Build.0 = Release|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Release - With Setup|x64.ActiveCfg = Release|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Release - With Setup|x64.Build.0 = Release|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Release - With Setup|x86.ActiveCfg = Release|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Release - With Setup|x86.Build.0 = Release|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Release|Any CPU.Build.0 = Release|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Release|x64.ActiveCfg = Release|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Release|x64.Build.0 = Release|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Release|x86.ActiveCfg = Release|Any CPU
{D8A22337-E65C-4214-B2AC-EFD34350C0C5}.Release|x86.Build.0 = Release|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Debug - With Setup|Any CPU.ActiveCfg = Debug|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Debug - With Setup|Any CPU.Build.0 = Debug|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Debug - With Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Debug - With Setup|Mixed Platforms.Build.0 = Debug|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Debug - With Setup|x64.ActiveCfg = Debug|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Debug - With Setup|x64.Build.0 = Debug|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Debug - With Setup|x86.ActiveCfg = Debug|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Debug - With Setup|x86.Build.0 = Debug|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Debug|x64.ActiveCfg = Debug|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Debug|x64.Build.0 = Debug|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Debug|x86.ActiveCfg = Debug|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Debug|x86.Build.0 = Debug|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Release - With Setup|Any CPU.ActiveCfg = Release|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Release - With Setup|Any CPU.Build.0 = Release|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Release - With Setup|Mixed Platforms.ActiveCfg = Release|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Release - With Setup|Mixed Platforms.Build.0 = Release|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Release - With Setup|x64.ActiveCfg = Release|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Release - With Setup|x64.Build.0 = Release|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Release - With Setup|x86.ActiveCfg = Release|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Release - With Setup|x86.Build.0 = Release|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Release|Any CPU.Build.0 = Release|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Release|x64.ActiveCfg = Release|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Release|x64.Build.0 = Release|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Release|x86.ActiveCfg = Release|Any CPU
{3DF3BBDC-F378-48FC-B5D3-6136AD1D1E5D}.Release|x86.Build.0 = Release|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Debug - With Setup|Any CPU.ActiveCfg = Debug|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Debug - With Setup|Any CPU.Build.0 = Debug|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Debug - With Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Debug - With Setup|Mixed Platforms.Build.0 = Debug|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Debug - With Setup|x64.ActiveCfg = Debug|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Debug - With Setup|x64.Build.0 = Debug|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Debug - With Setup|x86.ActiveCfg = Debug|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Debug - With Setup|x86.Build.0 = Debug|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Debug|x64.ActiveCfg = Debug|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Debug|x64.Build.0 = Debug|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Debug|x86.ActiveCfg = Debug|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Debug|x86.Build.0 = Debug|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Release - With Setup|Any CPU.ActiveCfg = Release|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Release - With Setup|Any CPU.Build.0 = Release|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Release - With Setup|Mixed Platforms.ActiveCfg = Release|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Release - With Setup|Mixed Platforms.Build.0 = Release|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Release - With Setup|x64.ActiveCfg = Release|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Release - With Setup|x64.Build.0 = Release|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Release - With Setup|x86.ActiveCfg = Release|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Release - With Setup|x86.Build.0 = Release|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Release|Any CPU.Build.0 = Release|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Release|x64.ActiveCfg = Release|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Release|x64.Build.0 = Release|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Release|x86.ActiveCfg = Release|Any CPU
{4203D266-E323-4E49-B5FD-B60C19D17EEF}.Release|x86.Build.0 = Release|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Debug - With Setup|Any CPU.ActiveCfg = Debug|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Debug - With Setup|Any CPU.Build.0 = Debug|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Debug - With Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Debug - With Setup|Mixed Platforms.Build.0 = Debug|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Debug - With Setup|x64.ActiveCfg = Debug|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Debug - With Setup|x64.Build.0 = Debug|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Debug - With Setup|x86.ActiveCfg = Debug|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Debug - With Setup|x86.Build.0 = Debug|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Debug|x64.ActiveCfg = Debug|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Debug|x64.Build.0 = Debug|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Debug|x86.ActiveCfg = Debug|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Debug|x86.Build.0 = Debug|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Release - With Setup|Any CPU.ActiveCfg = Release|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Release - With Setup|Any CPU.Build.0 = Release|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Release - With Setup|Mixed Platforms.ActiveCfg = Release|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Release - With Setup|Mixed Platforms.Build.0 = Release|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Release - With Setup|x64.ActiveCfg = Release|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Release - With Setup|x64.Build.0 = Release|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Release - With Setup|x86.ActiveCfg = Release|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Release - With Setup|x86.Build.0 = Release|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Release|Any CPU.Build.0 = Release|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Release|x64.ActiveCfg = Release|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Release|x64.Build.0 = Release|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Release|x86.ActiveCfg = Release|Any CPU
{94D49D33-320E-4C9A-A93F-36813D6FB65F}.Release|x86.Build.0 = Release|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Debug - With Setup|Any CPU.ActiveCfg = Debug|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Debug - With Setup|Any CPU.Build.0 = Debug|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Debug - With Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Debug - With Setup|Mixed Platforms.Build.0 = Debug|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Debug - With Setup|x64.ActiveCfg = Debug|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Debug - With Setup|x64.Build.0 = Debug|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Debug - With Setup|x86.ActiveCfg = Debug|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Debug - With Setup|x86.Build.0 = Debug|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Debug|x64.ActiveCfg = Debug|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Debug|x64.Build.0 = Debug|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Debug|x86.ActiveCfg = Debug|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Debug|x86.Build.0 = Debug|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Release - With Setup|Any CPU.ActiveCfg = Release|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Release - With Setup|Any CPU.Build.0 = Release|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Release - With Setup|Mixed Platforms.ActiveCfg = Release|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Release - With Setup|Mixed Platforms.Build.0 = Release|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Release - With Setup|x64.ActiveCfg = Release|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Release - With Setup|x64.Build.0 = Release|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Release - With Setup|x86.ActiveCfg = Release|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Release - With Setup|x86.Build.0 = Release|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Release|Any CPU.Build.0 = Release|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Release|x64.ActiveCfg = Release|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Release|x64.Build.0 = Release|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Release|x86.ActiveCfg = Release|Any CPU
{ED2A50A7-33D6-4327-8775-F8F9EBF369EE}.Release|x86.Build.0 = Release|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Debug - With Setup|Any CPU.ActiveCfg = Debug|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Debug - With Setup|Any CPU.Build.0 = Debug|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Debug - With Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Debug - With Setup|Mixed Platforms.Build.0 = Debug|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Debug - With Setup|x64.ActiveCfg = Debug|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Debug - With Setup|x64.Build.0 = Debug|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Debug - With Setup|x86.ActiveCfg = Debug|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Debug - With Setup|x86.Build.0 = Debug|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Debug|x64.ActiveCfg = Debug|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Debug|x64.Build.0 = Debug|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Debug|x86.ActiveCfg = Debug|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Debug|x86.Build.0 = Debug|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Release - With Setup|Any CPU.ActiveCfg = Release|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Release - With Setup|Any CPU.Build.0 = Release|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Release - With Setup|Mixed Platforms.ActiveCfg = Release|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Release - With Setup|Mixed Platforms.Build.0 = Release|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Release - With Setup|x64.ActiveCfg = Release|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Release - With Setup|x64.Build.0 = Release|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Release - With Setup|x86.ActiveCfg = Release|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Release - With Setup|x86.Build.0 = Release|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Release|Any CPU.Build.0 = Release|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Release|x64.ActiveCfg = Release|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Release|x64.Build.0 = Release|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Release|x86.ActiveCfg = Release|Any CPU
{7AA16534-92EC-4ABF-BFF0-1EC373C91035}.Release|x86.Build.0 = Release|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Debug - With Setup|Any CPU.ActiveCfg = Debug|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Debug - With Setup|Any CPU.Build.0 = Debug|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Debug - With Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Debug - With Setup|Mixed Platforms.Build.0 = Debug|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Debug - With Setup|x64.ActiveCfg = Debug|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Debug - With Setup|x64.Build.0 = Debug|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Debug - With Setup|x86.ActiveCfg = Debug|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Debug - With Setup|x86.Build.0 = Debug|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Debug|x64.ActiveCfg = Debug|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Debug|x64.Build.0 = Debug|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Debug|x86.ActiveCfg = Debug|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Debug|x86.Build.0 = Debug|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Release - With Setup|Any CPU.ActiveCfg = Release|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Release - With Setup|Any CPU.Build.0 = Release|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Release - With Setup|Mixed Platforms.ActiveCfg = Release|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Release - With Setup|Mixed Platforms.Build.0 = Release|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Release - With Setup|x64.ActiveCfg = Release|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Release - With Setup|x64.Build.0 = Release|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Release - With Setup|x86.ActiveCfg = Release|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Release - With Setup|x86.Build.0 = Release|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Release|Any CPU.Build.0 = Release|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Release|x64.ActiveCfg = Release|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Release|x64.Build.0 = Release|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Release|x86.ActiveCfg = Release|Any CPU
{29B9EDF3-9D68-417E-9D85-D5E88E0975F1}.Release|x86.Build.0 = Release|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Debug - With Setup|Any CPU.ActiveCfg = Debug|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Debug - With Setup|Any CPU.Build.0 = Debug|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Debug - With Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Debug - With Setup|Mixed Platforms.Build.0 = Debug|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Debug - With Setup|x64.ActiveCfg = Debug|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Debug - With Setup|x64.Build.0 = Debug|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Debug - With Setup|x86.ActiveCfg = Debug|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Debug - With Setup|x86.Build.0 = Debug|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Debug|x64.ActiveCfg = Debug|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Debug|x64.Build.0 = Debug|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Debug|x86.ActiveCfg = Debug|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Debug|x86.Build.0 = Debug|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Release - With Setup|Any CPU.ActiveCfg = Release|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Release - With Setup|Any CPU.Build.0 = Release|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Release - With Setup|Mixed Platforms.ActiveCfg = Release|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Release - With Setup|Mixed Platforms.Build.0 = Release|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Release - With Setup|x64.ActiveCfg = Release|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Release - With Setup|x64.Build.0 = Release|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Release - With Setup|x86.ActiveCfg = Release|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Release - With Setup|x86.Build.0 = Release|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Release|Any CPU.Build.0 = Release|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Release|x64.ActiveCfg = Release|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Release|x64.Build.0 = Release|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Release|x86.ActiveCfg = Release|Any CPU
{7BF3C67C-239E-44D5-BA71-555A624550E8}.Release|x86.Build.0 = Release|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Debug - With Setup|Any CPU.ActiveCfg = Debug|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Debug - With Setup|Any CPU.Build.0 = Debug|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Debug - With Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Debug - With Setup|Mixed Platforms.Build.0 = Debug|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Debug - With Setup|x64.ActiveCfg = Debug|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Debug - With Setup|x64.Build.0 = Debug|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Debug - With Setup|x86.ActiveCfg = Debug|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Debug - With Setup|x86.Build.0 = Debug|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Debug|x64.ActiveCfg = Debug|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Debug|x64.Build.0 = Debug|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Debug|x86.ActiveCfg = Debug|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Debug|x86.Build.0 = Debug|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Release - With Setup|Any CPU.ActiveCfg = Release|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Release - With Setup|Any CPU.Build.0 = Release|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Release - With Setup|Mixed Platforms.ActiveCfg = Release|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Release - With Setup|Mixed Platforms.Build.0 = Release|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Release - With Setup|x64.ActiveCfg = Release|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Release - With Setup|x64.Build.0 = Release|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Release - With Setup|x86.ActiveCfg = Release|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Release - With Setup|x86.Build.0 = Release|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Release|Any CPU.Build.0 = Release|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Release|x64.ActiveCfg = Release|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Release|x64.Build.0 = Release|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Release|x86.ActiveCfg = Release|Any CPU
{C1A3C38D-C802-4E40-9079-4C857063A3CE}.Release|x86.Build.0 = Release|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Debug - With Setup|Any CPU.ActiveCfg = Debug|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Debug - With Setup|Any CPU.Build.0 = Debug|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Debug - With Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Debug - With Setup|Mixed Platforms.Build.0 = Debug|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Debug - With Setup|x64.ActiveCfg = Debug|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Debug - With Setup|x64.Build.0 = Debug|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Debug - With Setup|x86.ActiveCfg = Debug|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Debug - With Setup|x86.Build.0 = Debug|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Debug|x64.ActiveCfg = Debug|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Debug|x64.Build.0 = Debug|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Debug|x86.ActiveCfg = Debug|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Debug|x86.Build.0 = Debug|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Release - With Setup|Any CPU.ActiveCfg = Release|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Release - With Setup|Any CPU.Build.0 = Release|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Release - With Setup|Mixed Platforms.ActiveCfg = Release|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Release - With Setup|Mixed Platforms.Build.0 = Release|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Release - With Setup|x64.ActiveCfg = Release|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Release - With Setup|x64.Build.0 = Release|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Release - With Setup|x86.ActiveCfg = Release|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Release - With Setup|x86.Build.0 = Release|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Release|Any CPU.Build.0 = Release|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Release|x64.ActiveCfg = Release|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Release|x64.Build.0 = Release|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Release|x86.ActiveCfg = Release|Any CPU
{1DAD6B26-8993-4C3F-8B75-B9A9D67A2CE0}.Release|x86.Build.0 = Release|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Debug - With Setup|Any CPU.ActiveCfg = Debug|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Debug - With Setup|Any CPU.Build.0 = Debug|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Debug - With Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Debug - With Setup|Mixed Platforms.Build.0 = Debug|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Debug - With Setup|x64.ActiveCfg = Debug|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Debug - With Setup|x64.Build.0 = Debug|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Debug - With Setup|x86.ActiveCfg = Debug|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Debug - With Setup|x86.Build.0 = Debug|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Debug|x64.ActiveCfg = Debug|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Debug|x64.Build.0 = Debug|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Debug|x86.ActiveCfg = Debug|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Debug|x86.Build.0 = Debug|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Release - With Setup|Any CPU.ActiveCfg = Release|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Release - With Setup|Any CPU.Build.0 = Release|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Release - With Setup|Mixed Platforms.ActiveCfg = Release|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Release - With Setup|Mixed Platforms.Build.0 = Release|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Release - With Setup|x64.ActiveCfg = Release|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Release - With Setup|x64.Build.0 = Release|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Release - With Setup|x86.ActiveCfg = Release|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Release - With Setup|x86.Build.0 = Release|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Release|Any CPU.Build.0 = Release|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Release|x64.ActiveCfg = Release|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Release|x64.Build.0 = Release|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Release|x86.ActiveCfg = Release|Any CPU
{9A49783E-FFFB-4629-A877-4A9D3B52323F}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@@ -51,30 +51,6 @@
<RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>
<RefTargetDir>INSTALLFOLDER</RefTargetDir>
</ProjectReference>
<ProjectReference Include="..\Common.Wpf\Common.Native\Common.Native.csproj">
<Name>Common.Native</Name>
<Project>{ed1c07a1-54f5-4796-8b06-2a0bb1960d84}</Project>
<Private>True</Private>
<DoNotHarvest>True</DoNotHarvest>
<RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>
<RefTargetDir>INSTALLFOLDER</RefTargetDir>
</ProjectReference>
<ProjectReference Include="..\Common.Wpf\Common.Wpf.csproj">
<Name>Common.Wpf</Name>
<Project>{0074c983-550e-4094-9e8c-f566fb669297}</Project>
<Private>True</Private>
<DoNotHarvest>True</DoNotHarvest>
<RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>
<RefTargetDir>INSTALLFOLDER</RefTargetDir>
</ProjectReference>
<ProjectReference Include="..\Common\Common.csproj">
<Name>Common</Name>
<Project>{17864d82-457d-4a0a-bc10-1d07f2b3a5d6}</Project>
<Private>True</Private>
<DoNotHarvest>True</DoNotHarvest>
<RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>
<RefTargetDir>INSTALLFOLDER</RefTargetDir>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="packages.config" />