Merge with Kayone.

pull/6/head
Mark McDowall 13 years ago
commit 1f0e71c68e

Binary file not shown.

@ -1065,11 +1065,11 @@
into an expression tree. into an expression tree.
</summary> </summary>
</member> </member>
<member name="M:NLog.Conditions.ConditionParser.#ctor(System.String,NLog.Config.ConfigurationItemFactory)"> <member name="M:NLog.Conditions.ConditionParser.#ctor(NLog.Internal.SimpleStringReader,NLog.Config.ConfigurationItemFactory)">
<summary> <summary>
Initializes a new instance of the <see cref="T:NLog.Conditions.ConditionParser"/> class. Initializes a new instance of the <see cref="T:NLog.Conditions.ConditionParser"/> class.
</summary> </summary>
<param name="expressionText">The expression text.</param> <param name="stringReader">The string reader.</param>
<param name="configurationItemFactory">Instance of <see cref="T:NLog.Config.ConfigurationItemFactory"/> used to resolve references to condition methods and layout renderers.</param> <param name="configurationItemFactory">Instance of <see cref="T:NLog.Config.ConfigurationItemFactory"/> used to resolve references to condition methods and layout renderers.</param>
</member> </member>
<member name="M:NLog.Conditions.ConditionParser.ParseExpression(System.String)"> <member name="M:NLog.Conditions.ConditionParser.ParseExpression(System.String)">
@ -1089,6 +1089,17 @@
<param name="configurationItemFactories">Instance of <see cref="T:NLog.Config.ConfigurationItemFactory"/> used to resolve references to condition methods and layout renderers.</param> <param name="configurationItemFactories">Instance of <see cref="T:NLog.Config.ConfigurationItemFactory"/> used to resolve references to condition methods and layout renderers.</param>
<returns>The root of the expression syntax tree which can be used to get the value of the condition in a specified context.</returns> <returns>The root of the expression syntax tree which can be used to get the value of the condition in a specified context.</returns>
</member> </member>
<member name="M:NLog.Conditions.ConditionParser.ParseExpression(NLog.Internal.SimpleStringReader,NLog.Config.ConfigurationItemFactory)">
<summary>
Parses the specified condition string and turns it into
<see cref="T:NLog.Conditions.ConditionExpression"/> tree.
</summary>
<param name="stringReader">The string reader.</param>
<param name="configurationItemFactories">Instance of <see cref="T:NLog.Config.ConfigurationItemFactory"/> used to resolve references to condition methods and layout renderers.</param>
<returns>
The root of the expression syntax tree which can be used to get the value of the condition in a specified context.
</returns>
</member>
<member name="T:NLog.Conditions.ConditionRelationalExpression"> <member name="T:NLog.Conditions.ConditionRelationalExpression">
<summary> <summary>
Condition relational (<b>==</b>, <b>!=</b>, <b>&lt;</b>, <b>&lt;=</b>, Condition relational (<b>==</b>, <b>!=</b>, <b>&lt;</b>, <b>&lt;=</b>,
@ -1185,11 +1196,11 @@
Hand-written tokenizer for conditions. Hand-written tokenizer for conditions.
</summary> </summary>
</member> </member>
<member name="M:NLog.Conditions.ConditionTokenizer.#ctor(System.String)"> <member name="M:NLog.Conditions.ConditionTokenizer.#ctor(NLog.Internal.SimpleStringReader)">
<summary> <summary>
Initializes a new instance of the <see cref="T:NLog.Conditions.ConditionTokenizer"/> class. Initializes a new instance of the <see cref="T:NLog.Conditions.ConditionTokenizer"/> class.
</summary> </summary>
<param name="expressionText">The expression text.</param> <param name="stringReader">The string reader.</param>
</member> </member>
<member name="M:NLog.Conditions.ConditionTokenizer.Expect(NLog.Conditions.ConditionTokenType)"> <member name="M:NLog.Conditions.ConditionTokenizer.Expect(NLog.Conditions.ConditionTokenType)">
<summary> <summary>
@ -1378,6 +1389,17 @@
<param name="type">The type to register.</param> <param name="type">The type to register.</param>
<param name="itemNamePrefix">The item name prefix.</param> <param name="itemNamePrefix">The item name prefix.</param>
</member> </member>
<member name="M:NLog.Config.ConfigurationItemFactory.BuildDefaultFactory">
<summary>
Builds the default configuration item factory.
</summary>
<returns>Default factory.</returns>
</member>
<member name="M:NLog.Config.ConfigurationItemFactory.RegisterExtendedItems">
<summary>
Registers items in NLog.Extended.dll using late-bound types, so that we don't need a reference to NLog.Extended.dll.
</summary>
</member>
<member name="P:NLog.Config.ConfigurationItemFactory.Default"> <member name="P:NLog.Config.ConfigurationItemFactory.Default">
<summary> <summary>
Gets or sets default singleton instance of <see cref="T:NLog.Config.ConfigurationItemFactory"/>. Gets or sets default singleton instance of <see cref="T:NLog.Config.ConfigurationItemFactory"/>.
@ -1473,14 +1495,6 @@
<param name="result">The result.</param> <param name="result">The result.</param>
<returns>True if instance was created successfully, false otherwise.</returns> <returns>True if instance was created successfully, false otherwise.</returns>
</member> </member>
<member name="P:NLog.Config.INamedItemFactory`2.AllRegisteredItems">
<summary>
Gets a collection of all registered items in the factory.
</summary>
<returns>Sequence of key/value pairs where each key represents the name
of the item and value is the <typeparamref name="TDefinitionType"/> of
the item.</returns>
</member>
<member name="T:NLog.Config.IFactory"> <member name="T:NLog.Config.IFactory">
<summary> <summary>
Provides means to populate factories of named items (such as targets, layouts, layout renderers, etc.). Provides means to populate factories of named items (such as targets, layouts, layout renderers, etc.).
@ -1500,6 +1514,13 @@
<param name="type">The type to register.</param> <param name="type">The type to register.</param>
<param name="itemNamePrefix">The item name prefix.</param> <param name="itemNamePrefix">The item name prefix.</param>
</member> </member>
<member name="M:NLog.Config.Factory`2.RegisterNamedType(System.String,System.String)">
<summary>
Registers the item based on a type name.
</summary>
<param name="itemName">Name of the item.</param>
<param name="typeName">Name of the type.</param>
</member>
<member name="M:NLog.Config.Factory`2.Clear"> <member name="M:NLog.Config.Factory`2.Clear">
<summary> <summary>
Clears the contents of the factory. Clears the contents of the factory.
@ -1535,14 +1556,6 @@
<param name="name">The name of the item.</param> <param name="name">The name of the item.</param>
<returns>Created item.</returns> <returns>Created item.</returns>
</member> </member>
<member name="P:NLog.Config.Factory`2.AllRegisteredItems">
<summary>
Gets a collection of all registered items in the factory.
</summary>
<returns>Sequence of key/value pairs where each key represents the name
of the item and value is the <see cref="T:System.Type"/> of
the item.</returns>
</member>
<member name="T:NLog.Config.IInstallable"> <member name="T:NLog.Config.IInstallable">
<summary> <summary>
Implemented by objects which support installation and uninstallation. Implemented by objects which support installation and uninstallation.
@ -2069,45 +2082,6 @@
layout targets and filters. layout targets and filters.
</summary> </summary>
</member> </member>
<member name="T:NLog.Config.RuntimeOS">
<summary>
Supported operating systems.
</summary>
<remarks>
If you add anything here, make sure to add the appropriate detection
code to <see cref="T:NLog.Internal.PlatformDetector"/>
</remarks>
</member>
<member name="F:NLog.Config.RuntimeOS.Any">
<summary>
Any operating system.
</summary>
</member>
<member name="F:NLog.Config.RuntimeOS.Unix">
<summary>
Unix/Linux operating systems.
</summary>
</member>
<member name="F:NLog.Config.RuntimeOS.WindowsCE">
<summary>
Windows CE.
</summary>
</member>
<member name="F:NLog.Config.RuntimeOS.Windows">
<summary>
Desktop versions of Windows (95,98,ME).
</summary>
</member>
<member name="F:NLog.Config.RuntimeOS.WindowsNT">
<summary>
Windows NT, 2000, 2003 and future versions based on NT technology.
</summary>
</member>
<member name="F:NLog.Config.RuntimeOS.Unknown">
<summary>
Unknown operating system.
</summary>
</member>
<member name="T:NLog.Config.SimpleConfigurator"> <member name="T:NLog.Config.SimpleConfigurator">
<summary> <summary>
Provides simple programmatic configuration API used for trivial logging cases. Provides simple programmatic configuration API used for trivial logging cases.
@ -3322,6 +3296,18 @@
A value of <c>true</c> if the specified level is enabled; otherwise, <c>false</c>. A value of <c>true</c> if the specified level is enabled; otherwise, <c>false</c>.
</returns> </returns>
</member> </member>
<member name="T:NLog.Internal.MessageBoxHelper">
<summary>
Message Box helper.
</summary>
</member>
<member name="M:NLog.Internal.MessageBoxHelper.Show(System.String,System.String)">
<summary>
Shows the specified message using platform-specific message box.
</summary>
<param name="message">The message.</param>
<param name="caption">The caption.</param>
</member>
<member name="T:NLog.Internal.MultiFileWatcher"> <member name="T:NLog.Internal.MultiFileWatcher">
<summary> <summary>
Watches multiple files at the same time and raises an event whenever Watches multiple files at the same time and raises an event whenever
@ -3354,75 +3340,9 @@
Supports mocking of SMTP Client code. Supports mocking of SMTP Client code.
</summary> </summary>
</member> </member>
<member name="M:NLog.Internal.MySmtpClient.Dispose"> <member name="T:NLog.Internal.NetworkSenders.HttpNetworkSender">
<summary>
Sends a QUIT message to the SMTP server, gracefully ends the TCP connection, and releases all resources used by the current instance of the <see cref="T:System.Net.Mail.SmtpClient"/> class.
</summary>
</member>
<member name="M:NLog.Internal.MySmtpClient.NLog#Internal#ISmtpClient#get_Host">
<summary>
Supports mocking of SMTP Client code.
</summary>
</member>
<member name="M:NLog.Internal.MySmtpClient.NLog#Internal#ISmtpClient#set_Host(System.String)">
<summary>
Supports mocking of SMTP Client code.
</summary>
</member>
<member name="M:NLog.Internal.MySmtpClient.NLog#Internal#ISmtpClient#get_Port">
<summary>
Supports mocking of SMTP Client code.
</summary>
</member>
<member name="M:NLog.Internal.MySmtpClient.NLog#Internal#ISmtpClient#set_Port(System.Int32)">
<summary>
Supports mocking of SMTP Client code.
</summary>
</member>
<member name="M:NLog.Internal.MySmtpClient.NLog#Internal#ISmtpClient#get_Credentials">
<summary>
Supports mocking of SMTP Client code.
</summary>
</member>
<member name="M:NLog.Internal.MySmtpClient.NLog#Internal#ISmtpClient#set_Credentials(System.Net.ICredentialsByHost)">
<summary>
Supports mocking of SMTP Client code.
</summary>
</member>
<member name="M:NLog.Internal.MySmtpClient.NLog#Internal#ISmtpClient#get_EnableSsl">
<summary>
Supports mocking of SMTP Client code.
</summary>
</member>
<member name="M:NLog.Internal.MySmtpClient.NLog#Internal#ISmtpClient#set_EnableSsl(System.Boolean)">
<summary>
Supports mocking of SMTP Client code.
</summary>
</member>
<member name="M:NLog.Internal.MySmtpClient.NLog#Internal#ISmtpClient#Send(System.Net.Mail.MailMessage)">
<summary>
Supports mocking of SMTP Client code.
</summary>
</member>
<member name="T:NLog.Internal.NetworkSenders.INetworkSenderFactory">
<summary>
Creates instances of <see cref="T:NLog.Internal.NetworkSenders.NetworkSender"/> objects for given URLs.
</summary>
</member>
<member name="M:NLog.Internal.NetworkSenders.INetworkSenderFactory.Create(System.String)">
<summary> <summary>
Creates a new instance of the network sender based on a network URL. Network sender which uses HTTP or HTTPS POST.
</summary>
<param name="url">
URL that determines the network sender to be created.
</param>
<returns>
A newly created network sender.
</returns>
</member>
<member name="T:NLog.Internal.NetworkSenders.ISocket">
<summary>
Interface for mocking socket calls.
</summary> </summary>
</member> </member>
<member name="T:NLog.Internal.NetworkSenders.NetworkSender"> <member name="T:NLog.Internal.NetworkSenders.NetworkSender">
@ -3518,6 +3438,43 @@
Gets the last send time. Gets the last send time.
</summary> </summary>
</member> </member>
<member name="M:NLog.Internal.NetworkSenders.HttpNetworkSender.#ctor(System.String)">
<summary>
Initializes a new instance of the <see cref="T:NLog.Internal.NetworkSenders.HttpNetworkSender"/> class.
</summary>
<param name="url">The network URL.</param>
</member>
<member name="M:NLog.Internal.NetworkSenders.HttpNetworkSender.DoSend(System.Byte[],System.Int32,System.Int32,NLog.Common.AsyncContinuation)">
<summary>
Actually sends the given text over the specified protocol.
</summary>
<param name="bytes">The bytes to be sent.</param>
<param name="offset">Offset in buffer.</param>
<param name="length">Number of bytes to send.</param>
<param name="asyncContinuation">The async continuation to be invoked after the buffer has been sent.</param>
<remarks>To be overridden in inheriting classes.</remarks>
</member>
<member name="T:NLog.Internal.NetworkSenders.INetworkSenderFactory">
<summary>
Creates instances of <see cref="T:NLog.Internal.NetworkSenders.NetworkSender"/> objects for given URLs.
</summary>
</member>
<member name="M:NLog.Internal.NetworkSenders.INetworkSenderFactory.Create(System.String)">
<summary>
Creates a new instance of the network sender based on a network URL.
</summary>
<param name="url">
URL that determines the network sender to be created.
</param>
<returns>
A newly created network sender.
</returns>
</member>
<member name="T:NLog.Internal.NetworkSenders.ISocket">
<summary>
Interface for mocking socket calls.
</summary>
</member>
<member name="T:NLog.Internal.NetworkSenders.NetworkSenderFactory"> <member name="T:NLog.Internal.NetworkSenders.NetworkSenderFactory">
<summary> <summary>
Default implementation of <see cref="T:NLog.Internal.NetworkSenders.INetworkSenderFactory"/>. Default implementation of <see cref="T:NLog.Internal.NetworkSenders.INetworkSenderFactory"/>.
@ -3809,6 +3766,69 @@
Reflection helpers for accessing properties. Reflection helpers for accessing properties.
</summary> </summary>
</member> </member>
<member name="T:NLog.Internal.ReflectionHelpers">
<summary>
Reflection helpers.
</summary>
</member>
<member name="M:NLog.Internal.ReflectionHelpers.SafeGetTypes(System.Reflection.Assembly)">
<summary>
Gets all usable exported types from the given assembly.
</summary>
<param name="assembly">Assembly to scan.</param>
<returns>Usable types from the given assembly.</returns>
<remarks>Types which cannot be loaded are skipped.</remarks>
</member>
<member name="T:NLog.Internal.RuntimeOS">
<summary>
Supported operating systems.
</summary>
<remarks>
If you add anything here, make sure to add the appropriate detection
code to <see cref="T:NLog.Internal.PlatformDetector"/>
</remarks>
</member>
<member name="F:NLog.Internal.RuntimeOS.Any">
<summary>
Any operating system.
</summary>
</member>
<member name="F:NLog.Internal.RuntimeOS.Unix">
<summary>
Unix/Linux operating systems.
</summary>
</member>
<member name="F:NLog.Internal.RuntimeOS.WindowsCE">
<summary>
Windows CE.
</summary>
</member>
<member name="F:NLog.Internal.RuntimeOS.Windows">
<summary>
Desktop versions of Windows (95,98,ME).
</summary>
</member>
<member name="F:NLog.Internal.RuntimeOS.WindowsNT">
<summary>
Windows NT, 2000, 2003 and future versions based on NT technology.
</summary>
</member>
<member name="F:NLog.Internal.RuntimeOS.Unknown">
<summary>
Unknown operating system.
</summary>
</member>
<member name="T:NLog.Internal.SimpleStringReader">
<summary>
Simple character tokenizer.
</summary>
</member>
<member name="M:NLog.Internal.SimpleStringReader.#ctor(System.String)">
<summary>
Initializes a new instance of the <see cref="T:NLog.Internal.SimpleStringReader"/> class.
</summary>
<param name="text">The text to be tokenized.</param>
</member>
<member name="T:NLog.Internal.SingleCallContinuation"> <member name="T:NLog.Internal.SingleCallContinuation">
<summary> <summary>
Implements a single-call guard around given continuation function. Implements a single-call guard around given continuation function.
@ -4276,6 +4296,12 @@
</summary> </summary>
<docgen category='Rendering Options' order='10' /> <docgen category='Rendering Options' order='10' />
</member> </member>
<member name="P:NLog.LayoutRenderers.DateLayoutRenderer.UniversalTime">
<summary>
Gets or sets a value indicating whether to output UTC time instead of local time.
</summary>
<docgen category='Rendering Options' order='10' />
</member>
<member name="T:NLog.LayoutRenderers.EnvironmentLayoutRenderer"> <member name="T:NLog.LayoutRenderers.EnvironmentLayoutRenderer">
<summary> <summary>
The environment variable. The environment variable.
@ -4338,12 +4364,33 @@
</summary> </summary>
<docgen category='Rendering Options' order='10' /> <docgen category='Rendering Options' order='10' />
</member> </member>
<member name="P:NLog.LayoutRenderers.ExceptionLayoutRenderer.InnerFormat">
<summary>
Gets or sets the format of the output of inner exceptions. Must be a comma-separated list of exception
properties: Message, Type, ShortType, ToString, Method, StackTrace.
This parameter value is case-insensitive.
</summary>
<docgen category='Rendering Options' order='10' />
</member>
<member name="P:NLog.LayoutRenderers.ExceptionLayoutRenderer.Separator"> <member name="P:NLog.LayoutRenderers.ExceptionLayoutRenderer.Separator">
<summary> <summary>
Gets or sets the separator used to concatenate parts specified in the Format. Gets or sets the separator used to concatenate parts specified in the Format.
</summary> </summary>
<docgen category='Rendering Options' order='10' /> <docgen category='Rendering Options' order='10' />
</member> </member>
<member name="P:NLog.LayoutRenderers.ExceptionLayoutRenderer.MaxInnerExceptionLevel">
<summary>
Gets or sets the maximum number of inner exceptions to include in the output.
By default inner exceptions are not enabled for compatibility with NLog 1.0.
</summary>
<docgen category='Rendering Options' order='10' />
</member>
<member name="P:NLog.LayoutRenderers.ExceptionLayoutRenderer.InnerExceptionSeparator">
<summary>
Gets or sets the separator between inner exceptions.
</summary>
<docgen category='Rendering Options' order='10' />
</member>
<member name="T:NLog.LayoutRenderers.FileContentsLayoutRenderer"> <member name="T:NLog.LayoutRenderers.FileContentsLayoutRenderer">
<summary> <summary>
Renders contents of the specified file. Renders contents of the specified file.
@ -4515,13 +4562,6 @@
</summary> </summary>
<docgen category='Rendering Options' order='10' /> <docgen category='Rendering Options' order='10' />
</member> </member>
<member name="P:NLog.LayoutRenderers.IdentityLayoutRenderer.FSNormalize">
<summary>
Gets or sets a value indicating whether to modify the output of this renderer so it can be used as a part of file path
(illegal characters are replaced with '_').
</summary>
<docgen category='Advanced Options' order='10' />
</member>
<member name="T:NLog.LayoutRenderers.InstallContextLayoutRenderer"> <member name="T:NLog.LayoutRenderers.InstallContextLayoutRenderer">
<summary> <summary>
Installation parameter (passed to InstallNLogConfig). Installation parameter (passed to InstallNLogConfig).
@ -4656,6 +4696,12 @@
</summary> </summary>
<docgen category="Payload Options" order="10"/> <docgen category="Payload Options" order="10"/>
</member> </member>
<member name="P:NLog.LayoutRenderers.Log4JXmlEventLayoutRenderer.NdcItemSeparator">
<summary>
Gets or sets the NDC item separator.
</summary>
<docgen category='Payload Options' order='10' />
</member>
<member name="P:NLog.LayoutRenderers.Log4JXmlEventLayoutRenderer.NLog#Internal#IUsesStackTrace#StackTraceUsage"> <member name="P:NLog.LayoutRenderers.Log4JXmlEventLayoutRenderer.NLog#Internal#IUsesStackTrace#StackTraceUsage">
<summary> <summary>
Gets the level of stack trace information required by the implementing class. Gets the level of stack trace information required by the implementing class.
@ -4691,6 +4737,12 @@
<param name="builder">The <see cref="T:System.Text.StringBuilder"/> to append the rendered data to.</param> <param name="builder">The <see cref="T:System.Text.StringBuilder"/> to append the rendered data to.</param>
<param name="logEvent">Logging event.</param> <param name="logEvent">Logging event.</param>
</member> </member>
<member name="P:NLog.LayoutRenderers.LongDateLayoutRenderer.UniversalTime">
<summary>
Gets or sets a value indicating whether to output UTC time instead of local time.
</summary>
<docgen category='Rendering Options' order='10' />
</member>
<member name="T:NLog.LayoutRenderers.MachineNameLayoutRenderer"> <member name="T:NLog.LayoutRenderers.MachineNameLayoutRenderer">
<summary> <summary>
The machine name that the process is running on. The machine name that the process is running on.
@ -4731,6 +4783,11 @@
The formatted log message. The formatted log message.
</summary> </summary>
</member> </member>
<member name="M:NLog.LayoutRenderers.MessageLayoutRenderer.#ctor">
<summary>
Initializes a new instance of the <see cref="T:NLog.LayoutRenderers.MessageLayoutRenderer"/> class.
</summary>
</member>
<member name="M:NLog.LayoutRenderers.MessageLayoutRenderer.Append(System.Text.StringBuilder,NLog.LogEventInfo)"> <member name="M:NLog.LayoutRenderers.MessageLayoutRenderer.Append(System.Text.StringBuilder,NLog.LogEventInfo)">
<summary> <summary>
Renders the log message including any positional parameters and appends it to the specified <see cref="T:System.Text.StringBuilder"/>. Renders the log message including any positional parameters and appends it to the specified <see cref="T:System.Text.StringBuilder"/>.
@ -4738,6 +4795,18 @@
<param name="builder">The <see cref="T:System.Text.StringBuilder"/> to append the rendered data to.</param> <param name="builder">The <see cref="T:System.Text.StringBuilder"/> to append the rendered data to.</param>
<param name="logEvent">Logging event.</param> <param name="logEvent">Logging event.</param>
</member> </member>
<member name="P:NLog.LayoutRenderers.MessageLayoutRenderer.WithException">
<summary>
Gets or sets a value indicating whether to log exception along with message.
</summary>
<docgen category='Layout Options' order='10' />
</member>
<member name="P:NLog.LayoutRenderers.MessageLayoutRenderer.ExceptionSeparator">
<summary>
Gets or sets the string that separates message from the exception.
</summary>
<docgen category='Layout Options' order='10' />
</member>
<member name="T:NLog.LayoutRenderers.NdcLayoutRenderer"> <member name="T:NLog.LayoutRenderers.NdcLayoutRenderer">
<summary> <summary>
Nested Diagnostic Context item. Provided for compatibility with log4net. Nested Diagnostic Context item. Provided for compatibility with log4net.
@ -5242,30 +5311,11 @@
<param name="builder">The <see cref="T:System.Text.StringBuilder"/> to append the rendered data to.</param> <param name="builder">The <see cref="T:System.Text.StringBuilder"/> to append the rendered data to.</param>
<param name="logEvent">Logging event.</param> <param name="logEvent">Logging event.</param>
</member> </member>
<member name="T:NLog.LayoutRenderers.SilverlightApplicationInfoOption"> <member name="P:NLog.LayoutRenderers.ShortDateLayoutRenderer.UniversalTime">
<summary>
Specifies application information to display in ${sl-appinfo} renderer.
</summary>
</member>
<member name="F:NLog.LayoutRenderers.SilverlightApplicationInfoOption.XapUri">
<summary>
URI of the current application XAP file.
</summary>
</member>
<member name="F:NLog.LayoutRenderers.SilverlightApplicationInfoOption.IsOutOfBrowser">
<summary>
Whether application is running out-of-browser.
</summary>
</member>
<member name="F:NLog.LayoutRenderers.SilverlightApplicationInfoOption.InstallState">
<summary> <summary>
Installed state of an application. Gets or sets a value indicating whether to output UTC time instead of local time.
</summary>
</member>
<member name="F:NLog.LayoutRenderers.SilverlightApplicationInfoOption.HasElevatedPermissions">
<summary>
Whether application is running with elevated permissions.
</summary> </summary>
<docgen category='Rendering Options' order='10' />
</member> </member>
<member name="T:NLog.LayoutRenderers.SpecialFolderLayoutRenderer"> <member name="T:NLog.LayoutRenderers.SpecialFolderLayoutRenderer">
<summary> <summary>
@ -5431,6 +5481,24 @@
<param name="builder">The <see cref="T:System.Text.StringBuilder"/> to append the rendered data to.</param> <param name="builder">The <see cref="T:System.Text.StringBuilder"/> to append the rendered data to.</param>
<param name="logEvent">Logging event.</param> <param name="logEvent">Logging event.</param>
</member> </member>
<member name="T:NLog.LayoutRenderers.TimeLayoutRenderer">
<summary>
The time in a 24-hour, sortable format HH:mm:ss.mmm.
</summary>
</member>
<member name="M:NLog.LayoutRenderers.TimeLayoutRenderer.Append(System.Text.StringBuilder,NLog.LogEventInfo)">
<summary>
Renders time in the 24-h format (HH:mm:ss.mmm) and appends it to the specified <see cref="T:System.Text.StringBuilder"/>.
</summary>
<param name="builder">The <see cref="T:System.Text.StringBuilder"/> to append the rendered data to.</param>
<param name="logEvent">Logging event.</param>
</member>
<member name="P:NLog.LayoutRenderers.TimeLayoutRenderer.UniversalTime">
<summary>
Gets or sets a value indicating whether to output UTC time instead of local time.
</summary>
<docgen category='Rendering Options' order='10' />
</member>
<member name="T:NLog.LayoutRenderers.WindowsIdentityLayoutRenderer"> <member name="T:NLog.LayoutRenderers.WindowsIdentityLayoutRenderer">
<summary> <summary>
Thread Windows identity information (username). Thread Windows identity information (username).
@ -5538,6 +5606,30 @@
</summary> </summary>
<docgen category="Caching Options" order="10"/> <docgen category="Caching Options" order="10"/>
</member> </member>
<member name="T:NLog.LayoutRenderers.Wrappers.FileSystemNormalizeLayoutRendererWrapper">
<summary>
Filters characters not allowed in the file names by replacing them with safe character.
</summary>
</member>
<member name="M:NLog.LayoutRenderers.Wrappers.FileSystemNormalizeLayoutRendererWrapper.#ctor">
<summary>
Initializes a new instance of the <see cref="T:NLog.LayoutRenderers.Wrappers.FileSystemNormalizeLayoutRendererWrapper"/> class.
</summary>
</member>
<member name="M:NLog.LayoutRenderers.Wrappers.FileSystemNormalizeLayoutRendererWrapper.Transform(System.String)">
<summary>
Post-processes the rendered message.
</summary>
<param name="text">The text to be post-processed.</param>
<returns>Padded and trimmed string.</returns>
</member>
<member name="P:NLog.LayoutRenderers.Wrappers.FileSystemNormalizeLayoutRendererWrapper.FSNormalize">
<summary>
Gets or sets a value indicating whether to modify the output of this renderer so it can be used as a part of file path
(illegal characters are replaced with '_').
</summary>
<docgen category='Advanced Options' order='10' />
</member>
<member name="T:NLog.LayoutRenderers.Wrappers.LowercaseLayoutRendererWrapper"> <member name="T:NLog.LayoutRenderers.Wrappers.LowercaseLayoutRendererWrapper">
<summary> <summary>
Converts the result of another layout output to lower case. Converts the result of another layout output to lower case.
@ -5568,6 +5660,27 @@
</summary> </summary>
<docgen category='Transformation Options' order='10' /> <docgen category='Transformation Options' order='10' />
</member> </member>
<member name="T:NLog.LayoutRenderers.Wrappers.OnExceptionLayoutRendererWrapper">
<summary>
Only outputs the inner layout when exception has been defined for log message.
</summary>
</member>
<member name="M:NLog.LayoutRenderers.Wrappers.OnExceptionLayoutRendererWrapper.Transform(System.String)">
<summary>
Transforms the output of another layout.
</summary>
<param name="text">Output to be transform.</param>
<returns>Transformed text.</returns>
</member>
<member name="M:NLog.LayoutRenderers.Wrappers.OnExceptionLayoutRendererWrapper.RenderInner(NLog.LogEventInfo)">
<summary>
Renders the inner layout contents.
</summary>
<param name="logEvent">The log event.</param>
<returns>
Contents of inner layout.
</returns>
</member>
<member name="T:NLog.LayoutRenderers.Wrappers.PaddingLayoutRendererWrapper"> <member name="T:NLog.LayoutRenderers.Wrappers.PaddingLayoutRendererWrapper">
<summary> <summary>
Applies padding to another layout output. Applies padding to another layout output.
@ -5768,6 +5881,83 @@
<value>A value of <c>true</c> if space should be translated to '+'; otherwise, <c>false</c>.</value> <value>A value of <c>true</c> if space should be translated to '+'; otherwise, <c>false</c>.</value>
<docgen category='Transformation Options' order='10' /> <docgen category='Transformation Options' order='10' />
</member> </member>
<member name="T:NLog.LayoutRenderers.Wrappers.WhenEmptyLayoutRendererWrapper">
<summary>
Outputs alternative layout when the inner layout produces empty result.
</summary>
</member>
<member name="M:NLog.LayoutRenderers.Wrappers.WhenEmptyLayoutRendererWrapper.Transform(System.String)">
<summary>
Transforms the output of another layout.
</summary>
<param name="text">Output to be transform.</param>
<returns>Transformed text.</returns>
</member>
<member name="M:NLog.LayoutRenderers.Wrappers.WhenEmptyLayoutRendererWrapper.RenderInner(NLog.LogEventInfo)">
<summary>
Renders the inner layout contents.
</summary>
<param name="logEvent">The log event.</param>
<returns>
Contents of inner layout.
</returns>
</member>
<member name="P:NLog.LayoutRenderers.Wrappers.WhenEmptyLayoutRendererWrapper.WhenEmpty">
<summary>
Gets or sets the layout to be rendered when original layout produced empty result.
</summary>
<docgen category="Transformation Options" order="10"/>
</member>
<member name="T:NLog.LayoutRenderers.Wrappers.WhenLayoutRendererWrapper">
<summary>
Only outputs the inner layout when the specified condition has been met.
</summary>
</member>
<member name="M:NLog.LayoutRenderers.Wrappers.WhenLayoutRendererWrapper.Transform(System.String)">
<summary>
Transforms the output of another layout.
</summary>
<param name="text">Output to be transform.</param>
<returns>Transformed text.</returns>
</member>
<member name="M:NLog.LayoutRenderers.Wrappers.WhenLayoutRendererWrapper.RenderInner(NLog.LogEventInfo)">
<summary>
Renders the inner layout contents.
</summary>
<param name="logEvent">The log event.</param>
<returns>
Contents of inner layout.
</returns>
</member>
<member name="P:NLog.LayoutRenderers.Wrappers.WhenLayoutRendererWrapper.When">
<summary>
Gets or sets the condition that must be met for the inner layout to be printed.
</summary>
<docgen category="Transformation Options" order="10"/>
</member>
<member name="T:NLog.LayoutRenderers.Wrappers.XmlEncodeLayoutRendererWrapper">
<summary>
Converts the result of another layout output to be XML-compliant.
</summary>
</member>
<member name="M:NLog.LayoutRenderers.Wrappers.XmlEncodeLayoutRendererWrapper.#ctor">
<summary>
Initializes a new instance of the <see cref="T:NLog.LayoutRenderers.Wrappers.XmlEncodeLayoutRendererWrapper"/> class.
</summary>
</member>
<member name="M:NLog.LayoutRenderers.Wrappers.XmlEncodeLayoutRendererWrapper.Transform(System.String)">
<summary>
Post-processes the rendered message.
</summary>
<param name="text">The text to be post-processed.</param>
<returns>Padded and trimmed string.</returns>
</member>
<member name="P:NLog.LayoutRenderers.Wrappers.XmlEncodeLayoutRendererWrapper.XmlEncode">
<summary>
Gets or sets a value indicating whether to apply XML encoding.
</summary>
<docgen category="Transformation Options" order="10"/>
</member>
<member name="T:NLog.Layouts.CsvColumn"> <member name="T:NLog.Layouts.CsvColumn">
<summary> <summary>
A column in the CSV. A column in the CSV.
@ -5937,18 +6127,6 @@
Gets the logging configuration this target is part of. Gets the logging configuration this target is part of.
</summary> </summary>
</member> </member>
<member name="M:NLog.Layouts.LayoutWithHeaderAndFooter.Precalculate(NLog.LogEventInfo)">
<summary>
Precalculates the layout for the specified log event and stores the result
in per-log event cache.
</summary>
<param name="logEvent">The log event.</param>
<remarks>
Calling this method enables you to store the log event in a buffer
and/or potentially evaluate it in another thread even though the
layout may contain thread-dependent renderer.
</remarks>
</member>
<member name="M:NLog.Layouts.LayoutWithHeaderAndFooter.GetFormattedMessage(NLog.LogEventInfo)"> <member name="M:NLog.Layouts.LayoutWithHeaderAndFooter.GetFormattedMessage(NLog.LogEventInfo)">
<summary> <summary>
Renders the layout for the specified logging event by invoking layout renderers. Renders the layout for the specified logging event by invoking layout renderers.
@ -6083,17 +6261,6 @@
Parses layout strings. Parses layout strings.
</summary> </summary>
</member> </member>
<member name="T:NLog.Layouts.LayoutParser.Tokenizer">
<summary>
Simple character tokenizer.
</summary>
</member>
<member name="M:NLog.Layouts.LayoutParser.Tokenizer.#ctor(System.String)">
<summary>
Initializes a new instance of the <see cref="T:NLog.Layouts.LayoutParser.Tokenizer"/> class.
</summary>
<param name="text">The text to be tokenized.</param>
</member>
<member name="T:NLog.Layouts.Log4JXmlEventLayout"> <member name="T:NLog.Layouts.Log4JXmlEventLayout">
<summary> <summary>
A specialized layout that renders Log4j-compatible XML events. A specialized layout that renders Log4j-compatible XML events.
@ -9481,11 +9648,6 @@
</summary> </summary>
<param name="result">The result.</param> <param name="result">The result.</param>
</member> </member>
<member name="T:NLog.LogReceiverService.ILogReceiverClientChannel">
<summary>
Log Receiver Client Channel.
</summary>
</member>
<member name="T:NLog.LogReceiverService.ILogReceiverServer"> <member name="T:NLog.LogReceiverService.ILogReceiverServer">
<summary> <summary>
Service contract for Log Receiver server. Service contract for Log Receiver server.
@ -9497,6 +9659,34 @@
</summary> </summary>
<param name="events">The events.</param> <param name="events">The events.</param>
</member> </member>
<member name="T:NLog.LogReceiverService.LogReceiverForwardingService">
<summary>
Implementation of <see cref="T:NLog.LogReceiverService.ILogReceiverServer"/> which forwards received logs through <see cref="T:NLog.LogManager"/> or a given <see cref="T:NLog.LogFactory"/>.
</summary>
</member>
<member name="M:NLog.LogReceiverService.LogReceiverForwardingService.#ctor">
<summary>
Initializes a new instance of the <see cref="T:NLog.LogReceiverService.LogReceiverForwardingService"/> class.
</summary>
</member>
<member name="M:NLog.LogReceiverService.LogReceiverForwardingService.#ctor(NLog.LogFactory)">
<summary>
Initializes a new instance of the <see cref="T:NLog.LogReceiverService.LogReceiverForwardingService"/> class.
</summary>
<param name="logFactory">The log factory.</param>
</member>
<member name="M:NLog.LogReceiverService.LogReceiverForwardingService.ProcessLogMessages(NLog.LogReceiverService.NLogEvents)">
<summary>
Processes the log messages.
</summary>
<param name="events">The events to process.</param>
</member>
<member name="M:NLog.LogReceiverService.LogReceiverForwardingService.ProcessLogMessages(NLog.LogEventInfo[])">
<summary>
Processes the log messages.
</summary>
<param name="logEvents">The log events.</param>
</member>
<member name="T:NLog.LogReceiverService.LogReceiverServiceConfig"> <member name="T:NLog.LogReceiverService.LogReceiverServiceConfig">
<summary> <summary>
Internal configuration of Log Receiver Service contracts. Internal configuration of Log Receiver Service contracts.
@ -10518,6 +10708,12 @@
</summary> </summary>
<docgen category="Payload Options" order="10"/> <docgen category="Payload Options" order="10"/>
</member> </member>
<member name="P:NLog.Targets.NLogViewerTarget.NdcItemSeparator">
<summary>
Gets or sets the NDC item separator.
</summary>
<docgen category='Payload Options' order='10' />
</member>
<member name="P:NLog.Targets.NLogViewerTarget.Parameters"> <member name="P:NLog.Targets.NLogViewerTarget.Parameters">
<summary> <summary>
Gets the collection of parameters. Each parameter contains a mapping Gets the collection of parameters. Each parameter contains a mapping
@ -10534,6 +10730,7 @@
<summary> <summary>
Gets or sets the instance of <see cref="T:NLog.Layouts.Log4JXmlEventLayout"/> that is used to format log messages. Gets or sets the instance of <see cref="T:NLog.Layouts.Log4JXmlEventLayout"/> that is used to format log messages.
</summary> </summary>
<docgen category="Layout Options" order="10"/>
</member> </member>
<member name="M:NLog.Targets.ChainsawTarget.#ctor"> <member name="M:NLog.Targets.ChainsawTarget.#ctor">
<summary> <summary>
@ -11837,6 +12034,14 @@
Initializes a new instance of the <see cref="T:NLog.Targets.LogReceiverWebServiceTarget"/> class. Initializes a new instance of the <see cref="T:NLog.Targets.LogReceiverWebServiceTarget"/> class.
</summary> </summary>
</member> </member>
<member name="M:NLog.Targets.LogReceiverWebServiceTarget.OnSend(NLog.LogReceiverService.NLogEvents,System.Collections.Generic.IEnumerable{NLog.Common.AsyncLogEventInfo})">
<summary>
Called when log events are being sent (test hook).
</summary>
<param name="events">The events.</param>
<param name="asyncContinuations">The async continuations.</param>
<returns>True if events should be sent, false to stop processing them.</returns>
</member>
<member name="M:NLog.Targets.LogReceiverWebServiceTarget.Write(NLog.Common.AsyncLogEventInfo)"> <member name="M:NLog.Targets.LogReceiverWebServiceTarget.Write(NLog.Common.AsyncLogEventInfo)">
<summary> <summary>
Writes logging event to the log target. Must be overridden in inheriting Writes logging event to the log target. Must be overridden in inheriting
@ -11886,6 +12091,12 @@
<value>The parameters.</value> <value>The parameters.</value>
<docgen category='Payload Options' order='10' /> <docgen category='Payload Options' order='10' />
</member> </member>
<member name="P:NLog.Targets.LogReceiverWebServiceTarget.IncludeEventProperties">
<summary>
Gets or sets a value indicating whether to include per-event properties in the payload sent to the server.
</summary>
<docgen category='Payload Options' order='10' />
</member>
<member name="T:NLog.Targets.MailTarget"> <member name="T:NLog.Targets.MailTarget">
<summary> <summary>
Sends log messages by email using SMTP protocol. Sends log messages by email using SMTP protocol.
@ -12206,7 +12417,7 @@
Initializes a new instance of the <see cref="T:NLog.Targets.MethodCallTargetBase"/> class. Initializes a new instance of the <see cref="T:NLog.Targets.MethodCallTargetBase"/> class.
</summary> </summary>
</member> </member>
<member name="M:NLog.Targets.MethodCallTargetBase.Write(NLog.LogEventInfo)"> <member name="M:NLog.Targets.MethodCallTargetBase.Write(NLog.Common.AsyncLogEventInfo)">
<summary> <summary>
Prepares an array of parameters to be passed based on the logging event and calls DoInvoke(). Prepares an array of parameters to be passed based on the logging event and calls DoInvoke().
</summary> </summary>
@ -12214,6 +12425,13 @@
The logging event. The logging event.
</param> </param>
</member> </member>
<member name="M:NLog.Targets.MethodCallTargetBase.DoInvoke(System.Object[],NLog.Common.AsyncContinuation)">
<summary>
Calls the target method. Must be implemented in concrete classes.
</summary>
<param name="parameters">Method call parameters.</param>
<param name="continuation">The continuation.</param>
</member>
<member name="M:NLog.Targets.MethodCallTargetBase.DoInvoke(System.Object[])"> <member name="M:NLog.Targets.MethodCallTargetBase.DoInvoke(System.Object[])">
<summary> <summary>
Calls the target method. Must be implemented in concrete classes. Calls the target method. Must be implemented in concrete classes.
@ -12913,10 +13131,17 @@
</summary> </summary>
</member> </member>
<member name="M:NLog.Targets.WebServiceTarget.DoInvoke(System.Object[])"> <member name="M:NLog.Targets.WebServiceTarget.DoInvoke(System.Object[])">
<summary>
Calls the target method. Must be implemented in concrete classes.
</summary>
<param name="parameters">Method call parameters.</param>
</member>
<member name="M:NLog.Targets.WebServiceTarget.DoInvoke(System.Object[],NLog.Common.AsyncContinuation)">
<summary> <summary>
Invokes the web service method. Invokes the web service method.
</summary> </summary>
<param name="parameters">Parameters to be passed.</param> <param name="parameters">Parameters to be passed.</param>
<param name="continuation">The continuation.</param>
</member> </member>
<member name="P:NLog.Targets.WebServiceTarget.Url"> <member name="P:NLog.Targets.WebServiceTarget.Url">
<summary> <summary>
@ -12942,6 +13167,12 @@
</summary> </summary>
<docgen category='Web Service Options' order='10' /> <docgen category='Web Service Options' order='10' />
</member> </member>
<member name="P:NLog.Targets.WebServiceTarget.Encoding">
<summary>
Gets or sets the encoding.
</summary>
<docgen category='Web Service Options' order='10' />
</member>
<member name="T:NLog.Targets.Win32FileAttributes"> <member name="T:NLog.Targets.Win32FileAttributes">
<summary> <summary>
Win32 file attributes. Win32 file attributes.

@ -1,4 +1,5 @@
using AutoMoq; using AutoMoq;
using FluentAssertions;
using Moq; using Moq;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Providers.Core;
@ -13,52 +14,81 @@ namespace NzbDrone.Core.Test
public class ConfigProviderTest : TestBase public class ConfigProviderTest : TestBase
{ {
[Test] [Test]
public void Overwrite_existing_value() public void Add_new_value_to_database()
{ {
const string key = "MY_KEY"; const string key = "MY_KEY";
const string value = "MY_VALUE"; const string value = "MY_VALUE";
//Arrange var mocker = new AutoMoqer();
var config = new Config {Key = key, Value = value}; var db = MockLib.GetEmptyDatabase();
mocker.SetConstant(db);
//Act
mocker.Resolve<ConfigProvider>().SetValue(key, value);
//Assert
mocker.Resolve<ConfigProvider>().GetValue(key, "").Should().Be(value);
}
[Test]
public void Get_value_from_database()
{
const string key = "MY_KEY";
const string value = "MY_VALUE";
var mocker = new AutoMoqer(); var mocker = new AutoMoqer();
var db = MockLib.GetEmptyDatabase();
mocker.SetConstant(db);
mocker.GetMock<IRepository>() db.Insert(new Config { Key = key, Value = value });
.Setup(r => r.Single<Config>(key))
.Returns(config);
//Act //Act
mocker.Resolve<ConfigProvider>().SetValue(key, value); var result = mocker.Resolve<ConfigProvider>().GetValue(key, "");
//Assert //Assert
mocker.GetMock<IRepository>().Verify(c => c.Update(config)); result.Should().Be(value);
mocker.GetMock<IRepository>().Verify(c => c.Add(It.IsAny<Config>()), Times.Never());
} }
[Test] [Test]
public void Add_new_value() public void Get_value_should_return_default_when_no_value()
{ {
const string key = "MY_KEY"; const string key = "MY_KEY";
const string value = "MY_VALUE"; const string value = "MY_VALUE";
//Arrange
var mocker = new AutoMoqer(); var mocker = new AutoMoqer();
var db = MockLib.GetEmptyDatabase();
mocker.SetConstant(db);
mocker.GetMock<IRepository>()
.Setup(r => r.Single<Config>(It.IsAny<string>()))
.Returns<Config>(null)
.Verifiable();
//Act //Act
mocker.Resolve<ConfigProvider>().SetValue(key, value); var result = mocker.Resolve<ConfigProvider>().GetValue(key, value);
//Assert //Assert
mocker.GetMock<IRepository>().Verify(); result.Should().Be(value);
mocker.GetMock<IRepository>().Verify(r => r.Update(It.IsAny<Config>()), Times.Never()); }
mocker.GetMock<IRepository>().Verify(r => r.Add(It.Is<Config>(c => c.Key == key && c.Value == value)),
Times.Once());
Assert.Pass(); [Test]
public void New_value_should_update_old_value()
{
const string key = "MY_KEY";
const string originalValue = "OLD_VALUE";
const string newValue = "NEW_VALUE";
var mocker = new AutoMoqer();
var db = MockLib.GetEmptyDatabase();
mocker.SetConstant(db);
db.Insert(new Config { Key = key, Value = originalValue });
//Act
mocker.Resolve<ConfigProvider>().SetValue(key, newValue);
var result = mocker.Resolve<ConfigProvider>().GetValue(key, "");
//Assert
result.Should().Be(newValue);
db.Fetch<Config>().Should().HaveCount(1);
} }
} }
} }

