Merge with Kayone.

pull/4/head
Mark McDowall 13 years ago
commit 85d5b07c67

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

@ -19,11 +19,5 @@
<bindingRedirect oldVersion="0.0.0.0-1.0.72.0" newVersion="1.0.72.0"/>
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="2.5.1.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

@ -22,7 +22,6 @@ namespace NzbDrone.Core.Test
{
var series = Builder<Series>.CreateNew()
.With(s => s.SeriesId = 12)
.With(s => s.Episodes = Builder<Episode>.CreateListOfSize(10).Build())
.Build();
var mocker = new AutoMoqer(MockBehavior.Strict);
@ -44,26 +43,6 @@ namespace NzbDrone.Core.Test
}
[Test]
public void series_with_no_episodes_should_skip_scan()
{
var series = Builder<Series>.CreateNew()
.With(s => s.SeriesId = 12)
.With(s => s.Episodes = new List<Episode>())
.Build();
var mocker = new AutoMoqer(MockBehavior.Strict);
mocker.GetMock<SeriesProvider>()
.Setup(p => p.GetSeries(series.SeriesId))
.Returns(series);
//Act
mocker.Resolve<DiskScanJob>().Start(new ProgressNotification("Test"), series.SeriesId);
//Assert
mocker.VerifyAllMocks();
}
[Test]
public void job_with_no_target_should_scan_all_series()
@ -71,7 +50,6 @@ namespace NzbDrone.Core.Test
var series = Builder<Series>.CreateListOfSize(2)
.WhereTheFirst(1).Has(s => s.SeriesId = 12)
.AndTheNext(1).Has(s => s.SeriesId = 15)
.WhereAll().Have(s => s.Episodes = Builder<Episode>.CreateListOfSize(10).Build())
.Build();
var mocker = new AutoMoqer(MockBehavior.Strict);
@ -100,7 +78,6 @@ namespace NzbDrone.Core.Test
var series = Builder<Series>.CreateListOfSize(2)
.WhereTheFirst(1).Has(s => s.SeriesId = 12)
.AndTheNext(1).Has(s => s.SeriesId = 15)
.WhereAll().Have(s => s.Episodes = Builder<Episode>.CreateListOfSize(10).Build())
.Build();
var mocker = new AutoMoqer(MockBehavior.Strict);
@ -129,9 +106,7 @@ namespace NzbDrone.Core.Test
{
var series = Builder<Series>.CreateListOfSize(2)
.WhereTheFirst(1).Has(s => s.SeriesId = 12)
.And(s => s.Episodes = Builder<Episode>.CreateListOfSize(10).Build())
.AndTheNext(1).Has(s => s.SeriesId = 15)
.And(s => s.Episodes = new List<Episode>())
.Build();
var mocker = new AutoMoqer(MockBehavior.Strict);
@ -144,10 +119,16 @@ namespace NzbDrone.Core.Test
.Setup(s => s.Scan(series[0]))
.Returns(new List<EpisodeFile>());
mocker.GetMock<MediaFileProvider>()
.Setup(s => s.Scan(series[1]))
.Returns(new List<EpisodeFile>());
mocker.Resolve<DiskScanJob>().Start(new ProgressNotification("Test"), 0);
mocker.VerifyAllMocks();
mocker.GetMock<MediaFileProvider>().Verify(s => s.Scan(It.IsAny<Series>()), Times.Exactly(2));
}
}

@ -21,12 +21,13 @@ namespace NzbDrone.Core.Test
public void import_new_series_succesfull()
{
var series = Builder<Series>.CreateListOfSize(2)
.WhereAll().Have(s => s.Episodes = Builder<Episode>.CreateListOfSize(10).Build())
.WhereAll().Have(s => s.LastInfoSync = null)
.WhereTheFirst(1).Has(s => s.SeriesId = 12)
.AndTheNext(1).Has(s => s.SeriesId = 15)
.Build();
var episodes = Builder<Episode>.CreateListOfSize(10).Build();
var notification = new ProgressNotification("Test");
var mocker = new AutoMoqer(MockBehavior.Strict);
@ -63,6 +64,12 @@ namespace NzbDrone.Core.Test
.Setup(s => s.GetSeries(series[1].SeriesId)).Returns(series[1]);
mocker.GetMock<EpisodeProvider>()
.Setup(s => s.GetEpisodeBySeries(series[0].SeriesId)).Returns(episodes);
mocker.GetMock<EpisodeProvider>()
.Setup(s => s.GetEpisodeBySeries(series[1].SeriesId)).Returns(episodes);
mocker.GetMock<MediaFileProvider>()
.Setup(s => s.GetSeriesFiles(It.IsAny<int>())).Returns(new List<EpisodeFile>());
@ -81,12 +88,13 @@ namespace NzbDrone.Core.Test
public void failed_import_should_not_be_stuck_in_loop()
{
var series = Builder<Series>.CreateListOfSize(2)
.WhereAll().Have(s => s.Episodes = Builder<Episode>.CreateListOfSize(10).Build())
.WhereAll().Have(s => s.LastInfoSync = null)
.WhereTheFirst(1).Has(s => s.SeriesId = 12)
.AndTheNext(1).Has(s => s.SeriesId = 15)
.Build();
var episodes = Builder<Episode>.CreateListOfSize(10).Build();
var notification = new ProgressNotification("Test");
var mocker = new AutoMoqer(MockBehavior.Strict);
@ -117,6 +125,9 @@ namespace NzbDrone.Core.Test
mocker.GetMock<MediaFileProvider>()
.Setup(s => s.GetSeriesFiles(It.IsAny<int>())).Returns(new List<EpisodeFile>());
mocker.GetMock<EpisodeProvider>()
.Setup(s => s.GetEpisodeBySeries(It.IsAny<long>())).Returns(episodes);
//Act
mocker.Resolve<ImportNewSeriesJob>().Start(notification, 0);

@ -310,31 +310,17 @@ namespace NzbDrone.Core.Test
mocker.GetMock<SeriesProvider>()
.Setup(c => c.UpdateSeries(It.Is<Series>(s => s.LastDiskSync != null))).Verifiable();
mocker.GetMock<EpisodeProvider>()
.Setup(c => c.GetEpisodeBySeries(It.IsAny<long>()))
.Returns(new List<Episode>{new Episode()});
mocker.Resolve<MediaFileProvider>().Scan(new Series());
mocker.VerifyAllMocks();
}
[Test]
public void scan_media_job_should_not_scan_new_series()
{
var mocker = new AutoMoqer();
var fakeSeries = Builder<Series>.CreateListOfSize(2)
.WhereTheFirst(1).Has(c => c.Episodes = new List<Episode>())
.AndTheNext(1).Has(c => c.Episodes = Builder<Episode>.CreateListOfSize(10).Build())
.Build();
mocker.GetMock<SeriesProvider>()
.Setup(c => c.GetAllSeries()).Returns(fakeSeries);
mocker.GetMock<MediaFileProvider>(MockBehavior.Strict)
.Setup(c => c.Scan(fakeSeries.ToList()[1])).Returns(new List<EpisodeFile>()).Verifiable();
mocker.Resolve<DiskScanJob>().Start(new ProgressNotification("test"), 0);
mocker.VerifyAllMocks();
}
[Test]
public void get_series_files()
{
@ -390,7 +376,7 @@ namespace NzbDrone.Core.Test
diskProvider.Setup(d => d.GetExtension(It.IsAny<string>())).Returns(".avi");
var episodeProvider = mocker.GetMock<EpisodeProvider>();
episodeProvider.Setup(e => e.GetEpisodes(It.IsAny<EpisodeParseResult>())).Returns(new List<Episode> {fakeEpisode});
episodeProvider.Setup(e => e.GetEpisodes(It.IsAny<EpisodeParseResult>())).Returns(new List<Episode> { fakeEpisode });
episodeProvider.Setup(e => e.GetEpisode(fakeSeries.SeriesId, 1, 5)).Returns(fakeEpisode);
var configProvider = mocker.GetMock<ConfigProvider>();
@ -436,7 +422,7 @@ namespace NzbDrone.Core.Test
.With(e => e.SeriesId = fakeSeries.SeriesId)
.With(e => e.EpisodeFileId = 1)
.With(e => e.Quality = QualityTypes.SDTV)
.With(e => e.Episodes = new List<Episode>{ fakeEpisode })
.With(e => e.Episodes = new List<Episode> { fakeEpisode })
.Build();
fakeEpisode.EpisodeFile = fakeEpisodeFile;
@ -477,5 +463,26 @@ namespace NzbDrone.Core.Test
mocker.VerifyAllMocks();
Assert.AreEqual(1, result.Count);
}
[Test]
public void Scan_series_should_skip_series_with_no_episodes()
{
var mocker = new AutoMoqer(MockBehavior.Strict);
mocker.GetMock<EpisodeProvider>()
.Setup(c => c.GetEpisodeBySeries(12))
.Returns(new List<Episode>());
var series = Builder<Series>.CreateNew()
.With(s => s.SeriesId = 12).Build();
//Act
mocker.Resolve<MediaFileProvider>().Scan(series);
//Assert
mocker.VerifyAllMocks();
}
}
}

