Merge branch 'master' of git://github.com/kayone/NzbDrone

Conflicts:
	NzbDrone.Core/Providers/Jobs/EpisodeSearchJob.cs
	NzbDrone.Core/Providers/SeriesProvider.cs
This commit is contained in:
Mark McDowall 2011-06-13 19:23:43 -07:00
commit a290a0dcb0
50 changed files with 6762 additions and 76 deletions

Binary file not shown.

View File

@ -66,6 +66,7 @@
<PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="EnumMember" />
<PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="Other" />
<Abbreviation Text="IIS" />
<Abbreviation Text="SQ" />
</Naming2>
</CodeStyleSettings>
</Configuration>

File diff suppressed because it is too large Load Diff

View File

@ -168,6 +168,7 @@
</Content>
<Content Include="Files\Queue.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<SubType>Designer</SubType>
</Content>
<Content Include="Files\QueueEmpty.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>

View File

@ -86,7 +86,6 @@ namespace NzbDrone.Core
_kernel.Bind<ExternalNotificationProvider>().ToSelf().InSingletonScope();
_kernel.Bind<XbmcProvider>().ToSelf().InSingletonScope();
_kernel.Bind<ConfigProvider>().To<ConfigProvider>().InSingletonScope();
_kernel.Bind<SyncProvider>().ToSelf().InSingletonScope();
_kernel.Bind<NotificationProvider>().ToSelf().InSingletonScope();
_kernel.Bind<LogProvider>().ToSelf().InSingletonScope();
_kernel.Bind<MediaFileProvider>().ToSelf().InSingletonScope();

View File

@ -1,9 +1,8 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using MvcMiniProfiler.Data;
using SubSonic.DataProviders;
using SubSonic.DataProviders.SQLite;
using SubSonic.Repository;
namespace NzbDrone.Core.Datastore
@ -41,7 +40,7 @@ namespace NzbDrone.Core.Datastore
public static IDataProvider GetDataProvider(string connectionString)
{
return ProviderFactory.GetProvider(connectionString, "System.Data.SQLite");
return new ProfiledSQLiteProvider(connectionString, "System.Data.SQLite");
}
public static IRepository CreateSimpleRepository(IDataProvider dataProvider)
@ -55,4 +54,19 @@ namespace NzbDrone.Core.Datastore
}
}
public class ProfiledSQLiteProvider : SQLiteProvider
{
public ProfiledSQLiteProvider(string connectionString, string providerName)
: base(connectionString, providerName)
{
}
public override System.Data.Common.DbConnection CreateConnection(string connectionString)
{
return ProfiledDbConnection.Get(base.CreateConnection(connectionString));
}
}
}

View File

@ -129,6 +129,9 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Libraries\Exceptioneer.WindowsFormsClient.dll</HintPath>
</Reference>
<Reference Include="MvcMiniProfiler">
<HintPath>..\packages\MiniProfiler.1.2\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>
</Reference>
@ -214,7 +217,6 @@
<Compile Include="Providers\ExternalNotificationProvider.cs" />
<Compile Include="Providers\Indexer\NzbsOrg.cs" />
<Compile Include="Providers\HistoryProvider.cs" />
<Compile Include="Providers\BacklogProvider.cs" />
<Compile Include="Providers\IndexerProvider.cs" />
<Compile Include="Providers\QualityProvider.cs" />
<Compile Include="Providers\RootDirProvider.cs" />
@ -228,7 +230,6 @@
<Compile Include="Parser.cs" />
<Compile Include="Providers\Fakes\FakeNotificationProvider.cs" />
<Compile Include="Providers\MediaFileProvider.cs" />
<Compile Include="Providers\SyncProvider.cs" />
<Compile Include="Model\Notification\ProgressNotification.cs" />
<Compile Include="Providers\NotificationProvider.cs" />
<Compile Include="Providers\Core\ConfigProvider.cs" />

View File