@ -126,8 +126,6 @@ namespace NzbDrone.Core.Test.Framework
private static void ForceMigration(IRepository repository) private static void ForceMigration(IRepository repository)
{ {
repository.All<Series>().Count();
repository.All<Episode>().Count();
repository.All<EpisodeFile>().Count(); repository.All<EpisodeFile>().Count();
repository.All<QualityProfile>().Count(); repository.All<QualityProfile>().Count();
repository.All<History>().Count(); repository.All<History>().Count();

@ -53,6 +53,10 @@ namespace NzbDrone.Core.Datastore.Migrations
.WithNotNullableColumn("Size", DbType.Int64) .WithNotNullableColumn("Size", DbType.Int64)
.WithNotNullableColumn("DateAdded", DbType.DateTime) .WithNotNullableColumn("DateAdded", DbType.DateTime)
.WithNotNullableColumn("SeasonNumber", DbType.Int16); .WithNotNullableColumn("SeasonNumber", DbType.Int16);
db.CreateTable("Config")
.WithNotNullableColumn("Key", DbType.String).Unique()
.WithNotNullableColumn("Value", DbType.String);
} }
} }
} }

@ -133,8 +133,9 @@
<Reference Include="MigSharp"> <Reference Include="MigSharp">
<HintPath>..\Libraries\MigSharp.dll</HintPath> <HintPath>..\Libraries\MigSharp.dll</HintPath>
</Reference> </Reference>
<Reference Include="MvcMiniProfiler"> <Reference Include="MvcMiniProfiler, Version=2.1.4183.14740, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MiniProfiler.1.2\lib\MvcMiniProfiler.dll</HintPath> <SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\MiniProfiler.1.3\lib\MvcMiniProfiler.dll</HintPath>
</Reference> </Reference>
<Reference Include="Ninject, Version=2.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL"> <Reference Include="Ninject, Version=2.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL">
<HintPath>..\packages\Ninject.2.2.1.4\lib\net40-Full\Ninject.dll</HintPath> <HintPath>..\packages\Ninject.2.2.1.4\lib\net40-Full\Ninject.dll</HintPath>

