1
0
mirror of https://github.com/Radarr/Radarr.git synced 2024-09-19 07:52:33 +02:00

Monitored instead of ignored for episodes and seasons

This commit is contained in:
Mark McDowall 2013-07-08 18:22:02 -07:00
parent 5b226a4a5e
commit 41baecc2ee
19 changed files with 93 additions and 58 deletions

View File

@ -16,7 +16,7 @@ public class EpisodeResource : RestResource
public EpisodeFile EpisodeFile { get; set; } public EpisodeFile EpisodeFile { get; set; }
public Boolean HasFile { get; set; } public Boolean HasFile { get; set; }
public Boolean Ignored { get; set; } public Boolean Monitored { get; set; }
public Int32 SceneEpisodeNumber { get; set; } public Int32 SceneEpisodeNumber { get; set; }
public Int32 SceneSeasonNumber { get; set; } public Int32 SceneSeasonNumber { get; set; }
public Int32 TvDbEpisodeId { get; set; } public Int32 TvDbEpisodeId { get; set; }

View File

@ -30,8 +30,8 @@ public void Setup()
.With(c => c.Monitored = true) .With(c => c.Monitored = true)
.Build(); .Build();
_firstEpisode = new Episode { Ignored = false }; _firstEpisode = new Episode { Monitored = true };
_secondEpisode = new Episode { Ignored = false }; _secondEpisode = new Episode { Monitored = true };
var singleEpisodeList = new List<Episode> { _firstEpisode }; var singleEpisodeList = new List<Episode> { _firstEpisode };
@ -48,20 +48,16 @@ public void Setup()
Series = _fakeSeries, Series = _fakeSeries,
Episodes = singleEpisodeList Episodes = singleEpisodeList
}; };
} }
private void WithFirstEpisodeIgnored() private void WithFirstEpisodeUnmonitored()
{ {
_firstEpisode.Ignored = true; _firstEpisode.Monitored = false;
} }
private void WithSecondEpisodeIgnored() private void WithSecondEpisodeUnmonitored()
{ {
_secondEpisode.Ignored = true; _secondEpisode.Monitored = false;
} }
[Test] [Test]
@ -81,34 +77,34 @@ public void not_monitored_series_should_be_skipped()
[Test] [Test]
public void only_episode_ignored_should_return_false() public void only_episode_not_monitored_should_return_false()
{ {
WithFirstEpisodeIgnored(); WithFirstEpisodeUnmonitored();
_monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultSingle).Should().BeFalse(); _monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultSingle).Should().BeFalse();
} }
[Test] [Test]
public void both_episodes_ignored_should_return_false() public void both_episodes_not_monitored_should_return_false()
{ {
WithFirstEpisodeIgnored(); WithFirstEpisodeUnmonitored();
WithSecondEpisodeIgnored(); WithSecondEpisodeUnmonitored();
_monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultMulti).Should().BeFalse(); _monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultMulti).Should().BeFalse();
} }
[Test] [Test]
public void only_first_episode_ignored_should_return_monitored() public void only_first_episode_not_monitored_should_return_monitored()
{ {
WithFirstEpisodeIgnored(); WithFirstEpisodeUnmonitored();
_monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultMulti).Should().BeTrue(); _monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultMulti).Should().BeTrue();
} }
[Test] [Test]
public void only_second_episode_ignored_should_return_monitored() public void only_second_episode_not_monitored_should_return_monitored()
{ {
WithSecondEpisodeIgnored(); WithSecondEpisodeUnmonitored();
_monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultMulti).Should().BeTrue(); _monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultMulti).Should().BeTrue();
} }

View File

