mirror of
https://github.com/Radarr/Radarr
synced 2024-12-24 17:01:38 +00:00
added support for daily episode file import
This commit is contained in:
parent
d490fad8cd
commit
5faeccf098
2 changed files with 67 additions and 18 deletions
|
@ -117,7 +117,7 @@ public void import_new_daily_file()
|
||||||
//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 @@ public void import_new_daily_file()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[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 @@ public EpisodeFile ImportFile(Series series, string filePath)
|
||||||
|
|
||||||
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 @@ public EpisodeFile ImportFile(Series series, string filePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
|
if (episode != null)
|
||||||
|
{
|
||||||
|
episodes.Add(episode);
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
Logger.Warn("Unable to find '{0}' in the database. File:{1}", parseResult, filePath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Return null if no Episodes exist in the DB for the parsed episodes from file
|
//Return null if no Episodes exist in the DB for the parsed episodes from file
|
||||||
if (episodes.Count < 1)
|
if (episodes.Count < 1)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
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 < 50000000 && filePath.ToLower().Contains("sample"))
|
|
||||||
{
|
|
||||||
Logger.Trace("[{0}] appears to be a sample... skipping.", filePath);
|
|
||||||
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…
Reference in a new issue