mirror of
https://github.com/Radarr/Radarr.git
synced 2024-09-11 12:02:35 +02:00
Merge remote-tracking branch 'origin/master' into dynamic-jobs
Conflicts: NzbDrone.Web/Scripts/NzbDrone/series.js
This commit is contained in:
commit
b21bf01bf0
@ -34,6 +34,24 @@
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="FizzWare.NBuilder, Version=3.0.1.0, Culture=neutral, PublicKeyToken=5651b03e12e42c12, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NBuilder.3.0.1.1\lib\FizzWare.NBuilder.dll</HintPath>
|
||||
|
@ -34,6 +34,24 @@
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="FluentAssertions, Version=1.7.0.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
|
@ -34,6 +34,24 @@
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Exceptioneer.WindowsFormsClient">
|
||||
<HintPath>..\Libraries\Exceptioneer.WindowsFormsClient.dll</HintPath>
|
||||
|
@ -34,6 +34,24 @@
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Accessibility">
|
||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||
@ -129,6 +147,7 @@
|
||||
<Compile Include="ProviderTests\ConfigProviderTests\ConfigCachingFixture.cs" />
|
||||
<Compile Include="ProviderTests\BannerProviderTest.cs" />
|
||||
<Compile Include="ProviderTests\DecisionEngineTests\AllowedReleaseGroupSpecificationFixture.cs" />
|
||||
<Compile Include="ProviderTests\DecisionEngineTests\CustomStartDateSpecificationFixture.cs" />
|
||||
<Compile Include="ProviderTests\DiskScanProviderTests\CleanUpFixture.cs" />
|
||||
<Compile Include="ProviderTests\DiskScanProviderTests\CleanUpDropFolderFixture.cs" />
|
||||
<Compile Include="ProviderTests\DiskScanProviderTests\GetVideoFilesFixture.cs" />
|
||||
|
@ -52,6 +52,10 @@ public void Setup()
|
||||
Mocker.GetMock<AllowedReleaseGroupSpecification>()
|
||||
.Setup(c => c.IsSatisfiedBy(It.IsAny<EpisodeParseResult>()))
|
||||
.Returns(true);
|
||||
|
||||
Mocker.GetMock<CustomStartDateSpecification>()
|
||||
.Setup(c => c.IsSatisfiedBy(It.IsAny<EpisodeParseResult>()))
|
||||
.Returns(true);
|
||||
}
|
||||
|
||||
private void WithProfileNotAllowed()
|
||||
@ -89,6 +93,13 @@ private void WithOverRetention()
|
||||
.Returns(false);
|
||||
}
|
||||
|
||||
private void WithAiredBeforeCustomStartDateCutoff()
|
||||
{
|
||||
Mocker.GetMock<CustomStartDateSpecification>()
|
||||
.Setup(c => c.IsSatisfiedBy(It.IsAny<EpisodeParseResult>()))
|
||||
.Returns(false);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_allowed_if_all_conditions_are_met()
|
||||
{
|
||||
@ -130,6 +141,13 @@ public void should_not_be_allowed_if_report_is_over_retention()
|
||||
spec.IsSatisfiedBy(parseResult).Should().Be(ReportRejectionType.Retention);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_be_allowed_if_episode_aired_before_cutoff()
|
||||
{
|
||||
WithAiredBeforeCustomStartDateCutoff();
|
||||
spec.IsSatisfiedBy(parseResult).Should().Be(ReportRejectionType.AiredAfterCustomStartDate);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_be_allowed_if_none_of_conditions_are_met()
|
||||
{
|
||||
|
@ -0,0 +1,145 @@
|
||||
// ReSharper disable RedundantUsingDirective
|
||||
|
||||
using System.Linq;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Model;
|
||||
using NzbDrone.Core.Providers;
|
||||
using NzbDrone.Core.Providers.DecisionEngine;
|
||||
using NzbDrone.Core.Repository;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
|
||||
{
|
||||
[TestFixture]
|
||||
// ReSharper disable InconsistentNaming
|
||||
public class CustomStartDateSpecificationFixture : CoreTest
|
||||
{
|
||||
private CustomStartDateSpecification _customStartDateSpecification;
|
||||
|
||||
private EpisodeParseResult parseResultMulti;
|
||||
private EpisodeParseResult parseResultSingle;
|
||||
private Series fakeSeries;
|
||||
private Episode firstEpisode;
|
||||
private Episode secondEpisode;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_customStartDateSpecification = Mocker.Resolve<CustomStartDateSpecification>();
|
||||
|
||||
fakeSeries = Builder<Series>.CreateNew()
|
||||
.With(c => c.Monitored = true)
|
||||
.With(c => c.CustomStartDate = null)
|
||||
.Build();
|
||||
|
||||
parseResultMulti = new EpisodeParseResult
|
||||
{
|
||||
SeriesTitle = "Title",
|
||||
Series = fakeSeries,
|
||||
EpisodeNumbers = new List<int> { 3, 4 },
|
||||
SeasonNumber = 12,
|
||||
};
|
||||
|
||||
parseResultSingle = new EpisodeParseResult
|
||||
{
|
||||
SeriesTitle = "Title",
|
||||
Series = fakeSeries,
|
||||
EpisodeNumbers = new List<int> { 3 },
|
||||
SeasonNumber = 12,
|
||||
};
|
||||
|
||||
firstEpisode = new Episode { AirDate = DateTime.Today };
|
||||
secondEpisode = new Episode { AirDate = DateTime.Today };
|
||||
|
||||
var singleEpisodeList = new List<Episode> { firstEpisode };
|
||||
var doubleEpisodeList = new List<Episode> { firstEpisode, secondEpisode };
|
||||
|
||||
Mocker.GetMock<EpisodeProvider>().Setup(c => c.GetEpisodesByParseResult(parseResultSingle)).Returns(singleEpisodeList);
|
||||
Mocker.GetMock<EpisodeProvider>().Setup(c => c.GetEpisodesByParseResult(parseResultMulti)).Returns(doubleEpisodeList);
|
||||
}
|
||||
|
||||
private void WithFirstEpisodeLastYear()
|
||||
{
|
||||
firstEpisode.AirDate = DateTime.Today.AddYears(-1);
|
||||
}
|
||||
|
||||
private void WithSecondEpisodeYear()
|
||||
{
|
||||
secondEpisode.AirDate = DateTime.Today.AddYears(-1);
|
||||
}
|
||||
|
||||
private void WithAiredAfterYesterday()
|
||||
{
|
||||
fakeSeries.CustomStartDate = DateTime.Today.AddDays(-1);
|
||||
}
|
||||
|
||||
private void WithAiredAfterLastWeek()
|
||||
{
|
||||
fakeSeries.CustomStartDate = DateTime.Today.AddDays(-7);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_when_downloadEpisodesAiredAfter_is_null_for_single_episode()
|
||||
{
|
||||
_customStartDateSpecification.IsSatisfiedBy(parseResultSingle).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_when_downloadEpisodesAiredAfter_is_null_for_multiple_episodes()
|
||||
{
|
||||
_customStartDateSpecification.IsSatisfiedBy(parseResultMulti).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_if_both_episodes_air_after_cutoff()
|
||||
{
|
||||
WithAiredAfterLastWeek();
|
||||
_customStartDateSpecification.IsSatisfiedBy(parseResultMulti).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_if_episode_airs_after_cutoff()
|
||||
{
|
||||
WithAiredAfterLastWeek();
|
||||
_customStartDateSpecification.IsSatisfiedBy(parseResultSingle).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_if_first_episode_aired_after_cutoff()
|
||||
{
|
||||
WithAiredAfterLastWeek();
|
||||
WithSecondEpisodeYear();
|
||||
_customStartDateSpecification.IsSatisfiedBy(parseResultMulti).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_if_second_episode_aired_after_cutoff()
|
||||
{
|
||||
WithAiredAfterLastWeek();
|
||||
WithFirstEpisodeLastYear();
|
||||
_customStartDateSpecification.IsSatisfiedBy(parseResultMulti).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_false_if_both_episodes_aired_before_cutoff()
|
||||
{
|
||||
WithAiredAfterLastWeek();
|
||||
WithFirstEpisodeLastYear();
|
||||
WithSecondEpisodeYear();
|
||||
_customStartDateSpecification.IsSatisfiedBy(parseResultMulti).Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_false_if_episode_aired_before_cutoff()
|
||||
{
|
||||
WithAiredAfterLastWeek();
|
||||
WithFirstEpisodeLastYear();
|
||||
_customStartDateSpecification.IsSatisfiedBy(parseResultSingle).Should().BeFalse();
|
||||
}
|
||||
}
|
||||
}
|
@ -729,7 +729,7 @@ public void Add_daily_show_episodes()
|
||||
//act
|
||||
var seriesProvider = Mocker.Resolve<SeriesProvider>();
|
||||
|
||||
seriesProvider.AddSeries("Test Series","c:\\test\\", tvDbSeriesId, 1);
|
||||
seriesProvider.AddSeries("Test Series","c:\\test\\", tvDbSeriesId, 1, null);
|
||||
|
||||
var episodeProvider = Mocker.Resolve<EpisodeProvider>();
|
||||
episodeProvider.RefreshEpisodeInfo(seriesProvider.GetSeries(tvDbSeriesId));
|
||||
|
@ -36,7 +36,7 @@ public void Add_new_series(bool useSeasonFolder)
|
||||
|
||||
//Act
|
||||
var seriesProvider = Mocker.Resolve<SeriesProvider>();
|
||||
seriesProvider.AddSeries(title, path, tvDbId, qualityProfileId);
|
||||
seriesProvider.AddSeries(title, path, tvDbId, qualityProfileId, null);
|
||||
|
||||
//Assert
|
||||
var series = seriesProvider.GetAllSeries();
|
||||
@ -54,7 +54,7 @@ public void Add_new_series(bool useSeasonFolder)
|
||||
public void add_series_should_fail_if_series_is_less_than_zero(int seriesId)
|
||||
{
|
||||
WithRealDb();
|
||||
Assert.Throws<ArgumentOutOfRangeException>(() => Mocker.Resolve<SeriesProvider>().AddSeries("Title", "C:\\Test", seriesId, 1));
|
||||
Assert.Throws<ArgumentOutOfRangeException>(() => Mocker.Resolve<SeriesProvider>().AddSeries("Title", "C:\\Test", seriesId, 1, null));
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
17
NzbDrone.Core/Datastore/Migrations/Migration20120918.cs
Normal file
17
NzbDrone.Core/Datastore/Migrations/Migration20120918.cs
Normal file
@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using Migrator.Framework;
|
||||
using NzbDrone.Common;
|
||||
|
||||
namespace NzbDrone.Core.Datastore.Migrations
|
||||
{
|
||||
|
||||
[Migration(20120918)]
|
||||
public class Migration20120918 : NzbDroneMigration
|
||||
{
|
||||
protected override void MainDbUpgrade()
|
||||
{
|
||||
Database.AddColumn("Series", new Column("DownloadEpisodesAiredAfter", DbType.DateTime, ColumnProperty.Null));
|
||||
}
|
||||
}
|
||||
}
|
21
NzbDrone.Core/Datastore/Migrations/Migration20120919.cs
Normal file
21
NzbDrone.Core/Datastore/Migrations/Migration20120919.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using Migrator.Framework;
|
||||
using NzbDrone.Common;
|
||||
|
||||
namespace NzbDrone.Core.Datastore.Migrations
|
||||
{
|
||||
|
||||
[Migration(20120919)]
|
||||
public class Migration20120919 : NzbDroneMigration
|
||||
{
|
||||
protected override void MainDbUpgrade()
|
||||
{
|
||||
Database.AddColumn("Series", new Column("CustomStartDate", DbType.DateTime, ColumnProperty.Null));
|
||||
|
||||
Database.ExecuteNonQuery("UPDATE Series SET CustomStartDate = DownloadEpisodesAiredAfter");
|
||||
|
||||
Database.RemoveColumn("Series", "DownloadEpisodesAiredAfter");
|
||||
}
|
||||
}
|
||||
}
|
@ -17,6 +17,7 @@ public enum ReportRejectionType
|
||||
DownloadClientFailure = 10,
|
||||
Skipped = 11,
|
||||
Failure = 12,
|
||||
ReleaseGroupNotWanted = 13
|
||||
ReleaseGroupNotWanted = 13,
|
||||
AiredAfterCustomStartDate = 14
|
||||
}
|
||||
}
|
||||
|
@ -227,6 +227,8 @@
|
||||
<Compile Include="Datastore\MigrationLogger.cs" />
|
||||
<Compile Include="Datastore\MigrationsHelper.cs" />
|
||||
<Compile Include="Datastore\CustomeMapper.cs" />
|
||||
<Compile Include="Datastore\Migrations\Migration20120919.cs" />
|
||||
<Compile Include="Datastore\Migrations\Migration20120918.cs" />
|
||||
<Compile Include="Datastore\Migrations\Migration20120802.cs" />
|
||||
<Compile Include="Datastore\Migrations\Migration20120727.cs" />
|
||||
<Compile Include="Datastore\Migrations\Migration20120504.cs" />
|
||||
@ -291,6 +293,7 @@
|
||||
<Compile Include="Model\Xbmc\IconType.cs" />
|
||||
<Compile Include="Providers\BannerProvider.cs" />
|
||||
<Compile Include="Providers\DecisionEngine\AllowedReleaseGroupSpecification.cs" />
|
||||
<Compile Include="Providers\DecisionEngine\CustomStartDateSpecification.cs" />
|
||||
<Compile Include="Providers\DownloadClients\PneumaticProvider.cs" />
|
||||
<Compile Include="Providers\Indexer\NzbClub.cs" />
|
||||
<Compile Include="Providers\Indexer\NzbIndex.cs" />
|
||||
|
@ -14,13 +14,14 @@ public class AllowedDownloadSpecification
|
||||
private readonly AlreadyInQueueSpecification _alreadyInQueueSpecification;
|
||||
private readonly RetentionSpecification _retentionSpecification;
|
||||
private readonly AllowedReleaseGroupSpecification _allowedReleaseGroupSpecification;
|
||||
private readonly CustomStartDateSpecification _customStartDateSpecification;
|
||||
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
[Inject]
|
||||
public AllowedDownloadSpecification(QualityAllowedByProfileSpecification qualityAllowedByProfileSpecification,
|
||||
UpgradeDiskSpecification upgradeDiskSpecification, AcceptableSizeSpecification acceptableSizeSpecification,
|
||||
AlreadyInQueueSpecification alreadyInQueueSpecification, RetentionSpecification retentionSpecification,
|
||||
AllowedReleaseGroupSpecification allowedReleaseGroupSpecification)
|
||||
AllowedReleaseGroupSpecification allowedReleaseGroupSpecification, CustomStartDateSpecification customStartDateSpecification)
|
||||
{
|
||||
_qualityAllowedByProfileSpecification = qualityAllowedByProfileSpecification;
|
||||
_upgradeDiskSpecification = upgradeDiskSpecification;
|
||||
@ -28,6 +29,7 @@ public AllowedDownloadSpecification(QualityAllowedByProfileSpecification quality
|
||||
_alreadyInQueueSpecification = alreadyInQueueSpecification;
|
||||
_retentionSpecification = retentionSpecification;
|
||||
_allowedReleaseGroupSpecification = allowedReleaseGroupSpecification;
|
||||
_customStartDateSpecification = customStartDateSpecification;
|
||||
}
|
||||
|
||||
public AllowedDownloadSpecification()
|
||||
@ -37,6 +39,7 @@ public AllowedDownloadSpecification()
|
||||
public virtual ReportRejectionType IsSatisfiedBy(EpisodeParseResult subject)
|
||||
{
|
||||
if (!_qualityAllowedByProfileSpecification.IsSatisfiedBy(subject)) return ReportRejectionType.QualityNotWanted;
|
||||
if (!_customStartDateSpecification.IsSatisfiedBy(subject)) return ReportRejectionType.AiredAfterCustomStartDate;
|
||||
if (!_upgradeDiskSpecification.IsSatisfiedBy(subject)) return ReportRejectionType.ExistingQualityIsEqualOrBetter;
|
||||
if (!_retentionSpecification.IsSatisfiedBy(subject)) return ReportRejectionType.Retention;
|
||||
if (!_acceptableSizeSpecification.IsSatisfiedBy(subject)) return ReportRejectionType.Size;
|
||||
|
@ -0,0 +1,44 @@
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
using Ninject;
|
||||
using NzbDrone.Core.Model;
|
||||
|
||||
namespace NzbDrone.Core.Providers.DecisionEngine
|
||||
{
|
||||
public class CustomStartDateSpecification
|
||||
{
|
||||
private readonly EpisodeProvider _episodeProvider;
|
||||
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
[Inject]
|
||||
public CustomStartDateSpecification(EpisodeProvider episodeProvider)
|
||||
{
|
||||
_episodeProvider = episodeProvider;
|
||||
}
|
||||
|
||||
public CustomStartDateSpecification()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public virtual bool IsSatisfiedBy(EpisodeParseResult subject)
|
||||
{
|
||||
if (!subject.Series.CustomStartDate.HasValue)
|
||||
{
|
||||
logger.Debug("{0} does not restrict downloads before date.", subject.Series.Title);
|
||||
return true;
|
||||
}
|
||||
|
||||
var episodes = _episodeProvider.GetEpisodesByParseResult(subject);
|
||||
|
||||
if (episodes.Any(episode => episode.AirDate > subject.Series.CustomStartDate.Value))
|
||||
{
|
||||
logger.Debug("One or more episodes aired after cutoff, downloading.");
|
||||
return true;
|
||||
}
|
||||
|
||||
logger.Debug("Episodes aired before cutoff date: {0}", subject.Series.CustomStartDate);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
@ -110,7 +110,7 @@ public virtual Series UpdateSeriesInfo(int seriesId)
|
||||
return series;
|
||||
}
|
||||
|
||||
public virtual void AddSeries(string title, string path, int tvDbSeriesId, int qualityProfileId)
|
||||
public virtual void AddSeries(string title, string path, int tvDbSeriesId, int qualityProfileId, DateTime? airedAfter)
|
||||
{
|
||||
Logger.Info("Adding Series [{0}] Path: [{1}]", tvDbSeriesId, path);
|
||||
|
||||
@ -131,6 +131,9 @@ public virtual void AddSeries(string title, string path, int tvDbSeriesId, int q
|
||||
repoSeries.SeasonFolder = _configProvider.UseSeasonFolder;
|
||||
repoSeries.BacklogSetting = BacklogSettingType.Inherit;
|
||||
|
||||
if (airedAfter.HasValue)
|
||||
repoSeries.CustomStartDate = airedAfter;
|
||||
|
||||
_database.Insert(repoSeries);
|
||||
}
|
||||
|
||||
@ -229,6 +232,7 @@ public virtual void UpdateFromSeriesEditor(IList<Series> editedSeries)
|
||||
series.SeasonFolder = edited.SeasonFolder;
|
||||
series.BacklogSetting = edited.BacklogSetting;
|
||||
series.Path = edited.Path;
|
||||
series.CustomStartDate = edited.CustomStartDate;
|
||||
}
|
||||
|
||||
_database.UpdateMany(allSeries);
|
||||
|
@ -48,6 +48,8 @@ public class Series
|
||||
|
||||
public string Network { get; set; }
|
||||
|
||||
public DateTime? CustomStartDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether this <see cref="Series"/> is hidden.
|
||||
/// </summary>
|
||||
|
@ -335,6 +335,24 @@
|
||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
|
||||
|
@ -33,6 +33,24 @@
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="FizzWare.NBuilder">
|
||||
<HintPath>..\..\packages\NBuilder.3.0.1.1\lib\FizzWare.NBuilder.dll</HintPath>
|
||||
|
@ -34,6 +34,24 @@
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.Practices.ServiceLocation">
|
||||
<HintPath>..\packages\CommonServiceLocator.1.0\lib\NET35\Microsoft.Practices.ServiceLocation.dll</HintPath>
|
||||
|
@ -34,6 +34,24 @@
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="FluentAssertions">
|
||||
<HintPath>..\packages\FluentAssertions.1.7.0\Lib\net40\FluentAssertions.dll</HintPath>
|
||||
|
@ -68,10 +68,7 @@
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.episodeMissing
|
||||
{
|
||||
.episodeMissing, table.dataTable tr.series-ended {
|
||||
background-color: #f5d6d6;
|
||||
}
|
||||
|
||||
|
@ -115,7 +115,7 @@ hr
|
||||
}
|
||||
|
||||
|
||||
input[type=text], select
|
||||
input[type=text], input[type=date], select
|
||||
{
|
||||
font-size: small;
|
||||
padding: 2px 2px;
|
||||
@ -181,28 +181,18 @@ button span, input[type="button"] span, input[type="submit"] span, input[type="r
|
||||
height: 25px;
|
||||
}
|
||||
|
||||
|
||||
.dialog
|
||||
{
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
|
||||
.qualitySelector
|
||||
{
|
||||
min-width: 60px;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
#quickAdd
|
||||
{
|
||||
position: fixed;
|
||||
top: 30px;
|
||||
right: 15px;
|
||||
}
|
||||
|
||||
|
||||
#localSeriesLookup
|
||||
{
|
||||
width: 220px;
|
||||
|
@ -4,7 +4,7 @@
|
||||
}
|
||||
|
||||
.checkboxColumn {
|
||||
width: 110px;
|
||||
width: 50px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@ -13,12 +13,12 @@
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
table input[type="text"], table select {
|
||||
table input[type="text"], table input[type="date"], table select {
|
||||
margin: 2px 2px;
|
||||
}
|
||||
|
||||
td .path {
|
||||
width: 300px;
|
||||
width: 290px;
|
||||
}
|
||||
|
||||
td .backlogSetting {
|
||||
@ -37,6 +37,19 @@ th .footer-control-quality {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
td .start-date {
|
||||
width: 80px;
|
||||
}
|
||||
|
||||
th .footer-control-boolean {
|
||||
width: 90px;
|
||||
}
|
||||
|
||||
th .footer-control-start-date {
|
||||
width: 80px;
|
||||
}
|
||||
|
||||
|
||||
#stylized, .settingsForm {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
p, h1, form, button
|
||||
{
|
||||
p, h1, form, button {
|
||||
border: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
@ -9,21 +8,18 @@
|
||||
display: none;
|
||||
}
|
||||
|
||||
.spacer
|
||||
{
|
||||
.spacer {
|
||||
clear: both;
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
.settingsForm
|
||||
{
|
||||
.settingsForm {
|
||||
width: 620px;
|
||||
padding: 14px;
|
||||
}
|
||||
|
||||
|
||||
#stylized p
|
||||
{
|
||||
#stylized p {
|
||||
font-size: 11px;
|
||||
color: #666666;
|
||||
margin-bottom: 20px;
|
||||
@ -31,8 +27,7 @@
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
#stylized .labelClass
|
||||
{
|
||||
#stylized .labelClass {
|
||||
display: block;
|
||||
font-weight: bold;
|
||||
text-align: right;
|
||||
@ -41,8 +36,7 @@
|
||||
margin-bottom: -10px;
|
||||
}
|
||||
|
||||
#stylized .small
|
||||
{
|
||||
#stylized .small {
|
||||
color: #666666;
|
||||
display: block;
|
||||
font-size: 11px;
|
||||
@ -51,8 +45,7 @@
|
||||
width: 340px;
|
||||
}
|
||||
|
||||
#stylized .inputClass
|
||||
{
|
||||
#stylized .inputClass {
|
||||
float: left;
|
||||
padding: 2px 2px;
|
||||
border: solid 1px #aacfe4;
|
||||
@ -60,19 +53,16 @@
|
||||
margin: 4px 0 20px 10px;
|
||||
}
|
||||
|
||||
#stylized .selectClass
|
||||
{
|
||||
#stylized .selectClass {
|
||||
width: 206px;
|
||||
}
|
||||
|
||||
#stylized .checkClass
|
||||
{
|
||||
#stylized .checkClass {
|
||||
margin: 12px 0px 20px 10px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
#stylized button
|
||||
{
|
||||
#stylized button {
|
||||
clear: both;
|
||||
margin-left: 220px;
|
||||
margin-bottom: 10px;
|
||||
@ -85,8 +75,7 @@
|
||||
}
|
||||
|
||||
|
||||
#saveAjax
|
||||
{
|
||||
#saveAjax {
|
||||
padding-left: 6px;
|
||||
margin-bottom: -7px;
|
||||
width: 20px;
|
||||
@ -94,24 +83,21 @@
|
||||
display: none;
|
||||
}
|
||||
|
||||
#save_button[disabled="disabled"]
|
||||
{
|
||||
#save_button[disabled="disabled"] {
|
||||
padding: 0px 6px 0px 6px;
|
||||
border: 2px outset ButtonFace;
|
||||
color: lightgrey;
|
||||
cursor: progress;
|
||||
}
|
||||
|
||||
.ui-dialog-buttonset .ui-delete-button
|
||||
{
|
||||
.ui-dialog-buttonset .ui-delete-button {
|
||||
background: url("jQueryUI/images/ui-bg_flat_30_b40404_40x100.png") repeat-x scroll 50% 50% #B40404;
|
||||
border: 1px solid #FFFFFF;
|
||||
color: #FFFFFF;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.ui-dialog-buttonset .ui-delete-button:active
|
||||
{
|
||||
.ui-dialog-buttonset .ui-delete-button:active {
|
||||
background: url("jQueryUI/images/ui-bg_flat_30_616161_40x100.png") repeat-x scroll 50% 50% #616161;
|
||||
border: 1px solid #FFFFFF;
|
||||
color: #FFFFFF;
|
||||
|
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Web.Mvc;
|
||||
@ -43,11 +44,9 @@ public AddSeriesController(RootDirProvider rootFolderProvider,
|
||||
_diskProvider = diskProvider;
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public EmptyResult ScanNewSeries()
|
||||
public ActionResult Index()
|
||||
{
|
||||
_jobProvider.QueueJob(typeof(ImportNewSeriesJob));
|
||||
return new EmptyResult();
|
||||
return View();
|
||||
}
|
||||
|
||||
public ActionResult AddNew()
|
||||
@ -66,11 +65,6 @@ public ActionResult AddNew()
|
||||
return View();
|
||||
}
|
||||
|
||||
public ActionResult Index()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
public ActionResult ExistingSeries()
|
||||
{
|
||||
var result = new ExistingSeriesModel();
|
||||
@ -116,7 +110,7 @@ public ActionResult ExistingSeries()
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public JsonResult AddNewSeries(string path, string seriesName, int seriesId, int qualityProfileId)
|
||||
public JsonResult AddNewSeries(string path, string seriesName, int seriesId, int qualityProfileId, string startDate)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(path) || String.Equals(path,"null",StringComparison.InvariantCultureIgnoreCase))
|
||||
return JsonNotificationResult.Error("Couldn't add " + seriesName, "You need a valid root folder");
|
||||
@ -127,63 +121,27 @@ public JsonResult AddNewSeries(string path, string seriesName, int seriesId, int
|
||||
//Use the created folder name when adding the series
|
||||
path = _diskProvider.CreateDirectory(path);
|
||||
|
||||
return AddExistingSeries(path, seriesName, seriesId, qualityProfileId);
|
||||
return AddExistingSeries(path, seriesName, seriesId, qualityProfileId, startDate);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[JsonErrorFilter]
|
||||
public JsonResult AddExistingSeries(string path, string seriesName, int seriesId, int qualityProfileId)
|
||||
public JsonResult AddExistingSeries(string path, string seriesName, int seriesId, int qualityProfileId, string startDate)
|
||||
{
|
||||
if (seriesId == 0 || String.IsNullOrWhiteSpace(seriesName))
|
||||
return JsonNotificationResult.Error("Add Existing series failed.", "Invalid Series information");
|
||||
|
||||
_seriesProvider.AddSeries(seriesName,path, seriesId, qualityProfileId);
|
||||
ScanNewSeries();
|
||||
DateTime? date = null;
|
||||
|
||||
if (!String.IsNullOrWhiteSpace(startDate))
|
||||
date = DateTime.Parse(startDate, null, DateTimeStyles.RoundtripKind);
|
||||
|
||||
_seriesProvider.AddSeries(seriesName,path, seriesId, qualityProfileId, date);
|
||||
_jobProvider.QueueJob(typeof(ImportNewSeriesJob));
|
||||
|
||||
return JsonNotificationResult.Info(seriesName, "Was added successfully");
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public JsonResult QuickAddNewSeries(string seriesName, int seriesId, int qualityProfileId)
|
||||
{
|
||||
var path = _rootFolderProvider.GetMostFreeRootDir();
|
||||
path = Path.Combine(path, MediaFileProvider.CleanFilename(seriesName));
|
||||
|
||||
//Create the folder for the new series
|
||||
//Use the created folder name when adding the series
|
||||
path = _diskProvider.CreateDirectory(path);
|
||||
|
||||
return AddExistingSeries(path, seriesName, seriesId, qualityProfileId);
|
||||
}
|
||||
|
||||
[ChildActionOnly]
|
||||
public ActionResult QuickAdd()
|
||||
{
|
||||
var defaultQuality = _configProvider.DefaultQualityProfile;
|
||||
var qualityProfiles = _qualityProvider.All();
|
||||
|
||||
ViewData["qualityProfiles"] = new SelectList(
|
||||
qualityProfiles,
|
||||
"QualityProfileId",
|
||||
"Name",
|
||||
defaultQuality);
|
||||
|
||||
return PartialView();
|
||||
}
|
||||
|
||||
|
||||
[HttpPost]
|
||||
[JsonErrorFilter]
|
||||
public JsonResult SaveRootDir(string path)
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(path))
|
||||
JsonNotificationResult.Error("Can't add root folder", "Path can not be empty");
|
||||
|
||||
_rootFolderProvider.Add(new RootDir { Path = path });
|
||||
|
||||
return JsonNotificationResult.Info("Root Folder saved", "Root folder saved successfully.");
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public JsonResult LookupSeries(string term)
|
||||
{
|
||||
@ -228,6 +186,18 @@ public ActionResult RootDir()
|
||||
return PartialView("RootDir");
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[JsonErrorFilter]
|
||||
public JsonResult SaveRootDir(string path)
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(path))
|
||||
JsonNotificationResult.Error("Can't add root folder", "Path can not be empty");
|
||||
|
||||
_rootFolderProvider.Add(new RootDir { Path = path });
|
||||
|
||||
return JsonNotificationResult.Info("Root Folder saved", "Root folder saved successfully.");
|
||||
}
|
||||
|
||||
[JsonErrorFilter]
|
||||
public JsonResult DeleteRootDir(string path)
|
||||
{
|
||||
|
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Web.Mvc;
|
||||
@ -44,7 +45,7 @@ public ActionResult Index()
|
||||
return View((object)serialized);
|
||||
}
|
||||
|
||||
public ActionResult SingleSeriesEditor(int seriesId)
|
||||
public ActionResult Edit(int seriesId)
|
||||
{
|
||||
var profiles = _qualityProvider.All();
|
||||
ViewData["SelectList"] = new SelectList(profiles, "QualityProfileId", "Name");
|
||||
@ -63,7 +64,7 @@ public ActionResult SingleSeriesEditor(int seriesId)
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public EmptyResult SaveSingleSeriesEditor(SeriesModel seriesModel)
|
||||
public EmptyResult Edit(SeriesModel seriesModel)
|
||||
{
|
||||
var series = _seriesProvider.GetSeries(seriesModel.SeriesId);
|
||||
series.Monitored = seriesModel.Monitored;
|
||||
@ -72,6 +73,9 @@ public EmptyResult SaveSingleSeriesEditor(SeriesModel seriesModel)
|
||||
series.Path = seriesModel.Path;
|
||||
series.BacklogSetting = (BacklogSettingType)seriesModel.BacklogSetting;
|
||||
|
||||
if (!String.IsNullOrWhiteSpace(seriesModel.CustomStartDate))
|
||||
series.CustomStartDate = DateTime.Parse(seriesModel.CustomStartDate, null, DateTimeStyles.RoundtripKind);
|
||||
|
||||
_seriesProvider.UpdateSeries(series);
|
||||
|
||||
return new EmptyResult();
|
||||
@ -166,19 +170,30 @@ public ActionResult Editor()
|
||||
masterBacklogList.Insert(0, new KeyValuePair<int, string>(-10, "Select..."));
|
||||
ViewData["MasterBacklogSettingSelectList"] = new SelectList(masterBacklogList, "Key", "Value");
|
||||
|
||||
var series = _seriesProvider.GetAllSeries().OrderBy(o => SortHelper.SkipArticles(o.Title));
|
||||
var series = GetSeriesModels(_seriesProvider.GetAllSeries()).OrderBy(o => SortHelper.SkipArticles(o.Title));
|
||||
|
||||
return View(series);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public JsonResult SaveEditor(List<Series> series)
|
||||
public JsonResult Editor(List<SeriesModel> series)
|
||||
{
|
||||
//Save edits
|
||||
if (series == null || series.Count == 0)
|
||||
return JsonNotificationResult.Oops("Invalid post data");
|
||||
|
||||
_seriesProvider.UpdateFromSeriesEditor(series);
|
||||
_seriesProvider.UpdateFromSeriesEditor(series.Select(s => new Series
|
||||
{
|
||||
SeriesId = s.SeriesId,
|
||||
QualityProfileId = s.QualityProfileId,
|
||||
Monitored = s.Monitored,
|
||||
SeasonFolder = s.SeasonFolder,
|
||||
BacklogSetting = (BacklogSettingType)s.BacklogSetting,
|
||||
Path = s.Path,
|
||||
CustomStartDate = String.IsNullOrWhiteSpace(s.CustomStartDate) ? (DateTime?)null
|
||||
: DateTime.Parse(s.CustomStartDate, null, DateTimeStyles.RoundtripKind)
|
||||
}
|
||||
).ToList());
|
||||
return JsonNotificationResult.Info("Series Mass Edit Saved");
|
||||
}
|
||||
|
||||
@ -204,7 +219,8 @@ private List<SeriesModel> GetSeriesModels(IList<Series> seriesInDb)
|
||||
EpisodeFileCount = s.EpisodeFileCount,
|
||||
NextAiring = s.NextAiring == null ? String.Empty : s.NextAiring.Value.ToBestDateString(),
|
||||
NextAiringSorter = s.NextAiring == null ? "12/31/9999" : s.NextAiring.Value.ToString("MM/dd/yyyy"),
|
||||
AirTime = s.AirTimes
|
||||
AirTime = s.AirTimes,
|
||||
CustomStartDate = s.CustomStartDate.HasValue ? s.CustomStartDate.Value.ToString("yyyy-MM-dd") : String.Empty
|
||||
}).ToList();
|
||||
|
||||
return series;
|
||||
|
@ -28,7 +28,7 @@ public class SeriesModel
|
||||
public string Details { get; set; }
|
||||
public string Network { get; set; }
|
||||
public string AirTime { get; set; }
|
||||
|
||||
|
||||
public IList<int> Seasons { get; set; }
|
||||
|
||||
//View & Edit
|
||||
@ -52,5 +52,9 @@ public class SeriesModel
|
||||
[DisplayName("Backlog Setting")]
|
||||
[Description("Should NzbDrone search for missing episodes every 30 days?")]
|
||||
public int BacklogSetting { get; set; }
|
||||
|
||||
[DisplayName("Custom Start Date")]
|
||||
[Description("Should NzbDrone only download episodes after your preferred start date?")]
|
||||
public string CustomStartDate { get; set; }
|
||||
}
|
||||
}
|
@ -476,9 +476,6 @@
|
||||
<ItemGroup>
|
||||
<Content Include="Views\Settings\System.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Views\Shared\QuickAdd.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Views\Settings\Xbmc.cshtml" />
|
||||
</ItemGroup>
|
||||
@ -534,7 +531,7 @@
|
||||
<Content Include="Views\Series\Details.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Views\Series\SingleSeriesEditor.cshtml" />
|
||||
<Content Include="Views\Series\Edit.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Views\Upcoming\UpcomingEpisode.cshtml" />
|
||||
@ -559,9 +556,6 @@
|
||||
<ItemGroup>
|
||||
<Content Include="Views\Settings\MetadataPartial.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Views\Shared\_MINIPROFILER UPDATED Layout.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Views\Settings\Pneumatic.cshtml" />
|
||||
</ItemGroup>
|
||||
@ -569,6 +563,24 @@
|
||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>BasicCorrectnessRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
|
||||
|
@ -44,4 +44,10 @@
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('.jQuery-datepicker').livequery(function () {
|
||||
$(this).datepicker({
|
||||
dateFormat: "yy-mm-dd"
|
||||
});
|
||||
});
|
||||
});
|
@ -1,7 +1,6 @@
|
||||
//URLs
|
||||
var addSeriesUrl = '../AddSeries/AddExistingSeries';
|
||||
var addNewSeriesUrl = '../AddSeries/AddNewSeries';
|
||||
var quickAddNewSeriesUrl = '../AddSeries/QuickAddNewSeries';
|
||||
var existingSeriesUrl = '../AddSeries/ExistingSeries';
|
||||
var addNewUrl = '../AddSeries/AddNew';
|
||||
|
||||
@ -19,11 +18,14 @@ $(".masterQualitySelector").live('change', function () {
|
||||
});
|
||||
});
|
||||
|
||||
$(".addExistingButton").live('click', function() {
|
||||
$(".addExistingButton").live('click', function () {
|
||||
var button = $(this);
|
||||
$(button).attr('disabled', 'disabled');
|
||||
var root = $(this).parents(".existingSeries");
|
||||
var title = $(this).siblings(".seriesLookup").val();
|
||||
var seriesId = $(this).siblings(".seriesId").val();
|
||||
var qualityId = $(this).siblings(".qualitySelector").val();
|
||||
var date = $(this).siblings('.start-date').val();
|
||||
|
||||
var path = root.find(".seriesPathValue Label").text();
|
||||
|
||||
@ -41,8 +43,9 @@ $(".addExistingButton").live('click', function() {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: addSeriesUrl,
|
||||
data: jQuery.param({ path: path, seriesName: title, seriesId: seriesId, qualityProfileId: qualityId }),
|
||||
error: function(req, status, error) {
|
||||
data: jQuery.param({ path: path, seriesName: title, seriesId: seriesId, qualityProfileId: qualityId, startDate: date }),
|
||||
error: function (req, status, error) {
|
||||
$(button).removeAttr('disabled');
|
||||
alert("Sorry! We could not add " + path + " at this time. " + error);
|
||||
},
|
||||
success: function() {
|
||||
@ -64,6 +67,14 @@ function reloadExistingSeries() {
|
||||
});
|
||||
}
|
||||
|
||||
$(".start-date-master").live('change', function () {
|
||||
|
||||
var date = $(this).val();
|
||||
$("#existingSeries").find(".start-date").each(function () {
|
||||
$(this).val(date);
|
||||
});
|
||||
});
|
||||
|
||||
//RootDir
|
||||
//Delete RootDir
|
||||
$('#rootDirs .actionButton img').live('click', function (image) {
|
||||
@ -112,20 +123,26 @@ function refreshRoot() {
|
||||
|
||||
//AddNew
|
||||
$('#saveNewSeries').live('click', function () {
|
||||
$('#saveNewSeries').attr('disabled', 'disabled');
|
||||
|
||||
var seriesTitle = $("#newSeriesLookup").val();
|
||||
var seriesId = $("#newSeriesId").val();
|
||||
var qualityId = $("#qualityList").val();
|
||||
var path = $('#newSeriesPath').val();
|
||||
var date = $('#newStartDate').val();
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: addNewSeriesUrl,
|
||||
data: jQuery.param({ path: path, seriesName: seriesTitle, seriesId: seriesId, qualityProfileId: qualityId }),
|
||||
data: jQuery.param({ path: path, seriesName: seriesTitle, seriesId: seriesId, qualityProfileId: qualityId, startDate: date }),
|
||||
error: function (req, status, error) {
|
||||
$('#saveNewSeries').removeAttr('disabled');
|
||||
alert("Sorry! We could not add " + path + " at this time. " + error);
|
||||
},
|
||||
success: function () {
|
||||
$("#newSeriesLookup").val("");
|
||||
$('#saveNewSeries').removeAttr('disabled');
|
||||
$("#newSeriesLookup").val('');
|
||||
$('#newStartDate').val('');
|
||||
}
|
||||
});
|
||||
});
|
||||
@ -140,27 +157,6 @@ function reloadAddNew() {
|
||||
}
|
||||
|
||||
|
||||
//QuickAddNew
|
||||
$('#quickAddNew').live('click', function () {
|
||||
var seriesTitle = $("#newSeriesLookup").val();
|
||||
var seriesId = $("#newSeriesId").val();
|
||||
var qualityId = $("#qualityList").val();
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: quickAddNewSeriesUrl,
|
||||
data: jQuery.param({ seriesName: seriesTitle, seriesId: seriesId, qualityProfileId: qualityId }),
|
||||
error: function (req, status, error) {
|
||||
alert("Sorry! We could not add " + path + " at this time. " + error);
|
||||
},
|
||||
success: function () {
|
||||
$("#newSeriesLookup").val("");
|
||||
$('#newSeriesPath').val("");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
//Watermark
|
||||
$('#rootDirInput').livequery(function () {
|
||||
$(this).watermark('Enter your new root folder path...');
|
||||
|
@ -1,5 +1,5 @@
|
||||
var seriesEditorUrl = '../Series/SingleSeriesEditor';
|
||||
var saveSeriesEditorUrl = '../Series/SaveSingleSeriesEditor';
|
||||
var seriesEditorUrl = '../Series/Edit';
|
||||
var saveSeriesEditorUrl = '../Series/Edit';
|
||||
var seriesDeleteUrl = '../Series/Delete';
|
||||
|
||||
$("#seriesEditor").dialog({
|
||||
|
@ -7,6 +7,7 @@
|
||||
</div>
|
||||
@Html.DropDownList("newSeriesPath", new SelectList((IList)ViewData["RootDirs"]), new { style = "width: 406px; margin-left: 0px;" })
|
||||
@Html.DropDownList("qualityList", (SelectList)ViewData["QualityProfiles"], new { @class = "qualitySelector" })
|
||||
@Html.TextBox("newStartDate", "", new { type = "date", @class = "jQuery-datepicker start-date", placeholder = "Custom Start Date", title = "Only download episodes that aired after the specified date" })
|
||||
<button id="saveNewSeries">
|
||||
Add</button>
|
||||
</div>
|
@ -23,6 +23,8 @@ else
|
||||
{
|
||||
@Html.DropDownList(Guid.NewGuid().ToString(), Model.Quality, new { @class = "qualitySelector masterQualitySelector" })
|
||||
|
||||
@Html.TextBox(Guid.NewGuid().ToString(), "", new { type="date", @class = "jQuery-datepicker start-date-master", placeholder = "Custom Start Date", title = "Only download episodes that aired after the specified date" })
|
||||
|
||||
foreach (var series in Model.ExistingSeries)
|
||||
{
|
||||
<div class="existingSeries">
|
||||
@ -30,9 +32,10 @@ else
|
||||
<label>@series.Item1</label>
|
||||
</span>
|
||||
<div class="existingSeriesContainer">
|
||||
<input class="seriesLookup" type="text" style="width: 400px;" value="@series.Item2" />
|
||||
<input class="seriesLookup" type="text" style="width: 400px;" value="@series.Item2" placeholder="Series Title" />
|
||||
@Html.Hidden("seriesId", series.Item3, new { @class = "seriesId" })
|
||||
@Html.DropDownList(Guid.NewGuid().ToString(), Model.Quality, new { @class = "qualitySelector" })
|
||||
@Html.TextBox(Guid.NewGuid().ToString(), "", new { type="date", @class = "jQuery-datepicker start-date", placeholder = "Custom Start Date", title = "Only download episodes that aired after the specified date" })
|
||||
<button class="addExistingButton">
|
||||
Add</button>
|
||||
</div>
|
||||
|
@ -19,6 +19,11 @@
|
||||
left: 415px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.start-date-master {
|
||||
left: 430px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.seriesPathValue
|
||||
{
|
||||
@ -45,6 +50,10 @@
|
||||
cursor: pointer;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
input[type=date].start-date {
|
||||
margin-left: 10px;
|
||||
}
|
||||
</style>
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
</style>
|
||||
|
||||
<div id="stylized" style="border-color: transparent;">
|
||||
@using (Html.BeginForm("SaveSingleSeriesEditor", "Series", FormMethod.Post, new { id = "SeriesEditorForm", name = "SeriesEditorForm", @class = "settingsForm" }))
|
||||
@using (Html.BeginForm("Edit", "Series", FormMethod.Post, new { id = "SeriesEditorForm", name = "SeriesEditorForm", @class = "settingsForm" }))
|
||||
{
|
||||
@Html.HiddenFor(m => m.SeriesId)
|
||||
@Html.HiddenFor(m => m.Status)
|
||||
@ -36,5 +36,10 @@
|
||||
<span class="small">@Html.DescriptionFor(m => m.BacklogSetting)</span>
|
||||
</label>
|
||||
@Html.DropDownListFor(m => m.BacklogSetting, (SelectList)ViewData["BacklogSettingSelectList"], new { @class = "inputClass" })
|
||||
|
||||
<label class="labelClass">@Html.LabelFor(m => m.CustomStartDate)
|
||||
<span class="small">@Html.DescriptionFor(m => m.CustomStartDate)</span>
|
||||
</label>
|
||||
@Html.TextBoxFor(m => m.CustomStartDate, new { type = "date", @class = "inputClass jQuery-datepicker" })
|
||||
}
|
||||
</div>
|
@ -1,5 +1,5 @@
|
||||
@using NzbDrone.Web.Helpers
|
||||
@model IEnumerable<NzbDrone.Core.Repository.Series>
|
||||
@model IEnumerable<NzbDrone.Web.Models.SeriesModel>
|
||||
@{ViewBag.Title = "Series Editor";}
|
||||
|
||||
@section HeaderContent
|
||||
@ -16,7 +16,7 @@
|
||||
</ul>
|
||||
}
|
||||
|
||||
@using (Html.BeginForm("SaveEditor", "Series", FormMethod.Post, new { id = "SeriesEditor", name = "SeriesEditor" }))
|
||||
@using (Html.BeginForm("Editor", "Series", FormMethod.Post, new { id = "SeriesEditor", name = "SeriesEditor" }))
|
||||
{
|
||||
<table id="seriesEditorGrid" class="dataTable dataTablesGrid no-details">
|
||||
<thead>
|
||||
@ -24,10 +24,12 @@
|
||||
<th width="14px">@Html.CheckBox("editToggleMaster", false, new { @class = "editToggleMaster" })</th>
|
||||
<th>Title</th>
|
||||
<th width="125px;">Quality</th>
|
||||
<th class="checkboxColumn">Monitored</th>
|
||||
<th class="checkboxColumn">Season Folder</th>
|
||||
<th width="100px">Backlog Status</th>
|
||||
<th width="310px">Path</th>
|
||||
<th width="90px">Monitored</th>
|
||||
<th width="110px">Season Folder</th>
|
||||
<th width="110px">Backlog Status</th>
|
||||
<th width="80px" title="Custom Start Date">Start Date</th>
|
||||
<th width="300px">Path</th>
|
||||
<th style="width: 10px"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
@ -46,22 +48,30 @@
|
||||
@Html.DropDownList("masterQualitySelector", (SelectList)ViewData["MasterProfileSelectList"], new { @class = "footer-control-quality masterSelector master-quality", disabled = true })
|
||||
</th>
|
||||
<th>
|
||||
@Html.DropDownList("masterMonitored", (SelectList)ViewData["BoolSelectList"], new { @class = "footer-control masterSelector master-monitored", disabled = true })
|
||||
@Html.DropDownList("masterMonitored", (SelectList)ViewData["BoolSelectList"], new { @class = "footer-control-boolean masterSelector master-monitored", disabled = true })
|
||||
</th>
|
||||
<th>
|
||||
@Html.DropDownList("masterSeasonFolder", (SelectList)ViewData["BoolSelectList"], new { @class = "footer-control masterSelector master-season-folder", disabled = true })
|
||||
@Html.DropDownList("masterSeasonFolder", (SelectList)ViewData["BoolSelectList"], new { @class = "footer-control-boolean masterSelector master-season-folder", disabled = true })
|
||||
</th>
|
||||
<th>
|
||||
@Html.DropDownList("masterBacklogSetting", (SelectList)ViewData["MasterBacklogSettingSelectList"], new { @class = "footer-control masterSelector master-backlog-setting", disabled = true })
|
||||
</th>
|
||||
<th>
|
||||
@Html.TextBox("masterStartDate", "" , new { type = "date", @class = "footer-control-start-date masterSelector master-start-date jQuery-datepicker", disabled = true })
|
||||
</th>
|
||||
<th>
|
||||
<button id="series-editor-save" type="submit" class="save_button" disabled="disabled" title="Commit the settings from your series above to the database">
|
||||
Save Changes
|
||||
</button>
|
||||
|
||||
|
||||
</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</table>
|
||||
|
||||
@Html.CheckBox("highlightEnded", true)
|
||||
<label for="highlightEnded">Highlight Ended</label>
|
||||
}
|
||||
|
||||
@section Scripts
|
||||
@ -75,19 +85,70 @@
|
||||
"bPaginate": false,
|
||||
"bLengthChange": false,
|
||||
"bFilter": false,
|
||||
"bSort": false,
|
||||
"bSort": true,
|
||||
"bInfo": false,
|
||||
"bAutoWidth": false
|
||||
"bAutoWidth": false,
|
||||
"aaSorting": [[1, 'asc']],
|
||||
"aoColumns": [
|
||||
{ "bSortable": false },
|
||||
{ "bSortable": true },
|
||||
{ "bSortable": false },
|
||||
{ "bSortable": false },
|
||||
{ "bSortable": false },
|
||||
{ "bSortable": false },
|
||||
{ "bSortable": false },
|
||||
{ "bSortable": false },
|
||||
{ "bSortable": true }
|
||||
]
|
||||
});
|
||||
|
||||
new FixedHeader(oTable, { "top": true, "left": false, "right": false, "bottom": true });
|
||||
|
||||
$('.editToggle').enableCheckboxRangeSelection();
|
||||
|
||||
//$('.master-quality option[value=-10]').text('Quality...');
|
||||
//$('.master-monitored option[value=-10]').text('Monitored...');
|
||||
//$('.master-season-folder option[value=-10]').text('Season Folder...');
|
||||
//$('.master-backlog-setting option[value=-10]').text('Backlog Setting...');
|
||||
$(document).ready(function () {
|
||||
var cookieValue = $.cookie("highlightEnded");
|
||||
|
||||
if (cookieValue == "true") {
|
||||
$('#highlightEnded').attr('checked', true);
|
||||
toggleHighlightEnded(true);
|
||||
}
|
||||
|
||||
else {
|
||||
$('#highlightEnded').attr('checked', false);
|
||||
toggleHighlightEnded(false);
|
||||
}
|
||||
|
||||
$('#highlightEnded').button();
|
||||
});
|
||||
|
||||
$('#highlightEnded').on('change', function () {
|
||||
var checked = $(this).attr('checked');
|
||||
toggleHighlightEnded(checked);
|
||||
toggleHighlightEndedCookie(checked);
|
||||
});
|
||||
|
||||
function toggleHighlightEnded(highlight) {
|
||||
var ended = $('tr[data-status="Ended"]');
|
||||
|
||||
ended.each(function () {
|
||||
if (highlight) {
|
||||
$(this).addClass('series-ended');
|
||||
}
|
||||
|
||||
else {
|
||||
$(this).removeClass('series-ended');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function toggleHighlightEndedCookie(highlight) {
|
||||
if (highlight)
|
||||
$.cookie("highlightEnded", true, { expires: 365 });
|
||||
|
||||
else
|
||||
$.cookie("highlightEnded", false, { expires: 365 });
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on('change', '.editToggleMaster', function () {
|
||||
@ -180,6 +241,16 @@
|
||||
});
|
||||
});
|
||||
|
||||
$(document).on('change', '#masterStartDate', function () {
|
||||
var startDate = $(this).val();
|
||||
|
||||
var selected = $('.editToggle:checked');
|
||||
|
||||
selected.each(function () {
|
||||
$(this).parent('td').parent('.seriesEditRow').find('.start-date').val(startDate);
|
||||
});
|
||||
});
|
||||
|
||||
$(document).on('click', '#series-editor-save', function () {
|
||||
$('#SeriesEditor').submit();
|
||||
});
|
||||
|
@ -1,4 +1,4 @@
|
||||
@model NzbDrone.Core.Repository.Series
|
||||
@model NzbDrone.Web.Models.SeriesModel
|
||||
@using NzbDrone.Core.Model
|
||||
@using NzbDrone.Core.Repository.Quality
|
||||
@using NzbDrone.Web.Helpers
|
||||
@ -9,7 +9,7 @@
|
||||
|
||||
@*SeriesId, Title, Quality, Monitored, Use Season Folder, Root Directory/Path*, Backlog Toggle*@
|
||||
|
||||
<tr class="seriesEditRow">
|
||||
<tr class="seriesEditRow" data-status="@Model.Status">
|
||||
@using (Html.BeginCollectionItem("series"))
|
||||
{
|
||||
var idClean = ViewData.TemplateInfo.HtmlFieldPrefix.Replace('[', '_').Replace(']', '_');
|
||||
@ -21,6 +21,18 @@
|
||||
<td class="checkboxColumn">@Html.CheckBoxFor(m => m.Monitored, new {@class = "seriesCheckbox monitored"})</td>
|
||||
<td class="checkboxColumn">@Html.CheckBoxFor(m => m.SeasonFolder, new {@class = "seriesCheckbox seasonFolder"})</td>
|
||||
<td>@Html.DropDownListFor(m => m.BacklogSetting, new SelectList((List<KeyValuePair<int, string>>)ViewData["BacklogSettingTypes"], "Key", "Value", (int)Model.BacklogSetting), new { @class = "backlogSetting" })</td>
|
||||
<td>@Html.TextBoxFor(m => m.CustomStartDate, new { type = "date", @class = "start-date jQuery-datepicker" })</td>
|
||||
<td>@Html.TextBoxFor(m => m.Path, new { @class = "path" })</td>
|
||||
<td>
|
||||
@if (Model.Status == "Ended")
|
||||
{
|
||||
<img src="../../Content/Images/stop.png" width="24" height="24" alt="Ended" title="Ended" />
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
<img src="../../Content/Images/play.png" width="24" height="24" alt="Active" title="Continuing" />
|
||||
}
|
||||
</td>
|
||||
}
|
||||
</tr>
|
@ -1,15 +0,0 @@
|
||||
@using System.Collections
|
||||
@using NzbDrone.Core
|
||||
<div id="quickAdd">
|
||||
<input id="quickSeriesLookup" class="seriesLookup" type="text" style="width: 400px" />
|
||||
@Html.Hidden("newSeriesId", 0, new { @class = "seriesId" })
|
||||
@Html.DropDownList("qualityList", (SelectList)ViewData["QualityProfiles"], new { @class = "qualitySelector" })
|
||||
<button id="quickAddNew">Add</button>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
jQuery(document).ready(function () {
|
||||
//AddNew
|
||||
$('#quickSeriesLookup').watermark('Title of the series you want to add...');
|
||||
});
|
||||
</script>
|
@ -1,45 +0,0 @@
|
||||
@* Required so you have extention methods for client timings *@
|
||||
@using StackExchange.Profiling;
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
@* optional (enable client timing framework) *@
|
||||
@this.InitClientTimings()
|
||||
<meta charset="utf-8" />
|
||||
<title>@ViewBag.Title</title>
|
||||
|
||||
@* optional time scripts in the header *@
|
||||
@this.TimeScript("Content Site.css",
|
||||
@<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />)
|
||||
@this.TimeScript("jQuery 1.5.1",
|
||||
@<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>)
|
||||
@this.TimeScript("modernizr",
|
||||
@<script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>)
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
<header>
|
||||
<div id="title">
|
||||
<h1>My MVC Application</h1>
|
||||
</div>
|
||||
<div id="logindisplay">
|
||||
@Html.Partial("_LogOnPartial")
|
||||
</div>
|
||||
<nav>
|
||||
<ul id="menu">
|
||||
<li>@Html.ActionLink("Home", "Index", "Home")</li>
|
||||
<li>@Html.ActionLink("About", "About", "Home")</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<section id="main">
|
||||
@RenderBody()
|
||||
</section>
|
||||
<footer>
|
||||
</footer>
|
||||
</div>
|
||||
@* Make sure you've added this one line to your LAYOUT or MASTER PAGE *@
|
||||
@MiniProfiler.RenderIncludes()
|
||||
</body>
|
||||
</html>
|
70
NzbDrone.sln
70
NzbDrone.sln
@ -9,6 +9,10 @@ EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Services", "Services", "{5853FEE1-D6C1-49AB-B1E3-12216491DA69}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NzbDrone", "NzbDrone\NzbDrone.csproj", "{D12F7F2F-8A3C-415F-88FA-6DD061A84869}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{FF5EE3B6-913B-47CE-9CEB-11C51B4E1205} = {FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD} = {43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NzbDrone.Core", "NzbDrone.Core\NzbDrone.Core.csproj", "{FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}"
|
||||
EndProject
|
||||
@ -103,7 +107,7 @@ Global
|
||||
{FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Pilot|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Pilot|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Pilot|x64.ActiveCfg = Release|Any CPU
|
||||
{FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Pilot|x86.ActiveCfg = Release|Any CPU
|
||||
{FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Pilot|x86.ActiveCfg = Release|x86
|
||||
{FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Release|Mixed Platforms.ActiveCfg = Release|x86
|
||||
@ -125,14 +129,14 @@ Global
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Debug|x86.Build.0 = Debug|x86
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Pilot|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Pilot|Any CPU.Build.0 = Release|Any CPU
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Pilot|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Pilot|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Pilot|Mixed Platforms.ActiveCfg = Release|x86
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Pilot|Mixed Platforms.Build.0 = Release|x86
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Pilot|x64.ActiveCfg = Release|Any CPU
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Pilot|x86.ActiveCfg = Release|Any CPU
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Pilot|x86.ActiveCfg = Release|x86
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
@ -150,14 +154,14 @@ Global
|
||||
{193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Debug|x86.Build.0 = Debug|x86
|
||||
{193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Pilot|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Pilot|Any CPU.Build.0 = Release|Any CPU
|
||||
{193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Pilot|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Pilot|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Pilot|x64.ActiveCfg = Release|Any CPU
|
||||
{193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Pilot|x86.ActiveCfg = Release|Any CPU
|
||||
{193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Pilot|x86.ActiveCfg = Release|x86
|
||||
{193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
@ -175,14 +179,14 @@ Global
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Debug|x86.Build.0 = Debug|x86
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Pilot|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Pilot|Any CPU.Build.0 = Release|Any CPU
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Pilot|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Pilot|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Pilot|Mixed Platforms.ActiveCfg = Release|x86
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Pilot|Mixed Platforms.Build.0 = Release|x86
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Pilot|x64.ActiveCfg = Release|Any CPU
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Pilot|x86.ActiveCfg = Release|Any CPU
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Pilot|x86.ActiveCfg = Release|x86
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
@ -272,14 +276,14 @@ Global
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Debug|x86.Build.0 = Debug|x86
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Pilot|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Pilot|Any CPU.Build.0 = Release|Any CPU
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Pilot|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Pilot|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Pilot|Mixed Platforms.ActiveCfg = Release|x86
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Pilot|Mixed Platforms.Build.0 = Release|x86
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Pilot|x64.ActiveCfg = Release|Any CPU
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Pilot|x86.ActiveCfg = Release|Any CPU
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Pilot|x86.ActiveCfg = Release|x86
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
@ -297,14 +301,14 @@ Global
|
||||
{BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Debug|x86.Build.0 = Debug|x86
|
||||
{BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Pilot|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Pilot|Any CPU.Build.0 = Release|Any CPU
|
||||
{BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Pilot|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Pilot|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Pilot|x64.ActiveCfg = Release|Any CPU
|
||||
{BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Pilot|x86.ActiveCfg = Release|Any CPU
|
||||
{BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Pilot|x86.ActiveCfg = Release|x86
|
||||
{BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
@ -322,14 +326,14 @@ Global
|
||||
{CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Debug|x86.Build.0 = Debug|x86
|
||||
{CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Pilot|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Pilot|Any CPU.Build.0 = Release|Any CPU
|
||||
{CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Pilot|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Pilot|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Pilot|x64.ActiveCfg = Release|Any CPU
|
||||
{CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Pilot|x86.ActiveCfg = Release|Any CPU
|
||||
{CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Pilot|x86.ActiveCfg = Release|x86
|
||||
{CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
@ -347,13 +351,13 @@ Global
|
||||
{3CCD64E1-84DA-4853-B7EF-98B02FD4E39E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{3CCD64E1-84DA-4853-B7EF-98B02FD4E39E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{3CCD64E1-84DA-4853-B7EF-98B02FD4E39E}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{3CCD64E1-84DA-4853-B7EF-98B02FD4E39E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{3CCD64E1-84DA-4853-B7EF-98B02FD4E39E}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{3CCD64E1-84DA-4853-B7EF-98B02FD4E39E}.Pilot|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3CCD64E1-84DA-4853-B7EF-98B02FD4E39E}.Pilot|Any CPU.Build.0 = Release|Any CPU
|
||||
{3CCD64E1-84DA-4853-B7EF-98B02FD4E39E}.Pilot|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{3CCD64E1-84DA-4853-B7EF-98B02FD4E39E}.Pilot|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{3CCD64E1-84DA-4853-B7EF-98B02FD4E39E}.Pilot|x64.ActiveCfg = Release|Any CPU
|
||||
{3CCD64E1-84DA-4853-B7EF-98B02FD4E39E}.Pilot|x86.ActiveCfg = Release|Any CPU
|
||||
{3CCD64E1-84DA-4853-B7EF-98B02FD4E39E}.Pilot|x86.ActiveCfg = Release|x86
|
||||
{3CCD64E1-84DA-4853-B7EF-98B02FD4E39E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3CCD64E1-84DA-4853-B7EF-98B02FD4E39E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3CCD64E1-84DA-4853-B7EF-98B02FD4E39E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
@ -419,14 +423,14 @@ Global
|
||||
{63B155D7-AE78-4FEB-88BB-2F025ADD1F15}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{63B155D7-AE78-4FEB-88BB-2F025ADD1F15}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{63B155D7-AE78-4FEB-88BB-2F025ADD1F15}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{63B155D7-AE78-4FEB-88BB-2F025ADD1F15}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{63B155D7-AE78-4FEB-88BB-2F025ADD1F15}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{63B155D7-AE78-4FEB-88BB-2F025ADD1F15}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{63B155D7-AE78-4FEB-88BB-2F025ADD1F15}.Debug|x86.Build.0 = Debug|x86
|
||||
{63B155D7-AE78-4FEB-88BB-2F025ADD1F15}.Pilot|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{63B155D7-AE78-4FEB-88BB-2F025ADD1F15}.Pilot|Any CPU.Build.0 = Release|Any CPU
|
||||
{63B155D7-AE78-4FEB-88BB-2F025ADD1F15}.Pilot|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{63B155D7-AE78-4FEB-88BB-2F025ADD1F15}.Pilot|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{63B155D7-AE78-4FEB-88BB-2F025ADD1F15}.Pilot|x64.ActiveCfg = Release|Any CPU
|
||||
{63B155D7-AE78-4FEB-88BB-2F025ADD1F15}.Pilot|x86.ActiveCfg = Release|Any CPU
|
||||
{63B155D7-AE78-4FEB-88BB-2F025ADD1F15}.Pilot|x86.ActiveCfg = Release|x86
|
||||
{63B155D7-AE78-4FEB-88BB-2F025ADD1F15}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{63B155D7-AE78-4FEB-88BB-2F025ADD1F15}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{63B155D7-AE78-4FEB-88BB-2F025ADD1F15}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
@ -444,14 +448,14 @@ Global
|
||||
{12261AE5-BCC4-4DC7-A218-0764B9C30230}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{12261AE5-BCC4-4DC7-A218-0764B9C30230}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{12261AE5-BCC4-4DC7-A218-0764B9C30230}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{12261AE5-BCC4-4DC7-A218-0764B9C30230}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{12261AE5-BCC4-4DC7-A218-0764B9C30230}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{12261AE5-BCC4-4DC7-A218-0764B9C30230}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{12261AE5-BCC4-4DC7-A218-0764B9C30230}.Debug|x86.Build.0 = Debug|x86
|
||||
{12261AE5-BCC4-4DC7-A218-0764B9C30230}.Pilot|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{12261AE5-BCC4-4DC7-A218-0764B9C30230}.Pilot|Any CPU.Build.0 = Release|Any CPU
|
||||
{12261AE5-BCC4-4DC7-A218-0764B9C30230}.Pilot|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{12261AE5-BCC4-4DC7-A218-0764B9C30230}.Pilot|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{12261AE5-BCC4-4DC7-A218-0764B9C30230}.Pilot|x64.ActiveCfg = Release|Any CPU
|
||||
{12261AE5-BCC4-4DC7-A218-0764B9C30230}.Pilot|x86.ActiveCfg = Release|Any CPU
|
||||
{12261AE5-BCC4-4DC7-A218-0764B9C30230}.Pilot|x86.ActiveCfg = Release|x86
|
||||
{12261AE5-BCC4-4DC7-A218-0764B9C30230}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{12261AE5-BCC4-4DC7-A218-0764B9C30230}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{12261AE5-BCC4-4DC7-A218-0764B9C30230}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
|
Loading…
Reference in New Issue
Block a user