@ -13,9 +13,6 @@ namespace NzbDrone.Core.Providers
{
public class AutoConfigureProvider
{
public AutoConfigureProvider()
{
}
public SabnzbdInfoModel AutoConfigureSab()
{
@ -29,8 +26,7 @@ namespace NzbDrone.Core.Providers
var info =
ipProperties.GetActiveTcpListeners().Select(
p =>
new ConnectionInfoModel
{Address = p.Address.ToString().Replace("0.0.0.0", "127.0.0.1"), Port = p.Port}).Distinct().
new ConnectionInfoModel { Address = p.Address.ToString().Replace("0.0.0.0", "127.0.0.1"), Port = p.Port }).Distinct().
ToList();
info.RemoveAll(i => i.Port == 135);
@ -51,7 +47,8 @@ namespace NzbDrone.Core.Providers
{
var apiKey = GetApiKey(connection.Address, connection.Port);
if (!String.IsNullOrEmpty(apiKey))
return new SabnzbdInfoModel {
return new SabnzbdInfoModel
{
Host = connection.Address,
Port = connection.Port,
ApiKey = apiKey

View File

@ -1,19 +0,0 @@
using System;
namespace NzbDrone.Core.Providers
{
public class BacklogProvider
{
//Will provide Backlog Search functionality
public virtual bool StartSearch()
{
throw new NotImplementedException();
}
public virtual bool StartSearch(int seriesId)
{
throw new NotImplementedException();
}
}
}

View File

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Ninject;
using NLog;
using NzbDrone.Core.Model;
using NzbDrone.Core.Repository;
@ -13,6 +14,7 @@ namespace NzbDrone.Core.Providers.Core
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private readonly IRepository _repository;
[Inject]
public ConfigProvider(IRepository repository)
{
_repository = repository;

View File

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Ninject;
using NLog;
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers.Core;
@ -17,6 +18,7 @@ namespace NzbDrone.Core.Providers
private readonly EpisodeProvider _episodeProvider;
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
[Inject]
public DownloadProvider(SabProvider sabProvider, HistoryProvider historyProvider, EpisodeProvider episodeProvider)
{
_sabProvider = sabProvider;

View File

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Ninject;
using NLog;
using NzbDrone.Core.Helpers;
using NzbDrone.Core.Model;
@ -16,6 +17,7 @@ namespace NzbDrone.Core.Providers
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private readonly IRepository _repository;
[Inject]
public ExternalNotificationProvider(IRepository repository)
{
_repository = repository;

View File

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Ninject;
using NLog;
using NzbDrone.Core.Model;
using NzbDrone.Core.Repository;
@ -14,6 +15,7 @@ namespace NzbDrone.Core.Providers
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private readonly IRepository _repository;
[Inject]
public HistoryProvider(IRepository repository)
{
_repository = repository;

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Net;
using System.ServiceModel.Syndication;
using System.Web;
using Ninject;
using NLog;
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers.Core;
@ -15,6 +16,7 @@ namespace NzbDrone.Core.Providers.Indexer
private readonly HttpProvider _httpProvider;
protected readonly ConfigProvider _configProvider;
[Inject]
protected IndexerBase(HttpProvider httpProvider, ConfigProvider configProvider)
{
_httpProvider = httpProvider;

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Net;
using System.ServiceModel.Syndication;
using Ninject;
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Providers.ExternalNotification;
@ -10,6 +11,7 @@ namespace NzbDrone.Core.Providers.Indexer
{
public class Newzbin : IndexerBase
{
[Inject]
public Newzbin(HttpProvider httpProvider, ConfigProvider configProvider)
: base(httpProvider, configProvider)
{

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Net;
using System.ServiceModel.Syndication;
using Ninject;
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Providers.ExternalNotification;
@ -11,6 +12,7 @@ namespace NzbDrone.Core.Providers.Indexer
{
public class NzbMatrix : IndexerBase
{
[Inject]
public NzbMatrix(HttpProvider httpProvider, ConfigProvider configProvider) : base(httpProvider, configProvider)
{
}

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Net;
using System.ServiceModel.Syndication;
using Ninject;
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Providers.ExternalNotification;
@ -11,6 +12,7 @@ namespace NzbDrone.Core.Providers.Indexer
{
public class NzbsOrg : IndexerBase
{
[Inject]
public NzbsOrg(HttpProvider httpProvider, ConfigProvider configProvider)
: base(httpProvider, configProvider)
{

View File

@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Net;
using System.ServiceModel.Syndication;
using Ninject;
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Providers.ExternalNotification;
@ -10,6 +11,7 @@ namespace NzbDrone.Core.Providers.Indexer
{
public class NzbsRUs : IndexerBase
{
[Inject]
public NzbsRUs(HttpProvider httpProvider, ConfigProvider configProvider) : base(httpProvider, configProvider)
{
}

View File

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Ninject;
using NLog;
using NzbDrone.Core.Providers.Indexer;
using NzbDrone.Core.Repository;
@ -15,6 +16,7 @@ namespace NzbDrone.Core.Providers
private IList<IndexerBase> _indexers = new List<IndexerBase>();
[Inject]
public IndexerProvider(IRepository repository)
{
_repository = repository;

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using Ninject;
using NLog;
using NzbDrone.Core.Model;
using NzbDrone.Core.Repository;
@ -15,6 +16,7 @@ namespace NzbDrone.Core.Providers
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
[Inject]
public InventoryProvider(SeriesProvider seriesProvider, EpisodeProvider episodeProvider, HistoryProvider historyProvider)
{
_seriesProvider = seriesProvider;

View File

@ -1,6 +1,7 @@
using System;
using System.IO;
using System.Linq;
using Ninject;
using NLog;
using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Repository;
@ -14,6 +15,7 @@ namespace NzbDrone.Core.Providers.Jobs
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
[Inject]
public DeleteSeriesJob(SeriesProvider seriesProvider)
{
_seriesProvider = seriesProvider;

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ninject;
using NLog;
using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Repository;
@ -14,6 +15,7 @@ namespace NzbDrone.Core.Providers.Jobs
private readonly MediaFileProvider _mediaFileProvider;
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
[Inject]
public DiskScanJob(SeriesProvider seriesProvider, MediaFileProvider mediaFileProvider)
{
_seriesProvider = seriesProvider;

View File

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Ninject;
using NLog;
using NzbDrone.Core.Helpers;
using NzbDrone.Core.Model;
@ -47,7 +48,7 @@ namespace NzbDrone.Core.Providers.Jobs
throw new ArgumentOutOfRangeException("targetId");
var episode = _episodeProvider.GetEpisode(targetId);
if (episode == null)
{
Logger.Error("Unable to find an episode {0} in database", targetId);
@ -61,7 +62,7 @@ namespace NzbDrone.Core.Providers.Jobs
var title = _sceneNameMappingProvider.GetSceneName(series.SeriesId);
if(string.IsNullOrWhiteSpace(title))
if (string.IsNullOrWhiteSpace(title))
{
title = series.Title;
}

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Ninject;
using NLog;
using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Repository;
@ -23,12 +24,13 @@ namespace NzbDrone.Core.Providers.Jobs
private List<int> _attemptedSeries;
[Inject]
public ImportNewSeriesJob(SeriesProvider seriesProvider,
MediaFileProvider mediaFileProvider, UpdateInfoJob updateInfoJob, DiskScanJob diskScanJob)
{
_seriesProvider = seriesProvider;
_mediaFileProvider = mediaFileProvider;
_updateInfoJob = updateInfoJob;
_updateInfoJob = updateInfoJob;
_diskScanJob = diskScanJob;
}
@ -91,22 +93,22 @@ namespace NzbDrone.Core.Providers.Jobs
foreach (var season in seasons)
{
if (season!=currentSeasons )
if (season != currentSeasons)
{
}
}
/* Logger.Debug("Looking for seasons to ignore");
foreach (var season in updatedSeries.Seasons)
{
if (season.SeasonNumber != updatedSeries.Seasons.Max(s => s.SeasonNumber) && _mediaFileProvider.GetSeasonFiles(season.SeasonId).Count() == 0)
{
Logger.Info("Season {0} of {1} doesn't have any files on disk. season will not be monitored.", season.SeasonNumber, updatedSeries.Title);
season.Monitored = false;
_seasonProvider.SaveSeason(season);
}
}*/
/* Logger.Debug("Looking for seasons to ignore");
foreach (var season in updatedSeries.Seasons)
{
if (season.SeasonNumber != updatedSeries.Seasons.Max(s => s.SeasonNumber) && _mediaFileProvider.GetSeasonFiles(season.SeasonId).Count() == 0)
{
Logger.Info("Season {0} of {1} doesn't have any files on disk. season will not be monitored.", season.SeasonNumber, updatedSeries.Title);
season.Monitored = false;
_seasonProvider.SaveSeason(season);
}
}*/
}
}
}

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading;
using Ninject;
using NLog;
using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Repository;
@ -24,6 +25,7 @@ namespace NzbDrone.Core.Providers.Jobs
private ProgressNotification _notification;
[Inject]
public JobProvider(IRepository repository, NotificationProvider notificationProvider, IList<IJob> jobs)
{
_repository = repository;

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Ninject;
using NLog;
using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Providers.Core;
@ -18,6 +19,7 @@ namespace NzbDrone.Core.Providers.Jobs
private readonly SeriesProvider _seriesProvider;
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
[Inject]
public PostDownloadScanJob(ConfigProvider configProvider, DiskProvider diskProvider,
MediaFileProvider mediaFileProvider, SeriesProvider seriesProvider)
{

View File

@ -1,6 +1,7 @@
using System;
using System.IO;
using System.Linq;
using Ninject;
using NLog;
using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Providers.Core;
@ -16,6 +17,7 @@ namespace NzbDrone.Core.Providers.Jobs
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
[Inject]
public RenameEpisodeJob(DiskProvider diskProvider, EpisodeProvider episodeProvider,
MediaFileProvider mediaFileProvider, SeriesProvider seriesProvider)
{

View File

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Ninject;
using NLog;
using NzbDrone.Core.Model;
using NzbDrone.Core.Model.Notification;
@ -18,6 +19,7 @@ namespace NzbDrone.Core.Providers.Jobs
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
[Inject]
public RssSyncJob(IEnumerable<IndexerBase> indexers, InventoryProvider inventoryProvider, DownloadProvider downloadProvider, IndexerProvider indexerProvider)
{
_indexers = indexers;

View File

@ -1,5 +1,6 @@
using System.Linq;
using System.Collections.Generic;
using Ninject;
using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Repository;
@ -10,6 +11,7 @@ namespace NzbDrone.Core.Providers.Jobs
private readonly SeriesProvider _seriesProvider;
private readonly EpisodeProvider _episodeProvider;
[Inject]
public UpdateInfoJob(SeriesProvider seriesProvider, EpisodeProvider episodeProvider)
{
_seriesProvider = seriesProvider;
@ -18,7 +20,7 @@ namespace NzbDrone.Core.Providers.Jobs
public UpdateInfoJob()
{
}
public string Name

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Ninject;
using NLog;
using NzbDrone.Core.Helpers;
using NzbDrone.Core.Model.Notification;
@ -22,6 +23,7 @@ namespace NzbDrone.Core.Providers
private readonly IRepository _repository;
private readonly ConfigProvider _configProvider;
[Inject]
public MediaFileProvider(IRepository repository, DiskProvider diskProvider,
EpisodeProvider episodeProvider, SeriesProvider seriesProvider,
ConfigProvider configProvider)

View File

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Ninject;
using NLog;
using NzbDrone.Core.Repository.Quality;
using SubSonic.Repository;
@ -16,6 +17,7 @@ namespace NzbDrone.Core.Providers
{
}
[Inject]
public QualityProvider(IRepository repository)
{
_repository = repository;

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Ninject;
using NLog;
using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Repository;
@ -16,7 +17,7 @@ namespace NzbDrone.Core.Providers
private readonly DiskProvider _diskProvider;
private readonly SeriesProvider _seriesProvider;
[Inject]
public RootDirProvider(IRepository repository, SeriesProvider seriesProvider, DiskProvider diskProvider)
{
_repository = repository;

View File

@ -5,6 +5,7 @@ using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Xml.Linq;
using Ninject;
using NLog;
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers.Core;
@ -21,6 +22,7 @@ namespace NzbDrone.Core.Providers
{
}
[Inject]
public SabProvider(ConfigProvider configProvider, HttpProvider httpProvider)
{
_configProvider = configProvider;

View File

@ -3,6 +3,7 @@ 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;
@ -15,9 +16,6 @@ namespace NzbDrone.Core.Providers
{
public class SeriesProvider
{
//TODO: Remove parsing of rest of tv show info we just need the show name
//Trims all white spaces and separators from the end of the title.
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private readonly IRepository _repository;
private readonly ConfigProvider _configProvider;

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ninject;
namespace NzbDrone.Core.Providers
{
@ -9,6 +10,7 @@ namespace NzbDrone.Core.Providers
{
private readonly SeriesProvider _seriesProvider;
[Inject]
public StatsProvider(SeriesProvider seriesProvider)
{
_seriesProvider = seriesProvider;

View File

@ -1,17 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using NLog;
using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Providers.Core;
namespace NzbDrone.Core.Providers
{
public class SyncProvider
{
}
}

View File

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Ninject;
using NzbDrone.Core.Model;
using NzbDrone.Core.Repository;
using SubSonic.Repository;
@ -11,6 +12,7 @@ namespace NzbDrone.Core.Providers
{
private readonly IRepository _repository;
[Inject]
public UpcomingEpisodesProvider(IRepository repository)
{
_repository = repository;
@ -26,7 +28,7 @@ namespace NzbDrone.Core.Providers
var today = allEps.Where(e => e.AirDate == DateTime.Today).ToList();
var week = allEps.Where(e => e.AirDate > DateTime.Today).ToList();
return new UpcomingEpisodesModel {Yesterday = yesterday, Today = today, Week = week};
return new UpcomingEpisodesModel { Yesterday = yesterday, Today = today, Week = week };
}
public virtual List<Episode> Yesterday()

View File

@ -2,6 +2,7 @@
using System.IO;
using System.Linq;
using System.Xml.Linq;
using Ninject;
using NLog;
using NzbDrone.Core.Helpers;
using NzbDrone.Core.Providers.Core;
@ -14,6 +15,7 @@ namespace NzbDrone.Core.Providers
private readonly ConfigProvider _configProvider;
private readonly HttpProvider _httpProvider;
[Inject]
public XbmcProvider(ConfigProvider configProvider, HttpProvider httpProvider)
{
_configProvider = configProvider;

View File

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

View File

@ -21,17 +21,16 @@ namespace NzbDrone.Web.Controllers
private readonly RootDirProvider _rootFolderProvider;
private readonly SeriesProvider _seriesProvider;
private readonly JobProvider _jobProvider;
private readonly SyncProvider _syncProvider;
private readonly TvDbProvider _tvDbProvider;
private readonly DiskProvider _diskProvider;
public AddSeriesController(SyncProvider syncProvider, RootDirProvider rootFolderProvider,
public AddSeriesController(RootDirProvider rootFolderProvider,
ConfigProvider configProvider,
QualityProvider qualityProvider, TvDbProvider tvDbProvider,
SeriesProvider seriesProvider, JobProvider jobProvider,
DiskProvider diskProvider)
{
_syncProvider = syncProvider;
_rootFolderProvider = rootFolderProvider;
_configProvider = configProvider;
_qualityProvider = qualityProvider;
@ -50,7 +49,7 @@ namespace NzbDrone.Web.Controllers
public ActionResult AddNew()
{
var rootDirs =_rootFolderProvider.GetAll().Select(r =>
var rootDirs = _rootFolderProvider.GetAll().Select(r =>
new RootDirModel
{
Path = r.Path,
@ -137,10 +136,10 @@ namespace NzbDrone.Web.Controllers
_seriesProvider.AddSeries(path, seriesId, qualityProfileId);
ScanNewSeries();
return new JsonResult {Data = "ok"};
return new JsonResult { Data = "ok" };
}
catch(Exception ex)
catch (Exception ex)
{
return new JsonResult { Data = "failed" };
}

View File

@ -1,4 +1,5 @@
using System.Web.Mvc;
using MvcMiniProfiler;
using NzbDrone.Core.Providers;
namespace NzbDrone.Web.Controllers
@ -35,6 +36,12 @@ namespace NzbDrone.Web.Controllers
message = _notifications.GetProgressNotifications[0].CurrentMessage;
}
if (MiniProfiler.Current.DurationMilliseconds < 100)
{
MiniProfiler.Stop(true);
}
return Json(message, JsonRequestBehavior.AllowGet);
}
}

View File

@ -6,6 +6,7 @@ using System.Web;
using System.Web.Caching;
using System.Web.Mvc;
using System.Web.Routing;
using MvcMiniProfiler;
using Ninject;
using Ninject.Web.Mvc;
using NLog;
@ -85,6 +86,12 @@ namespace NzbDrone.Web
protected void Application_BeginRequest()
{
Thread.CurrentThread.Name = "UI";
var miniprofiler = MiniProfiler.Start();
}
protected void Application_EndRequest()
{
MiniProfiler.Stop();
}
}
}

View File

@ -57,6 +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>
<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>
</Reference>

View File

@ -13,6 +13,7 @@
<link href="../../Content/jquery-ui.css" rel="stylesheet" type="text/css" />
<link href="../../Content/jquery-ui.custom.css" rel="stylesheet" type="text/css" />
@RenderSection("HeaderContent", required: false)
@MvcMiniProfiler.MiniProfiler.RenderIncludes()
</head>
<body>
<div id="centered">

View File

@ -9,4 +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" />
</packages>

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,546 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>MvcMiniProfiler</name>
</assembly>
<members>
<member name="T:MvcMiniProfiler.ExecuteType">
<summary>
Categories of sql statements.
</summary>
</member>
<member name="F:MvcMiniProfiler.ExecuteType.None">
<summary>
Unknown
</summary>
</member>
<member name="F:MvcMiniProfiler.ExecuteType.NonQuery">
<summary>
DML statements that alter database state, e.g. INSERT, UPDATE
</summary>
</member>
<member name="F:MvcMiniProfiler.ExecuteType.Scalar">
<summary>
Statements that return a single record
</summary>
</member>
<member name="F:MvcMiniProfiler.ExecuteType.Reader">
<summary>
Statements that iterate over a result set
</summary>
</member>
<member name="M:MvcMiniProfiler.Data.ProfiledDbProviderFactory.System#IServiceProvider#GetService(System.Type)">
<summary>
Extension mechanism for additional services;
</summary>
<returns>requested service provider or null.</returns>
</member>
<member name="T:MvcMiniProfiler.Timing">
<summary>
An individual profiling step that can contain child steps.
</summary>
</member>
<member name="F:MvcMiniProfiler.Timing._profiler">
<summary>
Reference to the containing profiler, allowing this Timing to affect the Head and get Stopwatch readings.
</summary>
</member>
<member name="F:MvcMiniProfiler.Timing._startTicks">
<summary>
Offset from parent MiniProfiler's creation that this Timing was created.
</summary>
</member>
<member name="M:MvcMiniProfiler.Timing.#ctor(MvcMiniProfiler.MiniProfiler,MvcMiniProfiler.Timing,System.String)">
<summary>
Creates a new Timing named 'name' in the 'profiler's session, with 'parent' as this Timing's immediate ancestor.
</summary>
</member>
<member name="M:MvcMiniProfiler.Timing.#ctor">
<summary>
Obsolete - used for serialization.
</summary>
</member>
<member name="M:MvcMiniProfiler.Timing.AddKeyValue(System.String,System.String)">
<summary>
Adds arbitrary string 'value' under 'key', allowing custom properties to be stored in this Timing step.
</summary>
</member>
<member name="M:MvcMiniProfiler.Timing.Stop">
<summary>
Completes this Timing's duration and sets the MiniProfiler's Head up one level.
</summary>
</member>
<member name="P:MvcMiniProfiler.Timing.Id">
<summary>
Unique identifer for this timing; set during construction.
</summary>
</member>
<member name="P:MvcMiniProfiler.Timing.Name">
<summary>
Text displayed when this Timing is rendered.
</summary>
</member>
<member name="P:MvcMiniProfiler.Timing.DurationMilliseconds">
<summary>
How long this Timing step took in ms; includes any <see cref="P:MvcMiniProfiler.Timing.Children"/> Timings' durations.
</summary>
</member>
<member name="P:MvcMiniProfiler.Timing.StartMilliseconds">
<summary>
The offset from the start of profiling.
</summary>
</member>
<member name="P:MvcMiniProfiler.Timing.Children">
<summary>
All sub-steps that occur within this Timing step. Add new children through <see cref="M:MvcMiniProfiler.Timing.AddChild(MvcMiniProfiler.Timing)"/>
</summary>
</member>
<member name="P:MvcMiniProfiler.Timing.KeyValues">
<summary>
Stores arbitrary key/value strings on this Timing step. Add new tuples through <see cref="M:MvcMiniProfiler.Timing.AddKeyValue(System.String,System.String)"/>.
</summary>
</member>
<member name="P:MvcMiniProfiler.Timing.SqlTimings">
<summary>
Any queries that occurred during this Timing step.
</summary>
</member>
<member name="P:MvcMiniProfiler.Timing.Parent">
<summary>
Which Timing this Timing is under - the duration that this step takes will be added to its parent's duration.
</summary>
<remarks>This will be null for the root (initial) Timing.</remarks>
</member>
<member name="P:MvcMiniProfiler.Timing.DurationWithoutChildrenMilliseconds">
<summary>
Gets the ellapsed milliseconds in this step without any children's durations.
</summary>
</member>
<member name="P:MvcMiniProfiler.Timing.IsTrivial">
<summary>
Returns true when this <see cref="P:MvcMiniProfiler.Timing.DurationWithoutChildrenMilliseconds"/> is less than the configured
<see cref="P:MvcMiniProfiler.MiniProfiler.Settings.TrivialDurationThresholdMilliseconds"/>, by default 2.0 ms.
</summary>
</member>
<member name="P:MvcMiniProfiler.Timing.HasChildren">
<summary>
Returns true when this Timing has inner Timing steps.
</summary>
</member>
<member name="P:MvcMiniProfiler.Timing.HasSqlTimings">
<summary>
Returns true if this Timing step collected sql execution timings.
</summary>
</member>
<member name="P:MvcMiniProfiler.Timing.IsRoot">
<summary>
Returns true when this Timing is the first one created in a MiniProfiler session.
</summary>
</member>
<member name="P:MvcMiniProfiler.Timing.Depth">
<summary>
How far away this Timing is from the Profiler's Root.
</summary>
</member>
<member name="P:MvcMiniProfiler.Data.ProfiledDbCommand.BindByName">
<summary>
If the underlying command supports BindByName, this sets/clears the underlying
implementation accordingly. This is required to support OracleCommand from dapper-dot-net
</summary>
</member>
<member name="T:MvcMiniProfiler.Data.ProfiledDbConnection">
<summary>
Wraps a database connection, allowing sql execution timings to be collected when a <see cref="T:MvcMiniProfiler.MiniProfiler"/> session is started.
</summary>
</member>
<member name="M:MvcMiniProfiler.Data.ProfiledDbConnection.Get(System.Data.Common.DbConnection)">
<summary>
When <see cref="P:MvcMiniProfiler.MiniProfiler.Current"/> is not null, returns a new <see cref="T:MvcMiniProfiler.Data.ProfiledDbConnection"/> that wraps <paramref name="connection"/>,
providing query execution profiling. If <see cref="P:MvcMiniProfiler.MiniProfiler.Current"/> is null, connection is returned unwrapped.
</summary>
<param name="connection">Your provider-specific flavor of connection, e.g. SqlConnection, OracleConnection</param>
</member>
<member name="M:MvcMiniProfiler.Data.ProfiledDbConnection.Get(System.Data.Common.DbConnection,MvcMiniProfiler.MiniProfiler)">
<summary>
When <paramref name="profiler"/> is not null, returns a new <see cref="T:MvcMiniProfiler.Data.ProfiledDbConnection"/> that wraps <paramref name="connection"/>,
providing query execution profiling. If profiler is null, connection is returned unwrapped.
</summary>
<param name="connection">Your provider-specific flavor of connection, e.g. SqlConnection, OracleConnection</param>
<param name="profiler">The currently started <see cref="T:MvcMiniProfiler.MiniProfiler"/> or null.</param>
</member>
<member name="M:MvcMiniProfiler.Data.ProfiledDbConnection.#ctor(System.Data.Common.DbConnection,MvcMiniProfiler.MiniProfiler)">
<summary>
Returns a new <see cref="T:MvcMiniProfiler.Data.ProfiledDbConnection"/> that wraps <paramref name="connection"/>,
providing query execution profiling. If profiler is null, no profiling will occur.
</summary>
<param name="connection">Your provider-specific flavor of connection, e.g. SqlConnection, OracleConnection</param>
<param name="profiler">The currently started <see cref="T:MvcMiniProfiler.MiniProfiler"/> or null.</param>
</member>
<member name="T:MvcMiniProfiler.SqlTiming">
<summary>
Profiles a single sql execution.
</summary>
</member>
<member name="M:MvcMiniProfiler.SqlTiming.#ctor(System.Data.Common.DbCommand,MvcMiniProfiler.ExecuteType,MvcMiniProfiler.MiniProfiler)">
<summary>
Creates a new SqlTiming to profile 'command'.
</summary>
</member>
<member name="M:MvcMiniProfiler.SqlTiming.#ctor">
<summary>
Obsolete - used for serialization.
</summary>
</member>
<member name="M:MvcMiniProfiler.SqlTiming.ExecutionComplete(System.Boolean)">
<summary>
Called when command execution is finished to determine this SqlTiming's duration.
</summary>
</member>
<member name="M:MvcMiniProfiler.SqlTiming.ReaderFetchComplete">
<summary>
Called when database reader is closed, ending profiling for <see cref="F:MvcMiniProfiler.ExecuteType.Reader"/> SqlTimings.
</summary>
</member>
<member name="P:MvcMiniProfiler.SqlTiming.ExecuteType">
<summary>
Category of sql statement executed.
</summary>
</member>
<member name="P:MvcMiniProfiler.SqlTiming.CommandString">
<summary>
The sql that was executed.
</summary>
</member>
<member name="P:MvcMiniProfiler.SqlTiming.StackTraceSnippet">
<summary>
Roughly where in the calling code that this sql was executed.
</summary>
</member>
<member name="P:MvcMiniProfiler.SqlTiming.StartMilliseconds">
<summary>
Offset from main MiniProfiler start that this sql began.
</summary>
</member>
<member name="P:MvcMiniProfiler.SqlTiming.DurationMilliseconds">
<summary>
How long this sql statement took to execute.
</summary>
</member>
<member name="P:MvcMiniProfiler.SqlTiming.FirstFetchDurationMilliseconds">
<summary>
When executing readers, how long it took to come back initially from the database,
before all records are fetched and reader is closed.
</summary>
</member>
<member name="T:MvcMiniProfiler.Helpers.StackTraceSnippet">
<summary>
Gets part of a stack trace containing only methods we care about.
</summary>
</member>
<member name="F:MvcMiniProfiler.Helpers.StackTraceSnippet.TypesToExclude">
<summary>
Contains the default list of full type names we don't want in any stack trace snippets.
</summary>
</member>
<member name="T:MvcMiniProfiler.MiniProfiler">
<summary>
A single MiniProfiler can be used to represent any number of steps/levels in a call-graph, via Step()
</summary>
<remarks>Totally baller.</remarks>
</member>
<member name="F:MvcMiniProfiler.MiniProfiler._watch">
<summary>
Starts when this profiler is instantiated. Each <see cref="T:MvcMiniProfiler.Timing"/> step will use this Stopwatch's current ticks as
their starting time.
</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"/>.
</summary>
</member>
<member name="M:MvcMiniProfiler.MiniProfiler.#ctor">
<summary>
Obsolete - used for serialization.
</summary>
</member>
<member name="M:MvcMiniProfiler.MiniProfiler.GetTimingHierarchy">
<summary>
Walks the <see cref="T:MvcMiniProfiler.Timing"/> hierarchy contained in this profiler, starting with <see cref="P:MvcMiniProfiler.MiniProfiler.Root"/>, and returns each Timing found.
</summary>
</member>
<member name="M:MvcMiniProfiler.MiniProfiler.GetSqlTimings">
<summary>
Returns all <see cref="T:MvcMiniProfiler.SqlTiming"/> results contained in all child <see cref="T:MvcMiniProfiler.Timing"/> steps.
</summary>
</member>
<member name="M:MvcMiniProfiler.MiniProfiler.GetRoundedMilliseconds(System.Int64)">
<summary>
Returns milliseconds based on Stopwatch's Frequency.
</summary>
</member>
<member name="M:MvcMiniProfiler.MiniProfiler.Start(MvcMiniProfiler.ProfileLevel)">
<summary>
Starts a new MiniProfiler for the current Request. This new profiler can be accessed by
<see cref="P:MvcMiniProfiler.MiniProfiler.Current"/>
</summary>
</member>
<member name="M:MvcMiniProfiler.MiniProfiler.Stop(System.Boolean)">
<summary>
Ends the current profiling session, if one exists.
</summary>
<param name="discardResults">
When true, clears the <see cref="P:MvcMiniProfiler.MiniProfiler.Current"/> for this HttpContext, allowing profiling to
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">
<summary>
Returns the css and javascript includes needed to display the MiniProfiler results UI.
</summary>
<returns>Script and link elements normally; an empty string when there is no active profiling session.</returns>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.Id">
<summary>
Identifies this Profiler so it may be stored/cached.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.Name">
<summary>
A display name for this profiling session.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.Started">
<summary>
When this profiler was instantiated.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.MachineName">
<summary>
Where this profiler was run.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.Level">
<summary>
Allows filtering of <see cref="T:MvcMiniProfiler.Timing"/> steps based on what <see cref="T:MvcMiniProfiler.ProfileLevel"/>
the steps are created with.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.Root">
<summary>
The first <see cref="T:MvcMiniProfiler.Timing"/> that is created and started when this profiler is instantiated.
All other <see cref="T:MvcMiniProfiler.Timing"/>s will be children of this one.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.SqlProfiler">
<summary>
Contains information about queries executed during this profiling session.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.DurationMilliseconds">
<summary>
Milliseconds, to one decimal place, that this MiniProfiler ran.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.DurationMillisecondsInSql">
<summary>
Milliseconds, to one decimal place, that this MiniProfiler was executing sql.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.HasSqlTimings">
<summary>
Returns true when we have profiled queries.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.ElapsedTicks">
<summary>
Ticks since this MiniProfiler was started.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.Head">
<summary>
Points to the currently executing Timing.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.Current">
<summary>
Gets the currently running MiniProfiler for the current HttpContext; null if no MiniProfiler was <see cref="M:MvcMiniProfiler.MiniProfiler.Start(MvcMiniProfiler.ProfileLevel)"/>ed.
</summary>
</member>
<member name="T:MvcMiniProfiler.MiniProfiler.Settings">
<summary>
Various configuration properties.
</summary>
</member>
<member name="M:MvcMiniProfiler.MiniProfiler.Settings.EnsureCacheMethods">
<summary>
When setters are null, creates default getters and setters that operate on the HttpRuntime.Cache.
</summary>
<remarks>
Our MiniProfiler must have these to run.
</remarks>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.Settings.WriteScriptsToResponseOnStop">
<summary>
When true, link and script tags will be written to the response stream when MiniProfiler.Stop is called.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.Settings.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.Settings.RenderPopupButtonOnRight">
<summary>
Dictates on which side of the page the profiler popup button is displayed; defaults to false (i.e. renders on left side).
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.Settings.IgnoredRootPaths">
<summary>
When <see cref="M:MvcMiniProfiler.MiniProfiler.Start(MvcMiniProfiler.ProfileLevel)"/> is called, if the current request url starts with this property,
no profiler will be instantiated and no results will be displayed.
Default value is { "/mini-profiler-includes.js", "/mini-profiler-includes.less", "/mini-profiler-results", "/content/", "/scripts/" }.
</summary>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.Settings.ShortTermCacheGetter">
<summary>
A method that will return a MiniProfiler when given a Guid. Meant for caching individual page profilings for a
very limited time.
</summary>
<remarks>
By default, MiniProfilers will be cached for 5 minutes in the HttpRuntime.Cache. This can be extended when the cache is shared
from its top link.
</remarks>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.Settings.ShortTermCacheSetter">
<summary>
A method that will save a MiniProfiler into a short-duration cache, so results can fetched down to the client after page load.
It is important that you cache the MiniProfiler under its Id, a Guid - this Id will be passed to the ShortTermCacheGetter.
</summary>
<remarks>
By default, MiniProfilers will be cached for 5 minutes in the HttpRuntime.Cache.
</remarks>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.Settings.LongTermCacheGetter">
<summary>
A method that will return a MiniProfiler when given a Guid. Meant for caching profilings for an extended period of time, so
they may be shared with others.
</summary>
<remarks>
This is used by the full page results view, which is linked in the popup's header.
</remarks>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.Settings.LongTermCacheSetter">
<summary>
A method that will save a MiniProfiler, identified by its Guid Id, into long-term storage. Allows results to be shared with others.
It is important that you cache the MiniProfiler under its Id, a Guid - this Id will be passed to the LongTermCacheGetter.
</summary>
<remarks>
This is activated EVERY TIME the top left header link is clicked in the popup UI and the full page results
view is displayed. When overriding the default, your code will need to handle setting the same profiler
back into your chosen storage medium (e.g. no-op when it already exists).
</remarks>
</member>
<member name="P:MvcMiniProfiler.MiniProfiler.Settings.Version">
<summary>
Assembly version of this dank MiniProfiler.
</summary>
</member>
<member name="T:MvcMiniProfiler.UI.MiniProfilerHandler">
<summary>
Understands how to route and respond to MiniProfiler UI urls.
</summary>
</member>
<member name="M:MvcMiniProfiler.UI.MiniProfilerHandler.GetHttpHandler(System.Web.Routing.RequestContext)">
<summary>
Returns this <see cref="T:MvcMiniProfiler.UI.MiniProfilerHandler"/> to handle <paramref name="requestContext"/>.
</summary>
</member>
<member name="M:MvcMiniProfiler.UI.MiniProfilerHandler.ProcessRequest(System.Web.HttpContext)">
<summary>
Returns either includes' css/javascript or results' html.
</summary>
</member>
<member name="M:MvcMiniProfiler.UI.MiniProfilerHandler.Includes(System.Web.HttpContext)">
<summary>
Handles rendering our .js and .less static content files.
</summary>
</member>
<member name="M:MvcMiniProfiler.UI.MiniProfilerHandler.Results(System.Web.HttpContext)">
<summary>
Handles rendering a previous MiniProfiler session, identified by its "?id=GUID" on the query.
</summary>
</member>
<member name="F:MvcMiniProfiler.UI.MiniProfilerHandler._ResourceCache">
<summary>
Embedded resource contents keyed by filename.
</summary>
</member>
<member name="M:MvcMiniProfiler.UI.MiniProfilerHandler.NotFound(System.Web.HttpContext,System.String,System.String)">
<summary>
Helper method that sets a proper 404 response code.
</summary>
</member>
<member name="P:MvcMiniProfiler.UI.MiniProfilerHandler.IsReusable">
<summary>
Try to keep everything static so we can easily be reused.
</summary>
</member>
<member name="T:MvcMiniProfiler.Data.Link`2">
<summary>
This is a micro-cache; suitable when the number of terms is controllable (a few hundred, for example),
and strictly append-only; you cannot change existing values. All key matches are on **REFERENCE**
equality. The type is fully thread-safe.
</summary>
</member>
<member name="T:MvcMiniProfiler.ProfileLevel">
<summary>
Categorizes individual <see cref="T:MvcMiniProfiler.Timing"/> steps to allow filtering.
</summary>
</member>
<member name="F:MvcMiniProfiler.ProfileLevel.Info">
<summary>
Default level given to Timings.
</summary>
</member>
<member name="F:MvcMiniProfiler.ProfileLevel.Verbose">
<summary>
Useful when profiling many items in a loop, but you don't wish to always see this detail.
</summary>
</member>
<member name="T:MvcMiniProfiler.MiniProfilerExtensions">
<summary>
Contains helper methods that ease working with null <see cref="T:MvcMiniProfiler.MiniProfiler"/>s.
</summary>
</member>
<member name="M:MvcMiniProfiler.MiniProfilerExtensions.Inline``1(MvcMiniProfiler.MiniProfiler,System.Func{``0},System.String)">
<summary>
Wraps <paramref name="selector"/> in a <see cref="M:MvcMiniProfiler.MiniProfilerExtensions.Step(MvcMiniProfiler.MiniProfiler,System.String,MvcMiniProfiler.ProfileLevel)"/> call and executes it, returning its result.
</summary>
<param name="profiler">The current profiling session or null.</param>
<param name="selector">Method to execute and profile.</param>
<param name="name">The <see cref="T:MvcMiniProfiler.Timing"/> step name used to label the profiler results.</param>
<returns></returns>
</member>
<member name="M:MvcMiniProfiler.MiniProfilerExtensions.Step(MvcMiniProfiler.MiniProfiler,System.String,MvcMiniProfiler.ProfileLevel)">
<summary>
Returns an <see cref="T:System.IDisposable"/> that will time the code between its creation and disposal.
</summary>
<param name="profiler">The current profiling session or null.</param>
<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.MiniProfilerExtensions.AddProfilerResults(MvcMiniProfiler.MiniProfiler,MvcMiniProfiler.MiniProfiler)">
<summary>
Adds <paramref name="externalProfiler"/>'s <see cref="T:MvcMiniProfiler.Timing"/> hierarchy to this profiler's current Timing step,
allowing other threads, remote calls, etc. to be profiled and joined into this profiling session.
</summary>
</member>
<member name="M:MvcMiniProfiler.MiniProfilerExtensions.Render(MvcMiniProfiler.MiniProfiler)">
<summary>
Returns an html-encoded string with a text-representation of <paramref name="profiler"/>; returns "" when profiler is null.
</summary>
<param name="profiler">The current profiling session or null.</param>
</member>
</members>
</doc>