@ -36,9 +36,6 @@
<Reference Include="Accessibility">
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="Castle.Core">
<HintPath>..\packages\Castle.Core.2.5.2\lib\NET35\Castle.Core.dll</HintPath>
</Reference>
<Reference Include="FizzWare.NBuilder">
<HintPath>..\packages\NBuilder.2.3.0.0\lib\FizzWare.NBuilder.dll</HintPath>
</Reference>
@ -59,9 +56,6 @@
<Reference Include="Moq, Version=4.0.10827.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
<HintPath>..\packages\Moq.4.0.10827\lib\NET40\Moq.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>
<Reference Include="NLog, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Libraries\NLog.dll</HintPath>

@ -40,6 +40,29 @@ namespace NzbDrone.Core.Test
Assert.AreEqual(testProfile.Allowed, fetch.Allowed);
}
[Test]
public void Test_Storage_no_allowed()
{
//Arrange
var database = MockLib.GetEmptyDatabase();
var testProfile = new QualityProfile
{
Name = Guid.NewGuid().ToString(),
Cutoff = QualityTypes.SDTV
};
//Act
var id = Convert.ToInt32(database.Insert(testProfile));
var fetch = database.SingleOrDefault<QualityProfile>(id);
//Assert
Assert.AreEqual(id, fetch.QualityProfileId);
Assert.AreEqual(testProfile.Name, fetch.Name);
Assert.AreEqual(testProfile.Cutoff, fetch.Cutoff);
fetch.Allowed.Should().HaveCount(0);
}
[Test]
public void Test_Series_Quality()
{

@ -333,7 +333,7 @@ namespace NzbDrone.Core.Test
//Act
bool result = mocker.Resolve<SabProvider>().AddByUrl(
"http://www.newzbin.com/browse/post/6107863/nzb", "This is an Nzb");
"http://www.newzbin.com/browse/post/6107863/nzb", "Added by unit tests.");
//Assert
Assert.IsTrue(result);

@ -3,10 +3,7 @@
<package id="NBuilder" version="2.3.0.0" />
<package id="AutoMoq" version="1.3.1.3" />
<package id="Moq" version="4.0.10827" />
<package id="Ninject" version="2.2.1.4" />
<package id="CommonServiceLocator" version="1.0" />
<package id="Unity" version="2.1.505.0" />
<package id="NUnit" version="2.5.10.11092" />
<package id="PetaPoco.Core" version="4.0.2" />
<package id="Castle.Core" version="2.5.2" />
</packages>

@ -121,10 +121,6 @@
<StartupObject />
</PropertyGroup>
<ItemGroup>
<Reference Include="Castle.Core, Version=2.5.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Libraries\Castle.Core.dll</HintPath>
</Reference>
<Reference Include="Exceptioneer.WindowsFormsClient, Version=1.0.0.812, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Libraries\Exceptioneer.WindowsFormsClient.dll</HintPath>
@ -203,7 +199,6 @@
<Compile Include="Providers\Jobs\RssSyncJob.cs" />
<Compile Include="Providers\Jobs\UpdateInfoJob.cs" />
<Compile Include="Providers\SceneMappingProvider.cs" />
<Compile Include="Providers\StatsProvider.cs" />
<Compile Include="Repository\ExternalNotificationSetting.cs" />
<Compile Include="Repository\JobSetting.cs" />
<Compile Include="Repository\IndexerSetting.cs" />
@ -298,9 +293,6 @@
<Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
</ItemGroup>
<ItemGroup>
<WCFMetadata Include="Service References\" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