@ -5,6 +5,7 @@ using Ninject;
using NLog; using NLog;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
using NzbDrone.Core.Repository; using NzbDrone.Core.Repository;
using PetaPoco;
using SubSonic.Repository; using SubSonic.Repository;
namespace NzbDrone.Core.Providers.Core namespace NzbDrone.Core.Providers.Core
@ -12,17 +13,18 @@ namespace NzbDrone.Core.Providers.Core
public class ConfigProvider public class ConfigProvider
{ {
private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private readonly IRepository _repository; private readonly IDatabase _database;
[Inject] [Inject]
public ConfigProvider(IRepository repository) public ConfigProvider(IDatabase database)
{ {
_repository = repository; _database = database;
} }
public IList<Config> All() public IList<Config> All()
{ {
return _repository.All<Config>().ToList(); return _database.Fetch<Config>();
} }
public ConfigProvider() public ConfigProvider()
@ -129,7 +131,7 @@ namespace NzbDrone.Core.Providers.Core
public virtual String SabHost public virtual String SabHost
{ {
get { return GetValue("SabHost", "localhost", true); } get { return GetValue("SabHost", "localhost"); }
set { SetValue("SabHost", value); } set { SetValue("SabHost", value); }
} }
@ -164,7 +166,7 @@ namespace NzbDrone.Core.Providers.Core
public virtual String SabTvCategory public virtual String SabTvCategory
{ {
get { return GetValue("SabTvCategory", "TV", false); } get { return GetValue("SabTvCategory", "TV"); }
set { SetValue("SabTvCategory", value); } set { SetValue("SabTvCategory", value); }
} }
@ -178,7 +180,7 @@ namespace NzbDrone.Core.Providers.Core
public virtual String SabDropDirectory public virtual String SabDropDirectory
{ {
get { return GetValue("SabTvDropDirectory", "", false); } get { return GetValue("SabTvDropDirectory"); }
set { SetValue("SabTvDropDirectory", value); } set { SetValue("SabTvDropDirectory", value); }
} }
@ -230,7 +232,7 @@ namespace NzbDrone.Core.Providers.Core
public virtual string SeasonFolderFormat public virtual string SeasonFolderFormat
{ {
get { return GetValue("Sorting_SeasonFolderFormat", "Season %s", false); } get { return GetValue("Sorting_SeasonFolderFormat", "Season %s"); }
set { SetValue("Sorting_SeasonFolderFormat", value); } set { SetValue("Sorting_SeasonFolderFormat", value); }
} }
@ -261,31 +263,29 @@ namespace NzbDrone.Core.Providers.Core
private string GetValue(string key) private string GetValue(string key)
{ {
return GetValue(key, String.Empty, false); return GetValue(key, String.Empty);
} }
private bool GetValueBoolean(string key, bool defaultValue = false) private bool GetValueBoolean(string key, bool defaultValue = false)
{ {
return Convert.ToBoolean(GetValue(key, defaultValue, false)); return Convert.ToBoolean(GetValue(key, defaultValue));
} }
private int GetValueInt(string key, int defaultValue = 0) private int GetValueInt(string key, int defaultValue = 0)
{ {
return Convert.ToInt16(GetValue(key, defaultValue, false)); return Convert.ToInt16(GetValue(key, defaultValue));
} }
public virtual string GetValue(string key, object defaultValue, bool makePermanent) public virtual string GetValue(string key, object defaultValue)
{ {
string value; string value;
var dbValue = _repository.Single<Config>(key); var dbValue = _database.SingleOrDefault<Config>(key);
if (dbValue != null && !String.IsNullOrEmpty(dbValue.Value)) if (dbValue != null && !String.IsNullOrEmpty(dbValue.Value))
return dbValue.Value; return dbValue.Value;
Logger.Debug("Unable to find config key '{0}' defaultValue:'{1}'", key, defaultValue); Logger.Debug("Unable to find config key '{0}' defaultValue:'{1}'", key, defaultValue);
if (makePermanent)
SetValue(key, defaultValue.ToString());
value = defaultValue.ToString(); value = defaultValue.ToString();
return value; return value;
@ -310,20 +310,16 @@ namespace NzbDrone.Core.Providers.Core
Logger.Debug("Writing Setting to file. Key:'{0}' Value:'{1}'", key, value); Logger.Debug("Writing Setting to file. Key:'{0}' Value:'{1}'", key, value);
var dbValue = _repository.Single<Config>(key); var dbValue = _database.SingleOrDefault<Config>("WHERE KEY=@0", key);
if (dbValue == null) if (dbValue == null)
{ {
_repository.Add(new Config _database.Insert(new Config { Key = key, Value = value });
{
Key = key,
Value = value
});
} }
else else
{ {
dbValue.Value = value; dbValue.Value = value;
_repository.Update(dbValue); _database.Update(dbValue);
} }
} }
} }