@ -1,4 +1,6 @@
/* //TODO: Alrighty then... We should delete this or uncomment some of these tests...
/*
using System; using System;

View File

@ -13,26 +13,25 @@ namespace NzbDrone.Core.Test.TvTests
{ {
public class SeasonProviderTest : DbTest<SeasonRepository, Season> public class SeasonProviderTest : DbTest<SeasonRepository, Season>
{ {
[TestCase(true)] [TestCase(true)]
[TestCase(false)] [TestCase(false)]
public void IsIgnored_should_return_ignored_status_of_season(bool ignoreFlag) public void Ismonitored_should_return_monitored_status_of_season(bool monitored)
{ {
var fakeSeason = Builder<Season>.CreateNew() var fakeSeason = Builder<Season>.CreateNew()
.With(s => s.Ignored = ignoreFlag) .With(s => s.Monitored = monitored)
.BuildNew<Season>(); .BuildNew<Season>();
Db.Insert(fakeSeason); Db.Insert(fakeSeason);
var result = Subject.IsIgnored(fakeSeason.SeriesId, fakeSeason.SeasonNumber); var result = Subject.IsMonitored(fakeSeason.SeriesId, fakeSeason.SeasonNumber);
result.Should().Be(ignoreFlag); result.Should().Be(monitored);
} }
[Test] [Test]
public void IsIgnored_should_return_false_if_not_in_db() public void Monitored_should_return_true_if_not_in_db()
{ {
Subject.IsIgnored(10, 0).Should().BeFalse(); Subject.IsMonitored(10, 0).Should().BeTrue();
} }
[Test] [Test]

View File

@ -142,10 +142,10 @@ public string UpdateUrl
set { SetValue("UpdateUrl", value); } set { SetValue("UpdateUrl", value); }
} }
public bool AutoIgnorePreviouslyDownloadedEpisodes public bool AutoUnmonitorPreviouslyDownloadedEpisodes
{ {
get { return GetValueBoolean("AutoIgnorePreviouslyDownloadedEpisodes"); } get { return GetValueBoolean("AutoUnmonitorPreviouslyDownloadedEpisodes"); }
set { SetValue("AutoIgnorePreviouslyDownloadedEpisodes", value); } set { SetValue("AutoUnmonitorPreviouslyDownloadedEpisodes", value); }
} }
public int Retention public int Retention

View File

@ -22,7 +22,7 @@ public interface IConfigService
String DownloadedEpisodesFolder { get; set; } String DownloadedEpisodesFolder { get; set; }
bool UseSeasonFolder { get; set; } bool UseSeasonFolder { get; set; }
string SeasonFolderFormat { get; set; } string SeasonFolderFormat { get; set; }
bool AutoIgnorePreviouslyDownloadedEpisodes { get; set; } bool AutoUnmonitorPreviouslyDownloadedEpisodes { get; set; }
int Retention { get; set; } int Retention { get; set; }
Guid UGuid { get; } Guid UGuid { get; }
DownloadClientType DownloadClient { get; set; } DownloadClientType DownloadClient { get; set; }

View File

@ -0,0 +1,22 @@
using FluentMigrator;
using NzbDrone.Core.Datastore.Migration.Framework;
namespace NzbDrone.Core.Datastore.Migration
{
[Tags("")]
[Migration(10)]
public class add_monitored : NzbDroneMigrationBase
{
protected override void MainDbUpgrade()
{
Alter.Table("Episodes").AddColumn("Monitored").AsBoolean().Nullable();
Alter.Table("Seasons").AddColumn("Monitored").AsBoolean().Nullable();
Execute.Sql("UPDATE Episodes SET Monitored = 1 WHERE Ignored = 0");
Execute.Sql("UPDATE Episodes SET Monitored = 0 WHERE Ignored = 1");
Execute.Sql("UPDATE Seasons SET Monitored = 1 WHERE Ignored = 0");
Execute.Sql("UPDATE Seasons SET Monitored = 0 WHERE Ignored = 1");
}
}
}

View File

@ -0,0 +1,16 @@
using FluentMigrator;
using NzbDrone.Core.Datastore.Migration.Framework;
namespace NzbDrone.Core.Datastore.Migration
{
[Tags("")]
[Migration(11)]
public class remove_ignored : NzbDroneMigrationBase
{
protected override void MainDbUpgrade()
{
SQLiteAlter.DropColumns("Episodes", new[] { "Ignored" });
SQLiteAlter.DropColumns("Seasons", new[] { "Ignored" });
}
}
}

View File

@ -17,7 +17,7 @@ public string RejectionReason
{ {
get get
{ {
return "Series is not monitored or Episode is ignored"; return "Series or Episode is not monitored";
} }
} }
@ -30,12 +30,12 @@ public virtual bool IsSatisfiedBy(RemoteEpisode subject)
} }
//return monitored if any of the episodes are monitored //return monitored if any of the episodes are monitored
if (subject.Episodes.Any(episode => !episode.Ignored)) if (subject.Episodes.Any(episode => episode.Monitored))
{ {
return true; return true;
} }
_logger.Debug("All episodes are ignored. skipping."); _logger.Debug("No episodes are monitored. skipping.");
return false; return false;
} }
} }

View File

@ -214,6 +214,8 @@
<Compile Include="Datastore\Migration\007_add_renameEpisodes_to_naming.cs" /> <Compile Include="Datastore\Migration\007_add_renameEpisodes_to_naming.cs" />
<Compile Include="Datastore\Migration\008_remove_backlog.cs" /> <Compile Include="Datastore\Migration\008_remove_backlog.cs" />
<Compile Include="Datastore\Migration\009_fix_renameEpisodes.cs" /> <Compile Include="Datastore\Migration\009_fix_renameEpisodes.cs" />
<Compile Include="Datastore\Migration\010_add_monitored.cs" />
<Compile Include="Datastore\Migration\011_remove_ignored.cs" />
<Compile Include="Datastore\Migration\Framework\MigrationContext.cs" /> <Compile Include="Datastore\Migration\Framework\MigrationContext.cs" />
<Compile Include="Datastore\Migration\Framework\MigrationController.cs" /> <Compile Include="Datastore\Migration\Framework\MigrationController.cs" />
<Compile Include="Datastore\Migration\Framework\MigrationExtension.cs" /> <Compile Include="Datastore\Migration\Framework\MigrationExtension.cs" />

View File

@ -25,8 +25,8 @@ public List<SeriesStatistics> SeriesStatistics()
var queryText = @"SELECT var queryText = @"SELECT
SeriesId, SeriesId,
SUM(CASE WHEN Ignored = 0 AND Airdate <= @currentDate THEN 1 ELSE 0 END) AS EpisodeCount, SUM(CASE WHEN Monitored = 1 AND Airdate <= @currentDate THEN 1 ELSE 0 END) AS EpisodeCount,
SUM(CASE WHEN Ignored = 0 AND Episodes.EpisodeFileId > 0 AND AirDate <= @currentDate THEN 1 ELSE 0 END) as EpisodeFileCount, SUM(CASE WHEN Monitored = 1 AND Episodes.EpisodeFileId > 0 AND AirDate <= @currentDate THEN 1 ELSE 0 END) as EpisodeFileCount,
MAX(Episodes.SeasonNumber) as SeasonCount, MAX(Episodes.SeasonNumber) as SeasonCount,
MIN(CASE WHEN AirDate < @currentDate THEN NULL ELSE AirDate END) as NextAiringString MIN(CASE WHEN AirDate < @currentDate THEN NULL ELSE AirDate END) as NextAiringString
FROM Episodes FROM Episodes

View File

@ -17,7 +17,7 @@ public class Episode : ModelBase
public DateTime? AirDate { get; set; } public DateTime? AirDate { get; set; }
public string Overview { get; set; } public string Overview { get; set; }
public Boolean Ignored { get; set; } public Boolean Monitored { get; set; }
public Nullable<Int32> AbsoluteEpisodeNumber { get; set; } public Nullable<Int32> AbsoluteEpisodeNumber { get; set; }
public int SceneSeasonNumber { get; set; } public int SceneSeasonNumber { get; set; }
public int SceneEpisodeNumber { get; set; } public int SceneEpisodeNumber { get; set; }

View File

@ -24,7 +24,7 @@ public interface IEpisodeRepository : IBasicRepository<Episode>
Episode FindEpisodeBySceneNumbering(int seriesId, int seasonNumber, int episodeNumber); Episode FindEpisodeBySceneNumbering(int seriesId, int seasonNumber, int episodeNumber);
List<Episode> EpisodesWithFiles(); List<Episode> EpisodesWithFiles();
List<Episode> EpisodesBetweenDates(DateTime startDate, DateTime endDate); List<Episode> EpisodesBetweenDates(DateTime startDate, DateTime endDate);
void SetIgnoreFlat(Episode episode, bool ignoreFlag); void SetMonitoredFlat(Episode episode, bool monitored);
void SetFileId(int episodeId, int fileId); void SetFileId(int episodeId, int fileId);
} }
@ -119,10 +119,10 @@ public List<Episode> EpisodesBetweenDates(DateTime startDate, DateTime endDate)
.AndWhere(e => e.AirDate <= endDate).ToList(); .AndWhere(e => e.AirDate <= endDate).ToList();
} }
public void SetIgnoreFlat(Episode episode, bool ignoreFlag) public void SetMonitoredFlat(Episode episode, bool monitored)
{ {
episode.Ignored = ignoreFlag; episode.Monitored = monitored;
SetFields(episode, p => p.Ignored); SetFields(episode, p => p.Monitored);
} }
public void SetFileId(int episodeId, int fileId) public void SetFileId(int episodeId, int fileId)

View File

@ -24,7 +24,7 @@ public interface IEpisodeService
List<Episode> EpisodesWithFiles(); List<Episode> EpisodesWithFiles();
void UpdateEpisode(Episode episode); void UpdateEpisode(Episode episode);
List<int> GetEpisodeNumbersBySeason(int seriesId, int seasonNumber); List<int> GetEpisodeNumbersBySeason(int seriesId, int seasonNumber);
void SetEpisodeIgnore(int episodeId, bool isIgnored); void SetEpisodeMonitored(int episodeId, bool monitored);
bool IsFirstOrLastEpisodeOfSeason(int episodeId); bool IsFirstOrLastEpisodeOfSeason(int episodeId);
void UpdateEpisodes(List<Episode> episodes); void UpdateEpisodes(List<Episode> episodes);
List<Episode> EpisodesBetweenDates(DateTime start, DateTime end); List<Episode> EpisodesBetweenDates(DateTime start, DateTime end);
@ -123,12 +123,12 @@ public List<int> GetEpisodeNumbersBySeason(int seriesId, int seasonNumber)
return GetEpisodesBySeason(seriesId, seasonNumber).Select(c => c.Id).ToList(); return GetEpisodesBySeason(seriesId, seasonNumber).Select(c => c.Id).ToList();
} }
public void SetEpisodeIgnore(int episodeId, bool isIgnored) public void SetEpisodeMonitored(int episodeId, bool monitored)
{ {
var episode = _episodeRepository.Get(episodeId); var episode = _episodeRepository.Get(episodeId);
_episodeRepository.SetIgnoreFlat(episode, isIgnored); _episodeRepository.SetMonitoredFlat(episode, monitored);
logger.Info("Ignore flag for Episode:{0} was set to {1}", episodeId, isIgnored); logger.Info("Monitored flag for Episode:{0} was set to {1}", episodeId, monitored);
} }
public bool IsFirstOrLastEpisodeOfSeason(int episodeId) public bool IsFirstOrLastEpisodeOfSeason(int episodeId)
@ -179,7 +179,7 @@ public void Handle(EpisodeFileDeletedEvent message)
{ {
_logger.Trace("Detaching episode {0} from file.", episode.Id); _logger.Trace("Detaching episode {0} from file.", episode.Id);
episode.EpisodeFileId = 0; episode.EpisodeFileId = 0;
episode.Ignored = _configService.AutoIgnorePreviouslyDownloadedEpisodes; episode.Monitored = _configService.AutoUnmonitorPreviouslyDownloadedEpisodes;
UpdateEpisode(episode); UpdateEpisode(episode);
} }
} }
@ -192,7 +192,5 @@ public void Handle(EpisodeFileAddedEvent message)
_logger.Debug("Linking [{0}] > [{1}]", message.EpisodeFile.Path, episode); _logger.Debug("Linking [{0}] > [{1}]", message.EpisodeFile.Path, episode);
} }
} }
} }
} }

View File

@ -116,12 +116,12 @@ private void RefreshEpisodeInfo(Series series, IEnumerable<Episode> remoteEpisod
//If it is Episode Zero Ignore it (specials, sneak peeks.) //If it is Episode Zero Ignore it (specials, sneak peeks.)
if (episode.EpisodeNumber == 0 && episode.SeasonNumber != 1) if (episode.EpisodeNumber == 0 && episode.SeasonNumber != 1)
{ {
episodeToUpdate.Ignored = true; episodeToUpdate.Monitored = false;
} }
else else
{ {
var season = seasons.FirstOrDefault(c => c.SeasonNumber == episode.SeasonNumber); var season = seasons.FirstOrDefault(c => c.SeasonNumber == episode.SeasonNumber);
episodeToUpdate.Ignored = season != null && season.Ignored; episodeToUpdate.Monitored = season != null && season.Monitored;
} }
} }
else else

View File

@ -9,7 +9,7 @@ public class Season : ModelBase
{ {
public int SeriesId { get; set; } public int SeriesId { get; set; }
public int SeasonNumber { get; set; } public int SeasonNumber { get; set; }
public Boolean Ignored { get; set; } public Boolean Monitored { get; set; }
public List<Episode> Episodes { get; set; } public List<Episode> Episodes { get; set; }
} }

View File

@ -10,7 +10,7 @@ public interface ISeasonRepository : IBasicRepository<Season>
{ {
IList<int> GetSeasonNumbers(int seriesId); IList<int> GetSeasonNumbers(int seriesId);
Season Get(int seriesId, int seasonNumber); Season Get(int seriesId, int seasonNumber);
bool IsIgnored(int seriesId, int seasonNumber); bool IsMonitored(int seriesId, int seasonNumber);
List<Season> GetSeasonBySeries(int seriesId); List<Season> GetSeasonBySeries(int seriesId);
} }
@ -32,13 +32,13 @@ public Season Get(int seriesId, int seasonNumber)
return Query.Single(s => s.SeriesId == seriesId && s.SeasonNumber == seasonNumber); return Query.Single(s => s.SeriesId == seriesId && s.SeasonNumber == seasonNumber);
} }
public bool IsIgnored(int seriesId, int seasonNumber) public bool IsMonitored(int seriesId, int seasonNumber)
{ {
var season = Query.SingleOrDefault(s => s.SeriesId == seriesId && s.SeasonNumber == seasonNumber); var season = Query.SingleOrDefault(s => s.SeriesId == seriesId && s.SeasonNumber == seasonNumber);
if (season == null) return false; if (season == null) return true;
return season.Ignored; return season.Monitored;
} }
public List<Season> GetSeasonBySeries(int seriesId) public List<Season> GetSeasonBySeries(int seriesId)

Binary file not shown.

View File

@ -6,7 +6,7 @@
<div class="controls"> <div class="controls">
<label class="checkbox toggle well"> <label class="checkbox toggle well">
<input type="checkbox" name="autoIgnorePreviouslyDownloadedEpisodes"/> <input type="checkbox" name="autoUnmonitorPreviouslyDownloadedEpisodes"/>
<p> <p>
<span>Yes</span> <span>Yes</span>
<span>No</span> <span>No</span>
@ -16,7 +16,7 @@
</label> </label>
<span class="help-inline-checkbox"> <span class="help-inline-checkbox">
<i class="icon-question-sign" title="Episodes deleted from disk are automatically ignored in NzbDrone"/> <i class="icon-question-sign" title="Episodes deleted from disk are automatically unmonitored in NzbDrone"/>
</span> </span>
</div> </div>
</div> </div>