Merge with Kayone.

This commit is contained in:
Mark McDowall 2011-06-16 20:46:14 -07:00
commit 1f0e71c68e
25 changed files with 669 additions and 320 deletions

Binary file not shown.

View File

@ -1065,11 +1065,11 @@
into an expression tree.
</summary>
</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>
Initializes a new instance of the <see cref="T:NLog.Conditions.ConditionParser"/> class.
</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>
</member>
<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>
<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="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">
<summary>
Condition relational (<b>==</b>, <b>!=</b>, <b>&lt;</b>, <b>&lt;=</b>,
@ -1185,11 +1196,11 @@
Hand-written tokenizer for conditions.
</summary>
</member>
<member name="M:NLog.Conditions.ConditionTokenizer.#ctor(System.String)">
<member name="M:NLog.Conditions.ConditionTokenizer.#ctor(NLog.Internal.SimpleStringReader)">
<summary>
Initializes a new instance of the <see cref="T:NLog.Conditions.ConditionTokenizer"/> class.
</summary>
<param name="expressionText">The expression text.</param>
<param name="stringReader">The string reader.</param>
</member>
<member name="M:NLog.Conditions.ConditionTokenizer.Expect(NLog.Conditions.ConditionTokenType)">
<summary>
@ -1378,6 +1389,17 @@
<param name="type">The type to register.</param>
<param name="itemNamePrefix">The item name prefix.</param>
</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">
<summary>
Gets or sets default singleton instance of <see cref="T:NLog.Config.ConfigurationItemFactory"/>.
@ -1473,14 +1495,6 @@
<param name="result">The result.</param>
<returns>True if instance was created successfully, false otherwise.</returns>
</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">
<summary>
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="itemNamePrefix">The item name prefix.</param>
</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">
<summary>
Clears the contents of the factory.
@ -1535,14 +1556,6 @@
<param name="name">The name of the item.</param>
<returns>Created item.</returns>
</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">
<summary>
Implemented by objects which support installation and uninstallation.
@ -2069,45 +2082,6 @@
layout targets and filters.
</summary>
</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">
<summary>
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>.
</returns>
</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">
<summary>
Watches multiple files at the same time and raises an event whenever
@ -3354,75 +3340,9 @@
Supports mocking of SMTP Client code.
</summary>
</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>
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.
Network sender which uses HTTP or HTTPS POST.
</summary>
</member>
<member name="T:NLog.Internal.NetworkSenders.NetworkSender">
@ -3518,6 +3438,43 @@
Gets the last send time.
</summary>
</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">
<summary>
Default implementation of <see cref="T:NLog.Internal.NetworkSenders.INetworkSenderFactory"/>.
@ -3809,6 +3766,69 @@
Reflection helpers for accessing properties.
</summary>
</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">
<summary>
Implements a single-call guard around given continuation function.
@ -4276,6 +4296,12 @@
</summary>
<docgen category='Rendering Options' order='10' />
</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">
<summary>
The environment variable.
@ -4338,12 +4364,33 @@
</summary>
<docgen category='Rendering Options' order='10' />
</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">
<summary>
Gets or sets the separator used to concatenate parts specified in the Format.
</summary>
<docgen category='Rendering Options' order='10' />
</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">
<summary>
Renders contents of the specified file.
@ -4515,13 +4562,6 @@
</summary>
<docgen category='Rendering Options' order='10' />
</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">
<summary>
Installation parameter (passed to InstallNLogConfig).
@ -4656,6 +4696,12 @@
</summary>
<docgen category="Payload Options" order="10"/>
</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">
<summary>
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="logEvent">Logging event.</param>
</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">
<summary>
The machine name that the process is running on.
@ -4731,6 +4783,11 @@
The formatted log message.
</summary>
</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)">
<summary>
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="logEvent">Logging event.</param>
</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">
<summary>
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="logEvent">Logging event.</param>
</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>
Installed state of an application.
</summary>
</member>
<member name="F:NLog.LayoutRenderers.SilverlightApplicationInfoOption.HasElevatedPermissions">
<summary>
Whether application is running with elevated permissions.
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.SpecialFolderLayoutRenderer">
<summary>
@ -5431,6 +5481,24 @@
<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="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">
<summary>
Thread Windows identity information (username).
@ -5538,6 +5606,30 @@
</summary>
<docgen category="Caching Options" order="10"/>
</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">
<summary>
Converts the result of another layout output to lower case.
@ -5568,6 +5660,27 @@
</summary>
<docgen category='Transformation Options' order='10' />
</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">
<summary>
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>
<docgen category='Transformation Options' order='10' />
</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">
<summary>
A column in the CSV.
@ -5937,18 +6127,6 @@
Gets the logging configuration this target is part of.
</summary>
</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)">
<summary>
Renders the layout for the specified logging event by invoking layout renderers.
@ -6083,17 +6261,6 @@
Parses layout strings.
</summary>
</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">
<summary>
A specialized layout that renders Log4j-compatible XML events.
@ -9481,11 +9648,6 @@
</summary>
<param name="result">The result.</param>
</member>
<member name="T:NLog.LogReceiverService.ILogReceiverClientChannel">
<summary>
Log Receiver Client Channel.
</summary>
</member>
<member name="T:NLog.LogReceiverService.ILogReceiverServer">
<summary>
Service contract for Log Receiver server.
@ -9497,6 +9659,34 @@
</summary>
<param name="events">The events.</param>
</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">
<summary>
Internal configuration of Log Receiver Service contracts.
@ -10518,6 +10708,12 @@
</summary>
<docgen category="Payload Options" order="10"/>
</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">
<summary>
Gets the collection of parameters. Each parameter contains a mapping
@ -10534,6 +10730,7 @@
<summary>
Gets or sets the instance of <see cref="T:NLog.Layouts.Log4JXmlEventLayout"/> that is used to format log messages.
</summary>
<docgen category="Layout Options" order="10"/>
</member>
<member name="M:NLog.Targets.ChainsawTarget.#ctor">
<summary>
@ -11837,6 +12034,14 @@
Initializes a new instance of the <see cref="T:NLog.Targets.LogReceiverWebServiceTarget"/> class.
</summary>
</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)">
<summary>
Writes logging event to the log target. Must be overridden in inheriting
@ -11886,6 +12091,12 @@
<value>The parameters.</value>
<docgen category='Payload Options' order='10' />
</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">
<summary>
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.
</summary>
</member>
<member name="M:NLog.Targets.MethodCallTargetBase.Write(NLog.LogEventInfo)">
<member name="M:NLog.Targets.MethodCallTargetBase.Write(NLog.Common.AsyncLogEventInfo)">
<summary>
Prepares an array of parameters to be passed based on the logging event and calls DoInvoke().
</summary>
@ -12214,6 +12425,13 @@
The logging event.
</param>
</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[])">
<summary>
Calls the target method. Must be implemented in concrete classes.
@ -12913,10 +13131,17 @@
</summary>
</member>
<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>
Invokes the web service method.
</summary>
<param name="parameters">Parameters to be passed.</param>
<param name="continuation">The continuation.</param>
</member>
<member name="P:NLog.Targets.WebServiceTarget.Url">
<summary>
@ -12942,6 +13167,12 @@
</summary>
<docgen category='Web Service Options' order='10' />
</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">
<summary>
Win32 file attributes.