@ -23,9 +23,9 @@ namespace NzbDrone.Core.Providers.ExternalNotification
{ {
const string header = "NzbDrone [TV] - Grabbed"; const string header = "NzbDrone [TV] - Grabbed";
if (Convert.ToBoolean(_configProvider.GetValue("XbmcEnabled", false, true))) if (Convert.ToBoolean(_configProvider.GetValue("XbmcEnabled", false)))
{ {
if (Convert.ToBoolean(_configProvider.GetValue("XbmcNotifyOnGrab", false, true))) if (Convert.ToBoolean(_configProvider.GetValue("XbmcNotifyOnGrab", false)))
{ {
_logger.Trace("Sending Notification to XBMC"); _logger.Trace("Sending Notification to XBMC");
_xbmcProvider.Notify(header, message); _xbmcProvider.Notify(header, message);
@ -41,21 +41,21 @@ namespace NzbDrone.Core.Providers.ExternalNotification
{ {
const string header = "NzbDrone [TV] - Downloaded"; const string header = "NzbDrone [TV] - Downloaded";
if (Convert.ToBoolean(_configProvider.GetValue("XbmcEnabled", false, true))) if (Convert.ToBoolean(_configProvider.GetValue("XbmcEnabled", false)))
{ {
if (Convert.ToBoolean(_configProvider.GetValue("XbmcNotifyOnDownload", false, true))) if (Convert.ToBoolean(_configProvider.GetValue("XbmcNotifyOnDownload", false)))
{ {
_logger.Trace("Sending Notification to XBMC"); _logger.Trace("Sending Notification to XBMC");
_xbmcProvider.Notify(header, message); _xbmcProvider.Notify(header, message);
} }
if (Convert.ToBoolean(_configProvider.GetValue("XbmcUpdateOnDownload", false, true))) if (Convert.ToBoolean(_configProvider.GetValue("XbmcUpdateOnDownload", false)))
{ {
_logger.Trace("Sending Update Request to XBMC"); _logger.Trace("Sending Update Request to XBMC");
_xbmcProvider.Update(seriesId); _xbmcProvider.Update(seriesId);
} }
if (Convert.ToBoolean(_configProvider.GetValue("XbmcCleanOnDownload", false, true))) if (Convert.ToBoolean(_configProvider.GetValue("XbmcCleanOnDownload", false)))
{ {
_logger.Trace("Sending Clean DB Request to XBMC"); _logger.Trace("Sending Clean DB Request to XBMC");
_xbmcProvider.Clean(); _xbmcProvider.Clean();
@ -69,19 +69,19 @@ namespace NzbDrone.Core.Providers.ExternalNotification
{ {
const string header = "NzbDrone [TV] - Renamed"; const string header = "NzbDrone [TV] - Renamed";
if (Convert.ToBoolean(_configProvider.GetValue("XbmcNotifyOnRename", false, true))) if (Convert.ToBoolean(_configProvider.GetValue("XbmcNotifyOnRename", false)))
{ {
_logger.Trace("Sending Notification to XBMC"); _logger.Trace("Sending Notification to XBMC");
_xbmcProvider.Notify(header, message); _xbmcProvider.Notify(header, message);
} }
if (Convert.ToBoolean(_configProvider.GetValue("XbmcUpdateOnRename", false, true))) if (Convert.ToBoolean(_configProvider.GetValue("XbmcUpdateOnRename", false)))
{ {
_logger.Trace("Sending Update Request to XBMC"); _logger.Trace("Sending Update Request to XBMC");
_xbmcProvider.Update(seriesId); _xbmcProvider.Update(seriesId);
} }
if (Convert.ToBoolean(_configProvider.GetValue("XbmcCleanOnRename", false, true))) if (Convert.ToBoolean(_configProvider.GetValue("XbmcCleanOnRename", false)))
{ {
_logger.Trace("Sending Clean DB Request to XBMC"); _logger.Trace("Sending Clean DB Request to XBMC");
_xbmcProvider.Clean(); _xbmcProvider.Clean();

@ -1,8 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using MvcMiniProfiler;
using Ninject; using Ninject;
using NLog; using NLog;
using NzbDrone.Core.Helpers; using NzbDrone.Core.Helpers;
@ -206,15 +205,12 @@ namespace NzbDrone.Core.Providers
public virtual Tuple<int, int> GetEpisodeFilesCount(int seriesId) public virtual Tuple<int, int> GetEpisodeFilesCount(int seriesId)
{ {
using (MiniProfiler.Current.Step("GetEpisodeFilesCount:" + seriesId)) var allEpisodes = _episodeProvider.GetEpisodeBySeries(seriesId).ToList();
{
var allEpisodes = _episodeProvider.GetEpisodeBySeries(seriesId);
var episodeTotal = allEpisodes.Where(e => !e.Ignored && e.AirDate <= DateTime.Today && e.AirDate.Year > 1900).ToList(); var episodeTotal = allEpisodes.Where(e => !e.Ignored && e.AirDate <= DateTime.Today && e.AirDate.Year > 1900).ToList();
var avilableEpisodes = episodeTotal.Where(e => e.EpisodeFileId > 0).ToList(); var avilableEpisodes = episodeTotal.Where(e => e.EpisodeFileId > 0).ToList();
return new Tuple<int, int>(avilableEpisodes.Count, episodeTotal.Count); return new Tuple<int, int>(avilableEpisodes.Count, episodeTotal.Count);
}
} }
private List<string> GetMediaFileList(string path) private List<string> GetMediaFileList(string path)

@ -3,14 +3,10 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using Ninject;
using NLog; using NLog;
using NzbDrone.Core.Helpers;
using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Repository; using NzbDrone.Core.Repository;
using NzbDrone.Core.Repository.Quality;
using PetaPoco; using PetaPoco;
using SubSonic.Repository;
using TvdbLib.Data; using TvdbLib.Data;
namespace NzbDrone.Core.Providers namespace NzbDrone.Core.Providers
@ -18,22 +14,19 @@ namespace NzbDrone.Core.Providers
public class SeriesProvider public class SeriesProvider
{ {
private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private readonly IRepository _repository;
private readonly ConfigProvider _configProvider; private readonly ConfigProvider _configProvider;
private readonly TvDbProvider _tvDbProvider; private readonly TvDbProvider _tvDbProvider;
private readonly IDatabase _database; private readonly IDatabase _database;
private readonly QualityProvider _qualityProvider; private readonly QualityProvider _qualityProvider;
private readonly SceneNameMappingProvider _sceneNameMappingProvider; private readonly SceneNameMappingProvider _sceneNameMappingProvider;
private static readonly Regex TimeRegex = new Regex(@"^(?<time>\d+:?\d*)\W*(?<meridiem>am|pm)?", RegexOptions.IgnoreCase | RegexOptions.Compiled);
[Inject] public SeriesProvider(IDatabase database, ConfigProvider configProviderProvider, QualityProvider qualityProvider,
public SeriesProvider(ConfigProvider configProviderProvider, IRepository repository, TvDbProvider tvDbProviderProvider, SceneNameMappingProvider sceneNameMappingProvider)
TvDbProvider tvDbProviderProvider, IDatabase database,
QualityProvider qualityProvider, SceneNameMappingProvider sceneNameMappingProvider)
{ {
_database = database;
_configProvider = configProviderProvider; _configProvider = configProviderProvider;
_repository = repository;
_tvDbProvider = tvDbProviderProvider; _tvDbProvider = tvDbProviderProvider;
_database = database;
_qualityProvider = qualityProvider; _qualityProvider = qualityProvider;
_sceneNameMappingProvider = sceneNameMappingProvider; _sceneNameMappingProvider = sceneNameMappingProvider;
} }
@ -104,7 +97,7 @@ namespace NzbDrone.Core.Providers
repoSeries.Monitored = true; //New shows should be monitored repoSeries.Monitored = true; //New shows should be monitored
repoSeries.QualityProfileId = qualityProfileId; repoSeries.QualityProfileId = qualityProfileId;
if (qualityProfileId == 0) if (qualityProfileId == 0)
repoSeries.QualityProfileId = Convert.ToInt32(_configProvider.GetValue("DefaultQualityProfile", "1", true)); repoSeries.QualityProfileId = Convert.ToInt32(_configProvider.GetValue("DefaultQualityProfile", "1"));
repoSeries.SeasonFolder = _configProvider.UseSeasonFolder; repoSeries.SeasonFolder = _configProvider.UseSeasonFolder;
@ -131,30 +124,29 @@ namespace NzbDrone.Core.Providers
public virtual void DeleteSeries(int seriesId) public virtual void DeleteSeries(int seriesId)
{ {
Logger.Warn("Deleting Series [{0}]", seriesId); var series = GetSeries(seriesId);
var series = _repository.Single<Series>(seriesId); Logger.Warn("Deleting Series [{0}]", series.Title);
//Delete Files, Episodes, Seasons then the Series using (var tran = _database.GetTransaction())
//Can't use providers because episode provider needs series provider - Cyclic Dependency Injection, this will work {
//Delete History, Files, Episodes, Seasons then the Series
//Delete History Items for any episodes that belong to this series Logger.Debug("Deleting History Items from DB for Series: {0}", series.Title);
Logger.Debug("Deleting History Items from DB for Series: {0}", series.SeriesId); _database.Delete<History>("WHERE SeriesId=@0", seriesId);
var episodes = series.Episodes.Select(e => e.EpisodeId).ToList();
episodes.ForEach(e => _repository.DeleteMany<History>(h => h.EpisodeId == e));
//Delete all episode files from the DB for episodes in this series Logger.Debug("Deleting EpisodeFiles from DB for Series: {0}", series.Title);
Logger.Debug("Deleting EpisodeFiles from DB for Series: {0}", series.SeriesId); _database.Delete<EpisodeFile>("WHERE SeriesId=@0", seriesId);
_repository.DeleteMany(series.EpisodeFiles);
//Delete all episodes for this series from the DB Logger.Debug("Deleting Episodes from DB for Series: {0}", series.Title);
Logger.Debug("Deleting Episodes from DB for Series: {0}", series.SeriesId); _database.Delete<Episode>("WHERE SeriesId=@0", seriesId);
_repository.DeleteMany(series.Episodes);
//Delete the Series Logger.Debug("Deleting Series from DB {0}", series.Title);
Logger.Debug("Deleting Series from DB {0}", series.Title); _database.Delete<Series>("WHERE SeriesId=@0", seriesId);
_repository.Delete<Series>(seriesId);
Logger.Info("Successfully deleted Series [{0}]", seriesId); Logger.Info("Successfully deleted Series [{0}]", series.Title);
tran.Complete();
}
} }
public virtual bool SeriesPathExists(string cleanPath) public virtual bool SeriesPathExists(string cleanPath)
@ -168,13 +160,11 @@ namespace NzbDrone.Core.Providers
/// <summary> /// <summary>
/// Cleans up the AirsTime Component from TheTVDB since it can be garbage that comes in. /// Cleans up the AirsTime Component from TheTVDB since it can be garbage that comes in.
/// </summary> /// </summary>
/// <param name = "input">The TVDB AirsTime</param> /// <param name = "rawTime">The TVDB AirsTime</param>
/// <returns>String that contains the AirTimes</returns> /// <returns>String that contains the AirTimes</returns>
private string CleanAirsTime(string inputTime) private static string CleanAirsTime(string rawTime)
{ {
Regex timeRegex = new Regex(@"^(?<time>\d+:?\d*)\W*(?<meridiem>am|pm)?", RegexOptions.IgnoreCase | RegexOptions.Compiled); var match = TimeRegex.Match(rawTime);
var match = timeRegex.Match(inputTime);
var time = match.Groups["time"].Value; var time = match.Groups["time"].Value;
var meridiem = match.Groups["meridiem"].Value; var meridiem = match.Groups["meridiem"].Value;

@ -25,10 +25,10 @@ namespace NzbDrone.Core.Providers
public virtual void Notify(string header, string message) public virtual void Notify(string header, string message)
{ {
//Get time in seconds and convert to ms //Get time in seconds and convert to ms
var time = Convert.ToInt32(_configProvider.GetValue("XbmcDisplayTime", "3", true)) * 1000; var time = Convert.ToInt32(_configProvider.GetValue("XbmcDisplayTime", "3")) * 1000;
var command = String.Format("ExecBuiltIn(Notification({0},{1},{2}))", header, message, time); var command = String.Format("ExecBuiltIn(Notification({0},{1},{2}))", header, message, time);
if (Convert.ToBoolean(_configProvider.GetValue("XbmcNotificationImage", false, true))) if (Convert.ToBoolean(_configProvider.GetValue("XbmcNotificationImage", false)))
{ {
//Todo: Get the actual port that NzbDrone is running on... //Todo: Get the actual port that NzbDrone is running on...
var serverInfo = String.Format("http://{0}:{1}", Environment.MachineName, "8989"); var serverInfo = String.Format("http://{0}:{1}", Environment.MachineName, "8989");
@ -37,7 +37,7 @@ namespace NzbDrone.Core.Providers
command = String.Format("ExecBuiltIn(Notification({0},{1},{2}, {3}))", header, message, time, imageUrl); command = String.Format("ExecBuiltIn(Notification({0},{1},{2}, {3}))", header, message, time, imageUrl);
} }
foreach (var host in _configProvider.GetValue("XbmcHosts", "localhost:80", true).Split(',')) foreach (var host in _configProvider.GetValue("XbmcHosts", "localhost:80").Split(','))
{ {
Logger.Trace("Sending Notifcation to XBMC Host: {0}", host); Logger.Trace("Sending Notifcation to XBMC Host: {0}", host);
SendCommand(host, command); SendCommand(host, command);
@ -46,14 +46,14 @@ namespace NzbDrone.Core.Providers
public virtual void Update(int seriesId) public virtual void Update(int seriesId)
{ {
foreach (var host in _configProvider.GetValue("XbmcHosts", "localhost:80", true).Split(',')) foreach (var host in _configProvider.GetValue("XbmcHosts", "localhost:80").Split(','))
{ {
Logger.Trace("Sending Update DB Request to XBMC Host: {0}", host); Logger.Trace("Sending Update DB Request to XBMC Host: {0}", host);
var xbmcSeriesPath = GetXbmcSeriesPath(host, seriesId); var xbmcSeriesPath = GetXbmcSeriesPath(host, seriesId);
//If the path is not found & the user wants to update the entire library, do it now. //If the path is not found & the user wants to update the entire library, do it now.
if (String.IsNullOrEmpty(xbmcSeriesPath) && if (String.IsNullOrEmpty(xbmcSeriesPath) &&
Convert.ToBoolean(_configProvider.GetValue("XbmcFullUpdate", false, true))) Convert.ToBoolean(_configProvider.GetValue("XbmcFullUpdate", false)))
{ {
//Update the entire library //Update the entire library
Logger.Trace("Series [{0}] doesn't exist on XBMC host: {1}, Updating Entire Library", seriesId, host); Logger.Trace("Series [{0}] doesn't exist on XBMC host: {1}, Updating Entire Library", seriesId, host);
@ -68,7 +68,7 @@ namespace NzbDrone.Core.Providers
public virtual void Clean() public virtual void Clean()
{ {
foreach (var host in _configProvider.GetValue("XbmcHosts", "localhost:80", true).Split(',')) foreach (var host in _configProvider.GetValue("XbmcHosts", "localhost:80").Split(','))
{ {
Logger.Trace("Sending DB Clean Request to XBMC Host: {0}", host); Logger.Trace("Sending DB Clean Request to XBMC Host: {0}", host);
var command = String.Format("ExecBuiltIn(CleanLibrary(video))"); var command = String.Format("ExecBuiltIn(CleanLibrary(video))");
@ -78,8 +78,8 @@ namespace NzbDrone.Core.Providers
private string SendCommand(string host, string command) private string SendCommand(string host, string command)
{ {
var username = _configProvider.GetValue("XbmcUsername", String.Empty, true); var username = _configProvider.GetValue("XbmcUsername", String.Empty);
var password = _configProvider.GetValue("XbmcPassword", String.Empty, true); var password = _configProvider.GetValue("XbmcPassword", String.Empty);
var url = String.Format("http://{0}/xbmcCmds/xbmcHttp?command={1}", host, command); var url = String.Format("http://{0}/xbmcCmds/xbmcHttp?command={1}", host, command);
if (!String.IsNullOrEmpty(username)) if (!String.IsNullOrEmpty(username))

@ -1,11 +1,11 @@
using SubSonic.SqlGeneration.Schema; using PetaPoco;
using SubSonic.SqlGeneration.Schema;
namespace NzbDrone.Core.Repository namespace NzbDrone.Core.Repository
{ {
[SubSonicTableNameOverride("Config")] [PrimaryKey("Key", autoIncrement = false)]
public class Config public class Config
{ {
[SubSonicPrimaryKey]
public string Key { get; set; } public string Key { get; set; }
public string Value { get; set; } public string Value { get; set; }

@ -7,6 +7,7 @@ using SubSonic.SqlGeneration.Schema;
namespace NzbDrone.Core.Repository namespace NzbDrone.Core.Repository
{ {
[PrimaryKey("SeriesId", autoIncrement = false)]
public class Series public class Series
{ {
[SubSonicPrimaryKey(false)] [SubSonicPrimaryKey(false)]

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Ninject" version="2.2.1.4" /> <package id="Ninject" version="2.2.1.4" />
<package id="MiniProfiler" version="1.2" /> <package id="MiniProfiler" version="1.3" />
</packages> </packages>

@ -148,20 +148,20 @@ namespace NzbDrone.Web.Controllers
var model = new NotificationSettingsModel var model = new NotificationSettingsModel
{ {
XbmcEnabled = Convert.ToBoolean(_configProvider.GetValue("XbmcEnabled", false, true)), XbmcEnabled = Convert.ToBoolean(_configProvider.GetValue("XbmcEnabled", false)),
XbmcNotifyOnGrab = Convert.ToBoolean(_configProvider.GetValue("XbmcNotifyOnGrab", false, true)), XbmcNotifyOnGrab = Convert.ToBoolean(_configProvider.GetValue("XbmcNotifyOnGrab", false)),
XbmcNotifyOnDownload = Convert.ToBoolean(_configProvider.GetValue("XbmcNotifyOnDownload", false, true)), XbmcNotifyOnDownload = Convert.ToBoolean(_configProvider.GetValue("XbmcNotifyOnDownload", false)),
XbmcNotifyOnRename = Convert.ToBoolean(_configProvider.GetValue("XbmcNotifyOnRename", false, true)), XbmcNotifyOnRename = Convert.ToBoolean(_configProvider.GetValue("XbmcNotifyOnRename", false)),
XbmcNotificationImage = Convert.ToBoolean(_configProvider.GetValue("XbmcNotificationImage", false, true)), XbmcNotificationImage = Convert.ToBoolean(_configProvider.GetValue("XbmcNotificationImage", false)),
XbmcDisplayTime = Convert.ToInt32(_configProvider.GetValue("XbmcDisplayTime", 3, true)), XbmcDisplayTime = Convert.ToInt32(_configProvider.GetValue("XbmcDisplayTime", 3)),
XbmcUpdateOnDownload = Convert.ToBoolean(_configProvider.GetValue("XbmcUpdateOnDownload ", false, true)), XbmcUpdateOnDownload = Convert.ToBoolean(_configProvider.GetValue("XbmcUpdateOnDownload ", false)),
XbmcUpdateOnRename = Convert.ToBoolean(_configProvider.GetValue("XbmcUpdateOnRename", false, true)), XbmcUpdateOnRename = Convert.ToBoolean(_configProvider.GetValue("XbmcUpdateOnRename", false)),
XbmcFullUpdate = Convert.ToBoolean(_configProvider.GetValue("XbmcFullUpdate", false, true)), XbmcFullUpdate = Convert.ToBoolean(_configProvider.GetValue("XbmcFullUpdate", false)),
XbmcCleanOnDownload = Convert.ToBoolean(_configProvider.GetValue("XbmcCleanOnDownload", false, true)), XbmcCleanOnDownload = Convert.ToBoolean(_configProvider.GetValue("XbmcCleanOnDownload", false)),
XbmcCleanOnRename = Convert.ToBoolean(_configProvider.GetValue("XbmcCleanOnRename", false, true)), XbmcCleanOnRename = Convert.ToBoolean(_configProvider.GetValue("XbmcCleanOnRename", false)),
XbmcHosts = _configProvider.GetValue("XbmcHosts", "localhost:80", true), XbmcHosts = _configProvider.GetValue("XbmcHosts", "localhost:80"),
XbmcUsername = _configProvider.GetValue("XbmcUsername", String.Empty, true), XbmcUsername = _configProvider.GetValue("XbmcUsername", String.Empty),
XbmcPassword = _configProvider.GetValue("XbmcPassword", String.Empty, true) XbmcPassword = _configProvider.GetValue("XbmcPassword", String.Empty)
}; };
return View("Index", model); return View("Index", model);
@ -240,7 +240,7 @@ namespace NzbDrone.Web.Controllers
{ {
var profiles = _qualityProvider.GetAllProfiles().ToList(); var profiles = _qualityProvider.GetAllProfiles().ToList();
var defaultQualityQualityProfileId = var defaultQualityQualityProfileId =
Convert.ToInt32(_configProvider.GetValue("DefaultQualityProfile", profiles[0].QualityProfileId, true)); Convert.ToInt32(_configProvider.GetValue("DefaultQualityProfile", profiles[0].QualityProfileId));
var selectList = new SelectList(profiles, "QualityProfileId", "Name"); var selectList = new SelectList(profiles, "QualityProfileId", "Name");
return new QualityModel { DefaultQualityProfileId = defaultQualityQualityProfileId, QualityProfileSelectList = selectList }; return new QualityModel { DefaultQualityProfileId = defaultQualityQualityProfileId, QualityProfileSelectList = selectList };

@ -57,8 +57,9 @@
<HintPath>..\Libraries\MVC3\Microsoft.Web.Infrastructure.dll</HintPath> <HintPath>..\Libraries\MVC3\Microsoft.Web.Infrastructure.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="MvcMiniProfiler"> <Reference Include="MvcMiniProfiler, Version=2.1.4183.14740, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MiniProfiler.1.2\lib\MvcMiniProfiler.dll</HintPath> <SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\MiniProfiler.1.3\lib\MvcMiniProfiler.dll</HintPath>
</Reference> </Reference>
<Reference Include="Ninject, Version=2.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL"> <Reference Include="Ninject, Version=2.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL">
<HintPath>..\packages\Ninject.2.2.1.4\lib\net40-Full\Ninject.dll</HintPath> <HintPath>..\packages\Ninject.2.2.1.4\lib\net40-Full\Ninject.dll</HintPath>

@ -9,5 +9,5 @@
<package id="jQuery.vsdoc" version="1.6" /> <package id="jQuery.vsdoc" version="1.6" />
<package id="jQuery.Validation" version="1.8.0.1" /> <package id="jQuery.Validation" version="1.8.0.1" />
<package id="jQuery" version="1.6.1" /> <package id="jQuery" version="1.6.1" />
<package id="MiniProfiler" version="1.2" /> <package id="MiniProfiler" version="1.3" />
</packages> </packages>

@ -116,6 +116,11 @@
Gets the ellapsed milliseconds in this step without any children's durations. Gets the ellapsed milliseconds in this step without any children's durations.
</summary> </summary>
</member> </member>
<member name="P:MvcMiniProfiler.Timing.SqlTimingsDurationMilliseconds">
<summary>
Gets the aggregate ellapsed milliseconds of all SqlTimings executed in this Timing, excluding Children Timings.
</summary>
</member>
<member name="P:MvcMiniProfiler.Timing.IsTrivial"> <member name="P:MvcMiniProfiler.Timing.IsTrivial">
<summary> <summary>
Returns true when this <see cref="P:MvcMiniProfiler.Timing.DurationWithoutChildrenMilliseconds"/> is less than the configured Returns true when this <see cref="P:MvcMiniProfiler.Timing.DurationWithoutChildrenMilliseconds"/> is less than the configured
@ -132,6 +137,11 @@
Returns true if this Timing step collected sql execution timings. Returns true if this Timing step collected sql execution timings.
</summary> </summary>
</member> </member>
<member name="P:MvcMiniProfiler.Timing.HasDuplicateSqlTimings">
<summary>
Returns true if any <see cref="T:MvcMiniProfiler.SqlTiming"/>s executed in this step are detected as duplicate statements.
</summary>
</member>
<member name="P:MvcMiniProfiler.Timing.IsRoot"> <member name="P:MvcMiniProfiler.Timing.IsRoot">
<summary> <summary>
Returns true when this Timing is the first one created in a MiniProfiler session. Returns true when this Timing is the first one created in a MiniProfiler session.
@ -142,6 +152,21 @@
How far away this Timing is from the Profiler's Root. How far away this Timing is from the Profiler's Root.
</summary> </summary>
</member> </member>
<member name="P:MvcMiniProfiler.Timing.ExecutedReaders">
<summary>
How many sql data readers were executed in this Timing step.
</summary>
</member>
<member name="P:MvcMiniProfiler.Timing.ExecutedScalars">
<summary>
How many sql scalar queries were executed in this Timing step.
</summary>
</member>
<member name="P:MvcMiniProfiler.Timing.ExecutedNonQueries">
<summary>
How many sql non-query statements were executed in this Timing step.
</summary>
</member>
<member name="P:MvcMiniProfiler.Data.ProfiledDbCommand.BindByName"> <member name="P:MvcMiniProfiler.Data.ProfiledDbCommand.BindByName">
<summary> <summary>
If the underlying command supports BindByName, this sets/clears the underlying If the underlying command supports BindByName, this sets/clears the underlying
@ -201,6 +226,11 @@
Called when database reader is closed, ending profiling for <see cref="F:MvcMiniProfiler.ExecuteType.Reader"/> SqlTimings. Called when database reader is closed, ending profiling for <see cref="F:MvcMiniProfiler.ExecuteType.Reader"/> SqlTimings.
</summary> </summary>
</member> </member>
<member name="M:MvcMiniProfiler.SqlTiming.AddSpacesToParameters(System.String)">
<summary>
To help with display, put some space around sammiched commas
</summary>
</member>
<member name="P:MvcMiniProfiler.SqlTiming.ExecuteType"> <member name="P:MvcMiniProfiler.SqlTiming.ExecuteType">
<summary> <summary>
Category of sql statement executed. Category of sql statement executed.
@ -232,6 +262,11 @@
before all records are fetched and reader is closed. before all records are fetched and reader is closed.
</summary> </summary>
</member> </member>
<member name="P:MvcMiniProfiler.SqlTiming.IsDuplicate">
<summary>
True when other identical sql statements have been executed during this MiniProfiler session.
</summary>
</member>
<member name="T:MvcMiniProfiler.Helpers.StackTraceSnippet"> <member name="T:MvcMiniProfiler.Helpers.StackTraceSnippet">
<summary> <summary>
Gets part of a stack trace containing only methods we care about. Gets part of a stack trace containing only methods we care about.
@ -254,6 +289,11 @@
their starting time. their starting time.
</summary> </summary>
</member> </member>
<member name="F:MvcMiniProfiler.MiniProfiler._sqlCounts">
<summary>
</summary>
</member>
<member name="M:MvcMiniProfiler.MiniProfiler.#ctor(System.String,MvcMiniProfiler.ProfileLevel)"> <member name="M:MvcMiniProfiler.MiniProfiler.#ctor(System.String,MvcMiniProfiler.ProfileLevel)">
<summary> <summary>
Creates and starts a new MiniProfiler for the root <paramref name="url"/>, filtering <see cref="T:MvcMiniProfiler.Timing"/> steps to <paramref name="level"/>. Creates and starts a new MiniProfiler for the root <paramref name="url"/>, filtering <see cref="T:MvcMiniProfiler.Timing"/> steps to <paramref name="level"/>.
@ -294,12 +334,38 @@
be prematurely stopped and discarded. Useful for when a specific route does not need to be profiled. be prematurely stopped and discarded. Useful for when a specific route does not need to be profiled.
</param> </param>
</member> </member>
<member name="M:MvcMiniProfiler.MiniProfiler.RenderIncludes"> <member name="M:MvcMiniProfiler.MiniProfiler.StepStatic(System.String,MvcMiniProfiler.ProfileLevel)">
<summary>
Returns an <see cref="T:System.IDisposable"/> that will time the code between its creation and disposal. Use this method when you
do not wish to include the MvcMiniProfiler namespace for the <see cref="M:MvcMiniProfiler.MiniProfilerExtensions.Step(MvcMiniProfiler.MiniProfiler,System.String,MvcMiniProfiler.ProfileLevel)"/> extension method.
</summary>
<param name="name">A descriptive name for the code that is encapsulated by the resulting IDisposable's lifetime.</param>
<param name="level">This step's visibility level; allows filtering when <see cref="M:MvcMiniProfiler.MiniProfiler.Start(MvcMiniProfiler.ProfileLevel)"/> is called.</param>
</member>
<member name="M:MvcMiniProfiler.MiniProfiler.RenderIncludes(System.Nullable{MvcMiniProfiler.RenderPosition},System.Boolean,System.Boolean)">
<summary> <summary>
Returns the css and javascript includes needed to display the MiniProfiler results UI. Returns the css and javascript includes needed to display the MiniProfiler results UI.
</summary> </summary>
<param name="position">Which side of the page the profiler popup button should be displayed on (defaults to left)</param>
<param name="showTrivial">Whether to show trivial timings by default (defaults to false)</param>
<param name="showTimeWithChildren">Whether to show time the time with children column by default (defaults to false)</param>
<returns>Script and link elements normally; an empty string when there is no active profiling session.</returns> <returns>Script and link elements normally; an empty string when there is no active profiling session.</returns>
</member> </member>
<member name="M:MvcMiniProfiler.MiniProfiler.ToJson">
<summary>
Renders the current <see cref="T:MvcMiniProfiler.MiniProfiler"/> to json.
</summary>
</member>
<member name="M:MvcMiniProfiler.MiniProfiler.ToJson(MvcMiniProfiler.MiniProfiler)">
<summary>
Renders the parameter <see cref="T:MvcMiniProfiler.MiniProfiler"/> to json.
</summary>
</member>
<member name="M:MvcMiniProfiler.MiniProfiler.FromJson(System.String)">
<summary>
Deserializes the json string parameter to a <see cref="T:MvcMiniProfiler.MiniProfiler"/>.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.Id"> <member name="P:MvcMiniProfiler.MiniProfiler.Id">
<summary> <summary>
Identifies this Profiler so it may be stored/cached. Identifies this Profiler so it may be stored/cached.
@ -352,6 +418,26 @@
Returns true when we have profiled queries. Returns true when we have profiled queries.
</summary> </summary>
</member> </member>
<member name="P:MvcMiniProfiler.MiniProfiler.HasDuplicateSqlTimings">
<summary>
Returns true when any child Timings have duplicate queries.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.HasTrivialTimings">
<summary>
Returns true when <see cref="P:MvcMiniProfiler.MiniProfiler.Root"/> or any of its <see cref="P:MvcMiniProfiler.Timing.Children"/> are <see cref="P:MvcMiniProfiler.Timing.IsTrivial"/>.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.HasAllTrivialTimings">
<summary>
Returns true when all child <see cref="T:MvcMiniProfiler.Timing"/>s are <see cref="P:MvcMiniProfiler.Timing.IsTrivial"/>.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.TrivialDurationThresholdMilliseconds">
<summary>
Any Timing step with a duration less than or equal to this will be hidden by default in the UI; defaults to 2.0 ms.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.ElapsedTicks"> <member name="P:MvcMiniProfiler.MiniProfiler.ElapsedTicks">
<summary> <summary>
Ticks since this MiniProfiler was started. Ticks since this MiniProfiler was started.
@ -461,7 +547,7 @@
Returns either includes' css/javascript or results' html. Returns either includes' css/javascript or results' html.
</summary> </summary>
</member> </member>
<member name="M:MvcMiniProfiler.UI.MiniProfilerHandler.Includes(System.Web.HttpContext)"> <member name="M:MvcMiniProfiler.UI.MiniProfilerHandler.Includes(System.Web.HttpContext,System.String)">
<summary> <summary>
Handles rendering our .js and .less static content files. Handles rendering our .js and .less static content files.
</summary> </summary>
@ -508,6 +594,21 @@
Useful when profiling many items in a loop, but you don't wish to always see this detail. Useful when profiling many items in a loop, but you don't wish to always see this detail.
</summary> </summary>
</member> </member>
<member name="T:MvcMiniProfiler.RenderPosition">
<summary>
Dictates on which side of the page the profiler popup button is displayed; defaults to left.
</summary>
</member>
<member name="F:MvcMiniProfiler.RenderPosition.Left">
<summary>
Profiler popup button is displayed on the left.
</summary>
</member>
<member name="F:MvcMiniProfiler.RenderPosition.Right">
<summary>
Profiler popup button is displayed on the right.
</summary>
</member>
<member name="T:MvcMiniProfiler.MiniProfilerExtensions"> <member name="T:MvcMiniProfiler.MiniProfilerExtensions">
<summary> <summary>
Contains helper methods that ease working with null <see cref="T:MvcMiniProfiler.MiniProfiler"/>s. Contains helper methods that ease working with null <see cref="T:MvcMiniProfiler.MiniProfiler"/>s.
Loading…
Cancel
Save