@ -47,7 +47,7 @@ namespace NzbDrone.Core.Providers.Jobs
seriesToScan = new List<Series>() { _seriesProvider.GetSeries(targetId) };
}
foreach (var series in seriesToScan.Where(c => c.Episodes.Count != 0))
foreach (var series in seriesToScan)
{
try
{

@ -16,6 +16,7 @@ namespace NzbDrone.Core.Providers.Jobs
public class ImportNewSeriesJob : IJob
{
private readonly SeriesProvider _seriesProvider;
private readonly EpisodeProvider _episodeProvider;
private readonly MediaFileProvider _mediaFileProvider;
private readonly UpdateInfoJob _updateInfoJob;
private readonly DiskScanJob _diskScanJob;
@ -25,10 +26,11 @@ namespace NzbDrone.Core.Providers.Jobs
private List<int> _attemptedSeries;
[Inject]
public ImportNewSeriesJob(SeriesProvider seriesProvider,
public ImportNewSeriesJob(SeriesProvider seriesProvider, EpisodeProvider episodeProvider,
MediaFileProvider mediaFileProvider, UpdateInfoJob updateInfoJob, DiskScanJob diskScanJob)
{
_seriesProvider = seriesProvider;
_episodeProvider = episodeProvider;
_mediaFileProvider = mediaFileProvider;
_updateInfoJob = updateInfoJob;
_diskScanJob = diskScanJob;
@ -85,7 +87,7 @@ namespace NzbDrone.Core.Providers.Jobs
private void AutoIgnoreSeasons(Series updatedSeries)
{
var episodeFiles = _mediaFileProvider.GetSeriesFiles(updatedSeries.SeriesId);
var episodes = updatedSeries.Episodes;
var episodes = _episodeProvider.GetEpisodeBySeries(updatedSeries.SeriesId);
if (episodeFiles.Count() != 0)
{
var seasons = episodes.Select(c => c.SeasonNumber).Distinct();
@ -98,17 +100,6 @@ namespace NzbDrone.Core.Providers.Jobs
}
}
/* 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);
}
}*/
}
}
}

@ -43,6 +43,12 @@ namespace NzbDrone.Core.Providers
/// <param name = "series">The series to be scanned</param>
public virtual List<EpisodeFile> Scan(Series series)
{
if (_episodeProvider.GetEpisodeBySeries(series.SeriesId).Count == 0)
{
Logger.Debug("Series {0} has no episodes. skipping", series.Title);
return new List<EpisodeFile>();
}
var mediaFileList = GetMediaFileList(series.Path);
var fileList = new List<EpisodeFile>();

@ -51,9 +51,9 @@ namespace NzbDrone.Core.Providers
return profiles;
}
public virtual QualityProfile Find(int profileId)
public virtual QualityProfile Get(int profileId)
{
return _database.SingleOrDefault<QualityProfile>(profileId);
return _database.Single<QualityProfile>(profileId);
}
public virtual void SetupDefaultProfiles()

@ -38,13 +38,18 @@ namespace NzbDrone.Core.Providers
public virtual IList<Series> GetAllSeries()
{
var series = _database.Fetch<Series>();
series.ForEach(c => c.QualityProfile = _qualityProvider.Find(c.QualityProfileId));
series.ForEach(c => c.QualityProfile = _qualityProvider.Get(c.QualityProfileId));
return series;
}
public virtual Series GetSeries(int seriesId)
{
return _database.Single<Series>("WHERE seriesId= @0", seriesId);
var series = _database.SingleOrDefault<Series>("WHERE seriesId= @0", seriesId);
if (series != null)
{
series.QualityProfile = _qualityProvider.Get(series.QualityProfileId);
}
return series;
}
/// <summary>

@ -1,78 +0,0 @@
using System;
using System.Linq;
using Ninject;
namespace NzbDrone.Core.Providers
{
public class StatsProvider
{
private readonly SeriesProvider _seriesProvider;
[Inject]
public StatsProvider(SeriesProvider seriesProvider)
{
_seriesProvider = seriesProvider;
}
public virtual int SeriesCount()
{
return _seriesProvider.GetAllSeries().Count();
}
public virtual int ActiveSeriesCount()
{
return _seriesProvider.GetAllSeries().Where(s => s.Status == "Continuing").Count();
}
public virtual int EndedSeriesCount()
{
return _seriesProvider.GetAllSeries().Where(s => s.Status == "Ended").Count();
}
public virtual int TotalEpisodesCount()
{
var count = 0;
var series = _seriesProvider.GetAllSeries();
foreach (var s in series)
{
count += s.Episodes.Count;
}
return count;
}
public virtual int TotalAiredEpisodesCount()
{
var count = 0;
var series = _seriesProvider.GetAllSeries();
foreach (var s in series)
{
count += s.Episodes.Where(e => e.AirDate.Date <= DateTime.Today).Count();
}
return count;
}
public virtual int TotalUnairedEpisodesCount()
{
var count = 0;
var series = _seriesProvider.GetAllSeries();
foreach (var s in series)
{
count += s.Episodes.Where(e => e.AirDate.Date > DateTime.Today).Count();
}
return count;
}
public virtual int TotalEpisodesOnDisk()
{
var count = 0;
var series = _seriesProvider.GetAllSeries();
foreach (var s in series)
{
count += s.Episodes.Where(e => e.EpisodeFileId != 0).Count();
}
return count;
}
}
}

@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using NzbDrone.Core.Model;
using PetaPoco;
@ -9,30 +8,26 @@ namespace NzbDrone.Core.Repository
[PrimaryKey("EpisodeId", autoIncrement = true)]
public class Episode
{
public int EpisodeId { get; set; }
public virtual int EpisodeId { get; set; }
public int? TvDbEpisodeId { get; set; }
public virtual int? TvDbEpisodeId { get; set; }
public int SeriesId { get; set; }
public int EpisodeFileId { get; set; }
public int SeasonNumber { get; set; }
public int EpisodeNumber { get; set; }
public string Title { get; set; }
public DateTime AirDate { get; set; }
public virtual int SeriesId { get; set; }
public virtual int EpisodeFileId { get; set; }
public virtual int SeasonNumber { get; set; }
public virtual int EpisodeNumber { get; set; }
public virtual string Title { get; set; }
public virtual DateTime AirDate { get; set; }
public string Overview { get; set; }
public virtual string Overview { get; set; }
public virtual Boolean Ignored { get; set; }
public Boolean Ignored { get; set; }
[Ignore]
public Boolean IsDailyEpisode
{
get
{
return EpisodeNumber == 0;
}
get { return EpisodeNumber == 0; }
}
/// <summary>
@ -42,7 +37,7 @@ namespace NzbDrone.Core.Repository
/// Used to specify when the episode was grapped.
/// this filed is used by status as an expirable "Grabbed" status.
/// </remarks>
public virtual DateTime? GrabDate { get; set; }
public DateTime? GrabDate { get; set; }
[Ignore]
@ -71,25 +66,21 @@ namespace NzbDrone.Core.Repository
[Ignore]
public virtual Series Series { get; set; }
public Series Series { get; set; }
[Ignore]
public virtual EpisodeFile EpisodeFile { get; set; }
public EpisodeFile EpisodeFile { get; set; }
[Ignore]
public virtual IList<History> Histories { get; protected set; }
public override string ToString()
{
var seriesTitle = Series == null ? "[NULL]" : Series.Title;
string seriesTitle = Series == null ? "[NULL]" : Series.Title;
if (IsDailyEpisode)
return string.Format("{0} - {1}", seriesTitle, AirDate.Date);
return string.Format("{0} - S{1:00}E{2:00}", seriesTitle, SeasonNumber, EpisodeNumber);
}
}
}

@ -9,10 +9,10 @@ namespace NzbDrone.Core.Repository
[PrimaryKey("EpisodeFileId", autoIncrement = true)]
public class EpisodeFile
{
public virtual int EpisodeFileId { get; set; }
public int EpisodeFileId { get; set; }
public virtual int SeriesId { get; set; }
public virtual int SeasonNumber { get; set; }
public int SeriesId { get; set; }
public int SeasonNumber { get; set; }
public string Path { get; set; }
public QualityTypes Quality { get; set; }
public bool Proper { get; set; }
@ -20,9 +20,9 @@ namespace NzbDrone.Core.Repository
public DateTime DateAdded { get; set; }
[Ignore]
public virtual IList<Episode> Episodes { get; set; }
public IList<Episode> Episodes { get; set; }
[Ignore]
public virtual Series Series { get; set; }
public Series Series { get; set; }
}
}

@ -14,4 +14,4 @@ namespace NzbDrone.Core.Repository
public string Name { get; set; }
}
}
}

@ -1,4 +1,5 @@
using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
@ -10,7 +11,6 @@ namespace NzbDrone.Core.Repository.Quality
[PrimaryKey("QualityProfileId", autoIncrement = true)]
public class QualityProfile
{
public virtual int QualityProfileId { get; set; }
[Required(ErrorMessage = "A Name is Required")]
@ -49,15 +49,11 @@ namespace NzbDrone.Core.Repository.Quality
{
var qualities = value.Split('|');
Allowed = new List<QualityTypes>(qualities.Length);
foreach (var quality in qualities)
foreach (var quality in qualities.Where(q => !String.IsNullOrWhiteSpace(q)))
{
Allowed.Add((QualityTypes)Convert.ToInt32(quality));
}
}
}
[Ignore]
public virtual List<Series> Series { get; private set; }
}
}