View File

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

View File

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

View File

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

View File

@ -133,8 +133,9 @@
<Reference Include="MigSharp">
<HintPath>..\Libraries\MigSharp.dll</HintPath>
</Reference>
<Reference Include="MvcMiniProfiler">
<HintPath>..\packages\MiniProfiler.1.2\lib\MvcMiniProfiler.dll</HintPath>
<Reference Include="MvcMiniProfiler, Version=2.1.4183.14740, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\MiniProfiler.1.3\lib\MvcMiniProfiler.dll</HintPath>
</Reference>
<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>

View File

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

View File

@ -23,9 +23,9 @@ namespace NzbDrone.Core.Providers.ExternalNotification
{
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");
_xbmcProvider.Notify(header, message);
@ -41,21 +41,21 @@ namespace NzbDrone.Core.Providers.ExternalNotification
{
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");
_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");
_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");
_xbmcProvider.Clean();
@ -69,19 +69,19 @@ namespace NzbDrone.Core.Providers.ExternalNotification
{
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");
_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");
_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");
_xbmcProvider.Clean();

View File

@ -1,8 +1,7 @@
using System;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using MvcMiniProfiler;
using Ninject;
using NLog;
using NzbDrone.Core.Helpers;
@ -206,16 +205,13 @@ namespace NzbDrone.Core.Providers
public virtual Tuple<int, int> GetEpisodeFilesCount(int seriesId)
{
using (MiniProfiler.Current.Step("GetEpisodeFilesCount:" + seriesId))
{
var allEpisodes = _episodeProvider.GetEpisodeBySeries(seriesId);
var allEpisodes = _episodeProvider.GetEpisodeBySeries(seriesId).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();
return new Tuple<int, int>(avilableEpisodes.Count, episodeTotal.Count);
}
}
private List<string> GetMediaFileList(string path)
{

View File

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

View File

@ -25,10 +25,10 @@ namespace NzbDrone.Core.Providers
public virtual void Notify(string header, string message)
{
//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);
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...
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);
}
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);
SendCommand(host, command);
@ -46,14 +46,14 @@ namespace NzbDrone.Core.Providers
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);
var xbmcSeriesPath = GetXbmcSeriesPath(host, seriesId);
//If the path is not found & the user wants to update the entire library, do it now.
if (String.IsNullOrEmpty(xbmcSeriesPath) &&
Convert.ToBoolean(_configProvider.GetValue("XbmcFullUpdate", false, true)))
Convert.ToBoolean(_configProvider.GetValue("XbmcFullUpdate", false)))
{
//Update the entire library
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()
{
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);
var command = String.Format("ExecBuiltIn(CleanLibrary(video))");
@ -78,8 +78,8 @@ namespace NzbDrone.Core.Providers
private string SendCommand(string host, string command)
{
var username = _configProvider.GetValue("XbmcUsername", String.Empty, true);
var password = _configProvider.GetValue("XbmcPassword", String.Empty, true);
var username = _configProvider.GetValue("XbmcUsername", String.Empty);
var password = _configProvider.GetValue("XbmcPassword", String.Empty);
var url = String.Format("http://{0}/xbmcCmds/xbmcHttp?command={1}", host, command);
if (!String.IsNullOrEmpty(username))

View File

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

View File

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

View File

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

View File

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

View File

@ -57,8 +57,9 @@
<HintPath>..\Libraries\MVC3\Microsoft.Web.Infrastructure.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="MvcMiniProfiler">
<HintPath>..\packages\MiniProfiler.1.2\lib\MvcMiniProfiler.dll</HintPath>
<Reference Include="MvcMiniProfiler, Version=2.1.4183.14740, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\MiniProfiler.1.3\lib\MvcMiniProfiler.dll</HintPath>
</Reference>
<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>

View File

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

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -116,6 +116,11 @@
Gets the ellapsed milliseconds in this step without any children's durations.
</summary>
</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">
<summary>
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.
</summary>
</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">
<summary>
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.
</summary>
</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">
<summary>
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.
</summary>
</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">
<summary>
Category of sql statement executed.
@ -232,6 +262,11 @@
before all records are fetched and reader is closed.
</summary>
</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">
<summary>
Gets part of a stack trace containing only methods we care about.
@ -254,6 +289,11 @@
their starting time.
</summary>
</member>
<member name="F:MvcMiniProfiler.MiniProfiler._sqlCounts">
<summary>
</summary>
</member>
<member name="M:MvcMiniProfiler.MiniProfiler.#ctor(System.String,MvcMiniProfiler.ProfileLevel)">
<summary>
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.
</param>
</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>
Returns the css and javascript includes needed to display the MiniProfiler results UI.
</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>
</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">
<summary>
Identifies this Profiler so it may be stored/cached.
@ -352,6 +418,26 @@
Returns true when we have profiled queries.
</summary>
</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">
<summary>
Ticks since this MiniProfiler was started.
@ -461,7 +547,7 @@
Returns either includes' css/javascript or results' html.
</summary>
</member>
<member name="M:MvcMiniProfiler.UI.MiniProfilerHandler.Includes(System.Web.HttpContext)">
<member name="M:MvcMiniProfiler.UI.MiniProfilerHandler.Includes(System.Web.HttpContext,System.String)">
<summary>
Handles rendering our .js and .less static content files.
</summary>
@ -508,6 +594,21 @@
Useful when profiling many items in a loop, but you don't wish to always see this detail.
</summary>
</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">
<summary>
Contains helper methods that ease working with null <see cref="T:MvcMiniProfiler.MiniProfiler"/>s.