added support for daily episode file import

pull/4/head
kay.one 14 years ago
parent d490fad8cd
commit 5faeccf098

@ -117,7 +117,7 @@ namespace NzbDrone.Core.Test
//Assert.AreEqual(fakeEpisode, result.Episodes[0]); //Assert.AreEqual(fakeEpisode, result.Episodes[0]);
Assert.AreEqual(fakeEpisode.SeriesId, result.SeriesId); Assert.AreEqual(fakeEpisode.SeriesId, result.SeriesId);
Assert.AreEqual(QualityTypes.BDRip, result.Quality); Assert.AreEqual(QualityTypes.HDTV, result.Quality);
Assert.AreEqual(Parser.NormalizePath(fileName), result.Path); Assert.AreEqual(Parser.NormalizePath(fileName), result.Path);
Assert.AreEqual(size, result.Size); Assert.AreEqual(size, result.Size);
Assert.AreEqual(false, result.Proper); Assert.AreEqual(false, result.Proper);
@ -125,6 +125,44 @@ namespace NzbDrone.Core.Test
} }
[Test]
[Description("Verifies that a new file imported properly")]
public void import_sample_file()
{
//Arrange
/////////////////////////////////////////
//Constants
const string fileName = @"2011.01.10 - Denis Leary - sample - HD TV.mkv";
DateTime airDate = new DateTime(2011, 01, 10);
const int size = 12345;
//Fakes
var fakeSeries = Builder<Series>.CreateNew().Build();
var fakeEpisode = Builder<Episode>.CreateNew().With(c => c.SeriesId = fakeSeries.SeriesId).Build();
//Mocks
var mocker = new AutoMoqer();
mocker.GetMock<IRepository>()
.Setup(r => r.Exists(It.IsAny<Expression<Func<EpisodeFile, Boolean>>>())).Returns(false).Verifiable();
mocker.GetMock<IRepository>()
.Setup(r => r.Add(It.IsAny<EpisodeFile>())).Returns(0).Verifiable();
mocker.GetMock<EpisodeProvider>()
.Setup(e => e.GetEpisode(fakeSeries.SeriesId, airDate)).Returns(fakeEpisode).
Verifiable();
mocker.GetMock<DiskProvider>()
.Setup(e => e.GetSize(fileName)).Returns(size).Verifiable();
//Act
var result = mocker.Resolve<MediaFileProvider>().ImportFile(fakeSeries, fileName);
//Assert
Assert.IsNull(result);
}
[Test] [Test]
[Description("Verifies that an existing file will skip import")] [Description("Verifies that an existing file will skip import")]
public void import_existing_file() public void import_existing_file()

@ -71,20 +71,25 @@ namespace NzbDrone.Core.Providers
try try
{ {
var size = _diskProvider.GetSize(filePath);
//If Size is less than 50MB and contains sample. Check for Size to ensure its not an episode with sample in the title
if (size < 40000000 && filePath.ToLower().Contains("sample"))
{
Logger.Trace("[{0}] appears to be a sample... skipping.", filePath);
return null;
}
if (!_repository.Exists<EpisodeFile>(e => e.Path == Parser.NormalizePath(filePath))) if (!_repository.Exists<EpisodeFile>(e => e.Path == Parser.NormalizePath(filePath)))
{ {
var episodesInFile = Parser.ParseEpisodeInfo(filePath); var parseResult = Parser.ParseEpisodeInfo(filePath);
//Stores the list of episodes to add to the EpisodeFile //Stores the list of episodes to add to the EpisodeFile
var episodes = new List<Episode>(); var episodes = new List<Episode>();
foreach (var episodeNumber in episodesInFile.Episodes) if (parseResult.Episodes == null)
{ {
var episode = _episodeProvider.GetEpisode(series.SeriesId, episodesInFile.SeasonNumber, var episode = _episodeProvider.GetEpisode(series.SeriesId, parseResult.AirDate.Date);
episodeNumber);
if (episode != null) if (episode != null)
{ {
@ -92,29 +97,35 @@ namespace NzbDrone.Core.Providers
} }
else else
Logger.Warn("Unable to find Series:{0} Season:{1} Episode:{2} in the database. File:{3}", Logger.Warn("Unable to find '{0}' in the database. File:{1}", parseResult, filePath);
series.Title, episodesInFile.SeasonNumber, episodeNumber, filePath);
} }
else
{
foreach (var episodeNumber in parseResult.Episodes)
{
var episode = _episodeProvider.GetEpisode(series.SeriesId, parseResult.SeasonNumber,
episodeNumber);
//Return null if no Episodes exist in the DB for the parsed episodes from file if (episode != null)
if (episodes.Count < 1) {
return null; episodes.Add(episode);
}
var size = _diskProvider.GetSize(filePath); else
Logger.Warn("Unable to find '{0}' in the database. File:{1}", parseResult, filePath);
}
}
//If Size is less than 50MB and contains sample. Check for Size to ensure its not an episode with sample in the title //Return null if no Episodes exist in the DB for the parsed episodes from file
if (size < 50000000 && filePath.ToLower().Contains("sample")) if (episodes.Count < 1)
{
Logger.Trace("[{0}] appears to be a sample... skipping.", filePath);
return null; return null;
}
var episodeFile = new EpisodeFile(); var episodeFile = new EpisodeFile();
episodeFile.DateAdded = DateTime.Now; episodeFile.DateAdded = DateTime.Now;
episodeFile.SeriesId = series.SeriesId; episodeFile.SeriesId = series.SeriesId;
episodeFile.Path = Parser.NormalizePath(filePath); episodeFile.Path = Parser.NormalizePath(filePath);
episodeFile.Size = size; episodeFile.Size = size;
episodeFile.Quality = episodesInFile.Quality; episodeFile.Quality = parseResult.Quality;
episodeFile.Proper = Parser.ParseProper(filePath); episodeFile.Proper = Parser.ParseProper(filePath);
var fileId = (int)_repository.Add(episodeFile); var fileId = (int)_repository.Add(episodeFile);

Loading…
Cancel
Save