@ -10,32 +10,32 @@ namespace NzbDrone.Core.Repository.Quality
/// Quality is unknown
/// </summary>
Unknown = 0,
/// <summary>
/// SD File (Source could be HD)
/// </summary>
SDTV = 1,
/// <summary>
/// SD File (DVD Source)
/// </summary>
DVD = 2,
/// <summary>
/// HD File (HDTV Source)
/// </summary>
HDTV = 4,
/// <summary>
/// HD File (Online Source)
/// </summary>
WEBDL = 5,
/// <summary>
/// HD File (720p Blu-ray Source)
/// </summary>
Bluray720p = 6,
/// <summary>
/// HD File (1080p Blu-ray Source)
/// </summary>

@ -6,10 +6,10 @@ namespace NzbDrone.Core.Repository
[PrimaryKey("CleanTitle", autoIncrement = false)]
public class SceneMapping
{
public virtual string CleanTitle { get; set; }
public string CleanTitle { get; set; }
public virtual int SeriesId { get; set; }
public int SeriesId { get; set; }
public virtual string SceneName { get; set; }
public string SceneName { get; set; }
}
}
}

@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using NzbDrone.Core.Repository.Quality;
using PetaPoco;
@ -9,7 +8,6 @@ namespace NzbDrone.Core.Repository
[PrimaryKey("SeriesId", autoIncrement = false)]
public class Series
{
public virtual int SeriesId { get; set; }
@ -38,15 +36,6 @@ namespace NzbDrone.Core.Repository
public bool Monitored { get; set; }
/// <summary>
/// Gets or sets a value indicating whether this <see cref="Series"/> is hidden.
/// </summary>
/// <value><c>true</c> if hidden; otherwise, <c>false</c>.</value>
/// <remarks>This field will be used for shows that are pending delete or
/// new series that haven't been successfully imported</remarks>
[Ignore]
public bool Hidden { get; set; }
public virtual int QualityProfileId { get; set; }
public bool SeasonFolder { get; set; }
@ -55,13 +44,16 @@ namespace NzbDrone.Core.Repository
public DateTime? LastDiskSync { get; set; }
/// <summary>
/// Gets or sets a value indicating whether this <see cref="Series"/> is hidden.
/// </summary>
/// <value><c>true</c> if hidden; otherwise, <c>false</c>.</value>
/// <remarks>This field will be used for shows that are pending delete or
/// new series that haven't been successfully imported</remarks>
[Ignore]
public virtual QualityProfile QualityProfile { get; set; }
[Ignore]
public virtual IList<Episode> Episodes { get; set; }
public bool Hidden { get; set; }
[Ignore]
public virtual IList<EpisodeFile> EpisodeFiles { get; protected set; }
public QualityProfile QualityProfile { get; set; }
}
}

@ -1,140 +0,0 @@
Release notes moved to bottom of file!
--------------------------------------
Using Glimpse
-------------
Thank you for NuGetting Glimpse, A client side Glimpse into whats going on in your server.
Glimpse is currently in Beta.
If you experience any issues, or have feature requests, please report them to https://github.com/Glimpse/Glimpse/issues
To get started with Glimpse, visit [http://yoursite.com]/Glimpse/Config/ This page hosts the Glimpse bookmarklets, useful for quickly turning on Glimpse.
The following configuration values are allowed for Glimpse in your web.config:
<glimpse on="true" saveRequestCount="5"> <!-- set on to false to completly turn off Glimpse. saveRequestCount specifies the max number of requests Glimpse will save -->
<ipAddresses> <!-- List of IP addresses allowed to get Glimpse data. localhost (IPv4 & IPv6) by default -->
<add address="127.0.0.1" />
<add address="::1" />
</ipAddresses>
<contentTypes>
<add contentType="text/html"/>
</contentTypes>
<pluginBlacklist>
<add plugin="Glimpse.Net.Plugin.Asp.Request"/>
<add plugin="Glimpse.Net.Plugin.Mvc.MetaData"/>
</pluginBlacklist>
</glimpse>
For more info, visit the homepage at http://getGlimpse.com or follow #glimpse on Twitter.
Overview
--------
At its core Glimpse allows you to debug your web site right in the browser. Glimpse allows you to "Glimpse" into what's going on in your web server. In other words what Firebug is to debugging your client side code, Glimpse is to debugging your server within the client.
Fundamentally Glimpse is made up of 3 different parts, all of which are extensible and customizable for any platform:
* Glimpse Server Module
* Glimpse Client Side Viewer
* Glimpse Protocol
How it Works
------------
On the Server:
1. Server collects all server side information that will aid in debugging (i.e. application settings, routes, session variables, trace data, etc)
2. It does this by running through a pipeline of server side data providers that can be dynamically controlled and added to under our plugin architecture
3. Before the response is send, the server formats this data in accordance with the Glimpse Protocol and serializes it as JSON
4. Depending on whether it is an Ajax request or not, the server embeds the JSON in the content of the page
On the Client:
5. Depending on whether it is a Ajax request or not, the client picks up the JSON data and displays the it by executing a pipeline of client side data providers that can be dynamically controlled and added to under our plugin architecture
6. The client side module then dynamically renders a client side UI (similar to Firebug Lite) that lets you view this data
Glimpse can be turned on or off by a series of different mechanisms, but at its core if the Glimpse cookie is present the server will provide the "debug" data - as a security measure, the request for debug data is "authenticated".
Server Implementations
----------------------
Given the scope of the project and what it can do, the concept isn't restricted to any one platform. Hence, once mature, Glimpse Server Module will be available on all major web platforms.
Platforms currently supported:
* ASP.Net MVC
Platforms target to be supported:
* ASP.Net Web Forms
* PHP
* Ruby on Rails
NOTE - If you would like help develop a Glimpse Server Module for a given platform please let us know.
Client Implementations
----------------------
To start with the Glimpse Client Side Viewer is simply a light weight JavaScript "plugin" that understands the Glimpse Protocol and knows how to render the data. From a technology standpoint we currently use jQuery as the client side framework.
Eventually, we would like to have actual browser plugins that provide richer functionality and experience, but the JavaScript version of the Glimpse Client Side Viewer is surprisingly well featured, intuitive and provides a high fidelity experience. We also hope to have a version for mobile ready soon which customizes the viewing/usage experience when using a mobile device.
Protocol
--------
Details coming soon.
Release Notes
-------------
05/08/2011 - 0.81
- Changed plugin initialization so that SetupInit is only called once.
- Added list of loaded plugins to Glimpse/Config
- Added node to configuration to allow for blacklisting unwanted plugins. Configuration takes the form <glimpse><pluginBlacklist><add plugin="[Type.Name.Including.Namespace]"/></pluginBlacklist></glimpse>
- Updated Binding plugin to have acctual view data
- Fixed bugs with getting NotImplemented exceptions on trace tab
- Fixed bugs with users who were extending DefaultModelBinder
- Added ability to set glimpseState (cookie) to Hidden, which allows Glimpse to record and track remote client requests without rendering UI/Data to their response. (Useful for use with the remote tab)
- Added GlimpseTrace static facade to simplify tracing
04/28/2011 - 0.80
- Removed dependency on System.Drawing
- Fixed bugs related to projects that used custom ControllerActionInvokers
- Fixed bugs related to projects using custom FilterProviders
- Added MetaData tab which gives details of primary View Model and primary View Models properties (note this is not recursive at the moment)
- Environment tab now shows site trust level
- Performance improvments for supporting virtual directories
- Glimpse should now work in jQuery noConflict mode
- Added Glimpse Warnings tab, used to help debug Glimpse problems going forward
04/20/2011 - 0.79
- Client bug fixes for popout window
- Client bug fixes for virtual directories
- Various javascript fixes
04/16/2011 - 0.78
- Breaking change is you created custom plugins. Plugin interface moved from Glimpse.Protocol to Glimpse.Net.Extensibility namespace
- Fixed bug which threw ReflectionTypeLoadExceptions by using custom SafeDirectoryCatalog (Special thanks to Craig Wagner for helping us track this down!)
- Fixed pathing issues experienced by users hosting from virtual directories
- Added Request tab to show form, query string and cookies as the server saw them
- Added ViewData/ViewBag and TempData info to the details column of the Views tab
- Added Area support to Routes tab
- Added Glimpse Warnings tab, which will only appear when a MEF loading issue is thrown
- Added ability to open Glimpse in popup mode (alpha)
- Added symbols package to symbolsource.org for simplified debugging by the community
04/14/2011 - 0.77
- Fixed issues with most InvalidOperationException's/Circular references. Now if there is an issue, handle it more gracefully, and it only affects one tab. (More complete fix coming soon!)
- /Glimpse/Config is no longer case sensitive, and certain reports of 404s to this page have been fixed. In addition, this page has been improved to be more understandable.
- As of right now, Glimpse only supports MVC3. We have identified the issues with MVC2, and are working to correct them. Special shout out to @rugvedvaidya for providing the (long!) workaround to get Glimpse running on MVC2.
04/13/2011 - 0.76
- Added "Time Elapsed" column to the Execution tab.
- Fixed 2 bugs with IE9 client rendering.
- Fixed bug with CSS text-alignment.
- Changed to Apache 2 license.
Attribution
-----------
Some Icons are Copyright © Yusuke Kamiyamane. [http://p.yusukekamiyamane.com/]

@ -49,9 +49,6 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Libraries\Castle.Core.dll</HintPath>
</Reference>
<Reference Include="Glimpse.Net">
<HintPath>..\packages\Glimpse.0.81\lib\net40\Glimpse.Net.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Libraries\MVC3\Microsoft.Web.Infrastructure.dll</HintPath>
@ -281,7 +278,6 @@
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="App_Readme\glimpse.readme.txt" />
<Content Include="Content\2011.1.315\Black\editor.png" />
<Content Include="Content\2011.1.315\Black\imagebrowser.png" />
<Content Include="Content\2011.1.315\Black\loading.gif" />

@ -1,8 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="glimpse" type="Glimpse.Net.Configuration.GlimpseConfiguration" />
</configSections>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
</startup>
@ -11,7 +8,7 @@
<add key="UnobtrusiveJavaScriptEnabled" value="false" />
</appSettings>
<system.web>
<trust level="Full" originUrl=".*" />
<trust level="Full" originUrl=".*" />
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
@ -64,8 +61,8 @@
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-1.0.72.0" newVersion="1.0.72.0"/>
<assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.0.72.0" newVersion="1.0.72.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
@ -75,15 +72,4 @@
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
</DbProviderFactories>
</system.data>
<glimpse on="false" saveRequestCount="5">
<ipAddresses>
<add address="0.0.0.0" />
<!--IPv4-->
<add address="::1" />
<!--IPv6-->
</ipAddresses>
<contentTypes>
<add contentType="text/html" />
</contentTypes>
</glimpse>
</configuration>

@ -2,7 +2,6 @@
<packages>
<package id="Ninject.Web.Mvc2" version="2.2.0.1" />
<package id="TelerikMvcExtensions" version="2011.1.315" />
<package id="Glimpse" version="0.81" />
<package id="WebActivator" version="1.4.1" />
<package id="Ninject.MVC3" version="2.2.2.0" />
<package id="Ninject" version="2.2.1.4" />

@ -1,57 +0,0 @@
Apache License, Version 2.0
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
2. You must cause any modified files to carry prominent notices stating that You changed the files; and
3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS

@ -1,55 +0,0 @@
================================================================================================
change - Removed WebLogger and WebLoggerFactory
impact - low
fixability - medium
revision -
description - To minimize management overhead the classes were removed so that only single
Client Profile version of Castle.Core can be distributed.
fix - You can use NLog or Log4Net web logger integration, or reuse implementation of existing
web logger and use it as a custom logger.
================================================================================================
change - Removed obsolete overload of ProxyGenerator.CreateClassProxy
impact - low
fixability - trivial
revision -
description - Deprecated overload of ProxyGenerator.CreateClassProxy was removed to keep the
method consistent with other methods and to remove confusion
fix - whenever removed overload was used, use one of the other overloads.
================================================================================================
change - IProxyGenerationHook.NonVirtualMemberNotification method was renamed
impact - high
fixability - easy
revision -
description - to accommodate class proxies with target method NonVirtualMemberNotification on
IProxyGenerationHook type was renamed to more accurate NonProxyableMemberNotification
since for class proxies with target not just methods but also fields and other member that
break the abstraction will be passed to this method.
fix - whenever NonVirtualMemberNotification is used/implemented change the method name to
NonProxyableMemberNotification. Implementors should also accommodate possibility that not
only MethodInfos will be passed as method's second parameter.
================================================================================================
change - DynamicProxy will now allow to intercept members of System.Object
impact - very low
fixability - easy
revision -
description - to allow scenarios like mocking of System.Object members, DynamicProxy will not
disallow proxying of these methods anymore. AllMethodsHook (default IProxyGenerationHook)
will still filter them out though.
fix - whenever custom IProxyGenerationHook is used, user should account for System.Object's
members being now passed to ShouldInterceptMethod and NonVirtualMemberNotification methods
and if neccessary update the code to handle them appropriately.

@ -1,145 +0,0 @@
2.5.2 (2010-11-15)
==================
- fixed DYNPROXY-150 - Finalizer should not be proxied
- implemented DYNPROXY-149 - Make AllMethodsHook members virtual so it can be used as a base class
- fixed DYNPROXY-147 - Can't crete class proxies with two non-public methods having same argument types but different return type
- fixed DYNPROXY-145 Unable to proxy System.Threading.SynchronizationContext (.NET 4.0)
- fixed DYNPROXY-144 - params argument not supported in constructor
- fixed DYNPROXY-143 - Permit call to reach "non-proxied" methods of inherited interfaces
- implemented DYNPROXY-139 - Better error message
- fixed DYNPROXY-133 - Debug assertion in ClassProxyInstanceContributor fails when proxying ISerializable with an explicit implementation of GetObjectData
- fixed CORE-32 - Determining if permission is granted via PermissionUtil does not work in .NET 4
- applied patch by Alwin Meijs - ExtendedLog4netFactory can be configured with a stream from for example an embedded log4net xml config
- Upgraded NLog to 2.0 Beta 1
- Added DefaultXmlSerializer to bridge XPathAdapter with standard Xml Serialization.
- XPathAdapter for DictionaryAdapter added IXPathSerializer to provide hooks for custom serialization.
2.5.1 (2010-09-21)
==================
- Interface proxy with target Interface now accepts null as a valid target value (which can be replaced at a later stage).
- DictionaryAdapter behavior overrides are now ordered with all other behaviors
- BREAKING CHANGE: removed web logger so that by default Castle.Core works in .NET 4 client profile
- added paramter to ModuleScope disabling usage of signed modules. This is to workaround issue DYNPROXY-134. Also a descriptive exception message is being thrown now when the issue is detected.
- Added IDictionaryBehaviorBuilder to allow grouping behaviors
- Added GenericDictionaryAdapter to simplify generic value sources
- fixed issue DYNPROXY-138 - Error message missing space
- fixed false positive where DynamicProxy would not let you proxy interface with target interface when target object was a COM object.
- fixed ReflectionBasedDictionaryAdapter when using indexed properties
2.5.0 (2010-08-21)
==================
- DynamicProxy will now not replicate non-public attribute types
- Applied patch from Kenneth Siewers Møller which adds parameterless constructor to DefaultSmtpSender implementation, to be able to configure the inner SmtpClient from the application configuration file (system.net.smtp).
- added support for .NET 4 and Silverlight 4, updated solution to VisualStudio 2010
- Removed obsolete overload of CreateClassProxy
- Added class proxy with taget
- Added ability to intercept explicitly implemented generic interface methods on class proxy.
- DynamicProxy does not disallow intercepting members of System.Object anymore. AllMethodsHook will still filter them out though.
- Added ability to intercept explicitly implemented interface members on class proxy. Does not support generic members.
- Merged DynamicProxy into Core binary
- fixed DYNPROXY-ISSUE-132 - "MetaProperty equals implementation incorrect"
- Fixed bug in DiagnosticsLoggerTestCase, where when running as non-admin, the teardown will throw SecurityException (contributed by maxild)
- Split IoC specific classes into Castle.Windsor project
- Merged logging services solution
- Merged DynamicProxy project
1.2.0 (2010-01-11)
==================
- Added IEmailSender interface and its default implementation
1.2.0 beta (2009-12-04)
==================
- BREAKING CHANGE - added ChangeProxyTarget method to IChangeProxyTarget interface
- added docs to IChangeProxyTarget methods
- Fixed DYNPROXY-ISSUE-108 - Obtaining replicated custom attributes on proxy may fail when property setter throws exception on default value
- Moved custom attribute replication from CustomAttributeUtil to new interface - IAttributeDisassembler
- Exposed IAttributeDisassembler via ProxyGenerationOptions, so that users can plug their implementation for some convoluted scenarios. (for Silverlight)
- Moved IInterceptorSelector from Dynamic Proxy to Core (IOC-ISSUE-156)
1.1.0 (2009-05-04)
==================
- Applied Eric Hauser's patch fixing CORE-ISSUE-22
"Support for environment variables in resource URI"
- Applied Gauthier Segay's patch fixing CORE-ISSUE-20
"Castle.Core.Tests won't build via nant because it use TraceContext without referencing System.Web.dll"
- Added simple interface to ComponentModel to make optional properties required.
- Applied Mark's -- <mwatts42@gmail.com> -- patch that changes
the Core to support being compiled for Silverlight 2
- Applied Louis DeJardin's patch adding TraceLogger as a new logger implementation
- Applied Chris Bilson's patch fixing CORE-15
"WebLogger Throws When Logging Outside of an HttpContext"
Release Candidate 3
===================
- Added IServiceProviderEx which extends IServiceProvider
- Added Pair<T,S> class.
- Applied Bill Pierce's patch fixing CORE-9
"Allow CastleComponent Attribute to Specify Lifestyle in Constructor"
- Added UseSingleInterfaceProxy to CompomentModel to control the proxying
behavior while maintaining backward compatibility.
Added the corresponding ComponentProxyBehaviorAttribute.
- Made NullLogger and IExtnededLogger
- Enabled a new format on ILogger interface, with 6 overloads for each method:
Debug(string)
Debug(string, Exception)
Debug(string, params object[])
DebugFormat(string, params object[])
DebugFormat(Exception, string, params object[])
DebugFormat(IFormatProvider, string, params object[])
DebugFormat(IFormatProvider, Exception, string, params object[])
The "FatalError" overloads where marked as [Obsolete], replaced by "Fatal" and "FatalFormat".
0.0.1.0
=======
- Included IProxyTargetAccessor
- Removed IMethodInterceptor and IMethodInvocation, that have been replaced
by IInterceptor and IInvocation
- Added FindByPropertyInfo to PropertySetCollection
- Made the DependencyModel.IsOptional property writable
- Applied Curtis Schlak's patch fixing IOC-27
"assembly resource format only works for resources where the assemblies name and default namespace are the same."
Quoting:
"I chose to preserve backwards compatibility by implementing the code in the
reverse order as suggested by the reporter. Given the following URI for a resource:
assembly://my.cool.assembly/context/moo/file.xml
It will initially look for an embedded resource with the manifest name of
"my.cool.assembly.context.moo.file.xml" in the loaded assembly my.cool.assembly.dll.
If it does not find it, then it looks for the embedded resource with the manifest name
of "context.moo.file.xml".
- IServiceEnabledComponent Introduced to be used across the project as
a standard way to have access to common services, for example, logger factories
- Added missing log factories
- Refactor StreamLogger and DiagnosticLogger to be more consistent behavior-wise
- Refactored WebLogger to extend LevelFilteredLogger (removed duplication)
- Refactored LoggerLevel order
- Project started

@ -1,80 +0,0 @@
This file names who's behind the Castle Team. You can find more about us at http://www.castleproject.org/community/team.html
Committers
==========
(ordered by the date when joined the project)
- hammett/Hamilton Verissimo
- Henry Conceição
- Kevin Williams
- Craig Neuwirt
- Gilles Bayon
- Andrew Hallock
- Jason Nelson
- Dru Sellers
- John Morales
- CobraLord
- Dan
- Tatham Oddie
- Fabio David Batista
- Chad Humphries
- Ayende Rahien
- G. Richard Bellamy
- Roelof Blom
- Ahmed Ghandour
- Josh Robb
- Ernst Naezer
- Marc-Andre Cournoyer
- Fabian Schmied
- Dave Godfrey
- Markus Zywitza
- Lee Henson
- Ken Egozi
- Chris Ortman
- Jonathon Rossi
- Tuna Toksöz
- Krzysztof Kozmic
- Mauricio Scheffer
- John Simons
Managers
========
Patch Manager
-------------
- Josh Robb
Documentation Manager
---------------------
-
PMC Members
===========
(ordered by the date when joined the PMC)
- hammett/Hamilton Verissimo (Chair)
- Henry Conceição
- Kevin Williams
- Craig Neuwirt
- Gilles Bayon
- Chad Humphries
- Ayende Rahien
- Fabio David Batista
- Roelof Blom
- Josh Robb
- Jonathon Rossi
Emeritus
========
(no longer active committers)
- Gilles Bayon
- Dan
- Andrew Hallock
- John Morales
- CobraLord
- Tatham Oddie
- Ahmed Ghandour

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,8 +0,0 @@
You can find full list of changes in changes.txt, list of breaking changes in breakingchanges.txt (there are no known breaking changes between 2.5.1 and 2.5.2 release).
Issue tracker: - http://issues.castleproject.org/dashboard
Documentation (work in progress):
Dictionary Adapter - http://stw.castleproject.org/Tools.Castle-DictionaryAdapter.ashx
DynamicProxy - http://stw.castleproject.org/Tools.DynamicProxy.ashx
Discusssion group: - http://groups.google.com/group/castle-project-users
StackOverflow tags: - castle-dynamicproxy, castle-dictionaryadapter, castle

@ -1,140 +0,0 @@
Release notes moved to bottom of file!
--------------------------------------
Using Glimpse
-------------
Thank you for NuGetting Glimpse, A client side Glimpse into whats going on in your server.
Glimpse is currently in Beta.
If you experience any issues, or have feature requests, please report them to https://github.com/Glimpse/Glimpse/issues
To get started with Glimpse, visit [http://yoursite.com]/Glimpse/Config/ This page hosts the Glimpse bookmarklets, useful for quickly turning on Glimpse.
The following configuration values are allowed for Glimpse in your web.config:
<glimpse on="true" saveRequestCount="5"> <!-- set on to false to completly turn off Glimpse. saveRequestCount specifies the max number of requests Glimpse will save -->
<ipAddresses> <!-- List of IP addresses allowed to get Glimpse data. localhost (IPv4 & IPv6) by default -->
<add address="127.0.0.1" />
<add address="::1" />
</ipAddresses>
<contentTypes>
<add contentType="text/html"/>
</contentTypes>
<pluginBlacklist>
<add plugin="Glimpse.Net.Plugin.Asp.Request"/>
<add plugin="Glimpse.Net.Plugin.Mvc.MetaData"/>
</pluginBlacklist>
</glimpse>
For more info, visit the homepage at http://getGlimpse.com or follow #glimpse on Twitter.
Overview
--------
At its core Glimpse allows you to debug your web site right in the browser. Glimpse allows you to "Glimpse" into what's going on in your web server. In other words what Firebug is to debugging your client side code, Glimpse is to debugging your server within the client.
Fundamentally Glimpse is made up of 3 different parts, all of which are extensible and customizable for any platform:
* Glimpse Server Module
* Glimpse Client Side Viewer
* Glimpse Protocol
How it Works
------------
On the Server:
1. Server collects all server side information that will aid in debugging (i.e. application settings, routes, session variables, trace data, etc)
2. It does this by running through a pipeline of server side data providers that can be dynamically controlled and added to under our plugin architecture
3. Before the response is send, the server formats this data in accordance with the Glimpse Protocol and serializes it as JSON
4. Depending on whether it is an Ajax request or not, the server embeds the JSON in the content of the page
On the Client:
5. Depending on whether it is a Ajax request or not, the client picks up the JSON data and displays the it by executing a pipeline of client side data providers that can be dynamically controlled and added to under our plugin architecture
6. The client side module then dynamically renders a client side UI (similar to Firebug Lite) that lets you view this data
Glimpse can be turned on or off by a series of different mechanisms, but at its core if the Glimpse cookie is present the server will provide the "debug" data - as a security measure, the request for debug data is "authenticated".
Server Implementations
----------------------
Given the scope of the project and what it can do, the concept isn't restricted to any one platform. Hence, once mature, Glimpse Server Module will be available on all major web platforms.
Platforms currently supported:
* ASP.Net MVC
Platforms target to be supported:
* ASP.Net Web Forms
* PHP
* Ruby on Rails
NOTE - If you would like help develop a Glimpse Server Module for a given platform please let us know.
Client Implementations
----------------------
To start with the Glimpse Client Side Viewer is simply a light weight JavaScript "plugin" that understands the Glimpse Protocol and knows how to render the data. From a technology standpoint we currently use jQuery as the client side framework.
Eventually, we would like to have actual browser plugins that provide richer functionality and experience, but the JavaScript version of the Glimpse Client Side Viewer is surprisingly well featured, intuitive and provides a high fidelity experience. We also hope to have a version for mobile ready soon which customizes the viewing/usage experience when using a mobile device.
Protocol
--------
Details coming soon.
Release Notes
-------------
05/08/2011 - 0.81
- Changed plugin initialization so that SetupInit is only called once.
- Added list of loaded plugins to Glimpse/Config
- Added node to configuration to allow for blacklisting unwanted plugins. Configuration takes the form <glimpse><pluginBlacklist><add plugin="[Type.Name.Including.Namespace]"/></pluginBlacklist></glimpse>
- Updated Binding plugin to have acctual view data
- Fixed bugs with getting NotImplemented exceptions on trace tab
- Fixed bugs with users who were extending DefaultModelBinder
- Added ability to set glimpseState (cookie) to Hidden, which allows Glimpse to record and track remote client requests without rendering UI/Data to their response. (Useful for use with the remote tab)
- Added GlimpseTrace static facade to simplify tracing
04/28/2011 - 0.80
- Removed dependency on System.Drawing
- Fixed bugs related to projects that used custom ControllerActionInvokers
- Fixed bugs related to projects using custom FilterProviders
- Added MetaData tab which gives details of primary View Model and primary View Models properties (note this is not recursive at the moment)
- Environment tab now shows site trust level
- Performance improvments for supporting virtual directories
- Glimpse should now work in jQuery noConflict mode
- Added Glimpse Warnings tab, used to help debug Glimpse problems going forward
04/20/2011 - 0.79
- Client bug fixes for popout window
- Client bug fixes for virtual directories
- Various javascript fixes
04/16/2011 - 0.78
- Breaking change is you created custom plugins. Plugin interface moved from Glimpse.Protocol to Glimpse.Net.Extensibility namespace
- Fixed bug which threw ReflectionTypeLoadExceptions by using custom SafeDirectoryCatalog (Special thanks to Craig Wagner for helping us track this down!)
- Fixed pathing issues experienced by users hosting from virtual directories
- Added Request tab to show form, query string and cookies as the server saw them
- Added ViewData/ViewBag and TempData info to the details column of the Views tab
- Added Area support to Routes tab
- Added Glimpse Warnings tab, which will only appear when a MEF loading issue is thrown
- Added ability to open Glimpse in popup mode (alpha)
- Added symbols package to symbolsource.org for simplified debugging by the community
04/14/2011 - 0.77
- Fixed issues with most InvalidOperationException's/Circular references. Now if there is an issue, handle it more gracefully, and it only affects one tab. (More complete fix coming soon!)
- /Glimpse/Config is no longer case sensitive, and certain reports of 404s to this page have been fixed. In addition, this page has been improved to be more understandable.
- As of right now, Glimpse only supports MVC3. We have identified the issues with MVC2, and are working to correct them. Special shout out to @rugvedvaidya for providing the (long!) workaround to get Glimpse running on MVC2.
04/13/2011 - 0.76
- Added "Time Elapsed" column to the Execution tab.
- Fixed 2 bugs with IE9 client rendering.
- Fixed bug with CSS text-alignment.
- Changed to Apache 2 license.
Attribution
-----------
Some Icons are Copyright © Yusuke Kamiyamane. [http://p.yusukekamiyamane.com/]

@ -1,14 +0,0 @@
<configuration>
<configSections>
<section name="glimpse" type="Glimpse.Net.Configuration.GlimpseConfiguration" />
</configSections>
<glimpse on="true" saveRequestCount="5">
<ipAddresses>
<add address="127.0.0.1" /><!--IPv4-->
<add address="::1" /><!--IPv6-->
</ipAddresses>
<contentTypes>
<add contentType="text/html"/>
</contentTypes>
</glimpse>
</configuration>

Binary file not shown.

@ -1,32 +0,0 @@
<#@ include file="PetaPoco.Core.ttinclude" #>
<#
// Settings
ConnectionStringName = ""; // Uses last connection string in config if not specified
Namespace = "";
RepoName = "";
GenerateOperations = true;
GeneratePocos = true;
GenerateCommon = true;
ClassPrefix = "";
ClassSuffix = "";
// Read schema
var tables = LoadTables();
/*
// Tweak Schema
tables["tablename"].Ignore = true; // To ignore a table
tables["tablename"].ClassName = "newname"; // To change the class name of a table
tables["tablename"]["columnname"].Ignore = true; // To ignore a column
tables["tablename"]["columnname"].PropertyName="newname"; // To change the property name of a column
tables["tablename"]["columnname"].PropertyType="bool"; // To change the property type of a column
*/
// Generate output
if (tables.Count>0)
{
#>
<#@ include file="PetaPoco.Generator.ttinclude" #>
<# } #>

File diff suppressed because it is too large Load Diff

@ -1,136 +0,0 @@
<#
if (string.IsNullOrEmpty(Namespace)) Namespace=ConnectionStringName;
if (string.IsNullOrEmpty(RepoName) && !string.IsNullOrEmpty(ConnectionStringName)) RepoName=ConnectionStringName + "DB";
if (string.IsNullOrEmpty(Namespace)) Namespace="PetaPoco";
if (string.IsNullOrEmpty(RepoName)) RepoName="PetaPocoDB";
#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using PetaPoco;
namespace <#=Namespace #>
{
<# if (GenerateCommon) { #>
public partial class <#=RepoName#> : Database
{
public <#=RepoName#>()
: base("<#=ConnectionStringName#>")
{
CommonConstruct();
}
public <#=RepoName#>(string connectionStringName)
: base(connectionStringName)
{
CommonConstruct();
}
partial void CommonConstruct();
public interface IFactory
{
<#=RepoName#> GetInstance();
}
public static IFactory Factory { get; set; }
public static <#=RepoName#> GetInstance()
{
if (_instance!=null)
return _instance;
if (Factory!=null)
return Factory.GetInstance();
else
return new <#=RepoName#>();
}
[ThreadStatic] static <#=RepoName#> _instance;
public override void OnBeginTransaction()
{
if (_instance==null)
_instance=this;
}
public override void OnEndTransaction()
{
if (_instance==this)
_instance=null;
}
<# if (GenerateOperations) { #>
public class Record<T> where T:new()
{
public static <#=RepoName#> repo { get { return <#=RepoName#>.GetInstance(); } }
public bool IsNew() { return repo.IsNew(this); }
public void Save() { repo.Save(this); }
public object Insert() { return repo.Insert(this); }
public int Update() { return repo.Update(this); }
public int Delete() { return repo.Delete(this); }
public static int Update(string sql, params object[] args) { return repo.Update<T>(sql, args); }
public static int Update(Sql sql) { return repo.Update<T>(sql); }
public static int Delete(string sql, params object[] args) { return repo.Delete<T>(sql, args); }
public static int Delete(Sql sql) { return repo.Delete<T>(sql); }
public static int Delete(object primaryKey) { return repo.Delete<T>(primaryKey); }
public static bool Exists(object primaryKey) { return repo.Exists<T>(primaryKey); }
public static T SingleOrDefault(object primaryKey) { return repo.SingleOrDefault<T>(primaryKey); }
public static T SingleOrDefault(string sql, params object[] args) { return repo.SingleOrDefault<T>(sql, args); }
public static T SingleOrDefault(Sql sql) { return repo.SingleOrDefault<T>(sql); }
public static T FirstOrDefault(string sql, params object[] args) { return repo.FirstOrDefault<T>(sql, args); }
public static T FirstOrDefault(Sql sql) { return repo.FirstOrDefault<T>(sql); }
public static T Single(object primaryKey) { return repo.Single<T>(primaryKey); }
public static T Single(string sql, params object[] args) { return repo.Single<T>(sql, args); }
public static T Single(Sql sql) { return repo.Single<T>(sql); }
public static T First(string sql, params object[] args) { return repo.First<T>(sql, args); }
public static T First(Sql sql) { return repo.First<T>(sql); }
public static List<T> Fetch(string sql, params object[] args) { return repo.Fetch<T>(sql, args); }
public static List<T> Fetch(Sql sql) { return repo.Fetch<T>(sql); }
public static List<T> Fetch(long page, long itemsPerPage, string sql, params object[] args) { return repo.Fetch<T>(page, itemsPerPage, sql, args); }
public static List<T> Fetch(long page, long itemsPerPage, Sql sql) { return repo.Fetch<T>(page, itemsPerPage, sql); }
public static Page<T> Page(long page, long itemsPerPage, string sql, params object[] args) { return repo.Page<T>(page, itemsPerPage, sql, args); }
public static Page<T> Page(long page, long itemsPerPage, Sql sql) { return repo.Page<T>(page, itemsPerPage, sql); }
public static IEnumerable<T> Query(string sql, params object[] args) { return repo.Query<T>(sql, args); }
public static IEnumerable<T> Query(Sql sql) { return repo.Query<T>(sql); }
}
<# } #>
}
<# } #>
<# if (GeneratePocos) { #>
<#
foreach(Table tbl in from t in tables where !t.Ignore select t)
{
#>
[TableName("<#=tbl.Name#>")]
<# if (tbl.PK!=null && tbl.PK.IsAutoIncrement) { #>
<# if (tbl.SequenceName==null) { #>
[PrimaryKey("<#=tbl.PK.Name#>")]
<# } else { #>
[PrimaryKey("<#=tbl.PK.Name#>", sequenceName="<#=tbl.SequenceName#>")]
<# } #>
<# } #>
<# if (tbl.PK!=null && !tbl.PK.IsAutoIncrement) { #>
[PrimaryKey("<#=tbl.PK.Name#>", autoIncrement=false)]
<# } #>
[ExplicitColumns]
public partial class <#=tbl.ClassName#> <# if (GenerateOperations) { #>: <#=RepoName#>.Record<<#=tbl.ClassName#>> <# } #>
{
<#
foreach(Column col in from c in tbl.Columns where !c.Ignore select c)
{
// Column bindings
#>
<# if (col.Name!=col.PropertyName) { #>
[Column("<#=col.Name#>")] public <#=col.PropertyType #><#=CheckNullable(col)#> <#=col.PropertyName #> { get; set; }
<# } else { #>
[Column] public <#=col.PropertyType #><#=CheckNullable(col)#> <#=col.PropertyName #> { get; set; }
<# } #>
<# } #>
}
<# } #>
<# } #>
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save