1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2024-12-12 11:15:43 +02:00

Cleaned up import file a bit

This commit is contained in:
kay.one 2011-06-19 19:33:43 -07:00
parent d3f823734e
commit cfcb9e61d7
2 changed files with 92 additions and 106 deletions

View File

@ -129,19 +129,16 @@ public void import_new_daily_file()
}
[Test]
[Description("Verifies that a new file imported properly")]
public void import_existing_season_file()
public void import_existing_season_file_should_skip()
{
//Arrange
/////////////////////////////////////////
//Constants
const string fileName = @"WEEDS.S03E01.DUAL.BDRip.XviD.AC3.-HELLYWOOD.avi";
const int size = 12345;
//Fakes
var fakeSeries = Builder<Series>.CreateNew().Build();
var fakeEpisodeFile = Builder<EpisodeFile>.CreateNew().With(s => s.SeriesId = fakeSeries.SeriesId).Build();
//Mocks
var mocker = new AutoMoqer();
@ -149,10 +146,6 @@ public void import_existing_season_file()
mocker.GetMock<IDatabase>(MockBehavior.Strict)
.Setup(r => r.Exists<EpisodeFile>(It.IsAny<string>(), It.IsAny<object>())).Returns(true).Verifiable();
mocker.GetMock<DiskProvider>()
.Setup(e => e.GetSize(fileName)).Returns(size).Verifiable();
//Act
var result = mocker.Resolve<MediaFileProvider>().ImportFile(fakeSeries, fileName);
@ -232,33 +225,23 @@ public void import_sample_file()
}
[Test]
[Description("Verifies that an existing file will skip import")]
public void import_existing_file()
{
//Arrange
/////////////////////////////////////////
//Constants
const string fileName = "WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD.avi";
//Fakes
var fakeSeries = Builder<Series>.CreateNew().Build();
//Mocks
var mocker = new AutoMoqer();
mocker.GetMock<IDatabase>(MockBehavior.Strict)
.Setup(r => r.Exists<EpisodeFile>(It.IsAny<string>(), It.IsAny<object>())).Returns(true).Verifiable();
mocker.GetMock<EpisodeProvider>(MockBehavior.Strict);
mocker.GetMock<DiskProvider>()
.Setup(e => e.GetSize(fileName)).Returns(500000).Verifiable();
//Act
var result = mocker.Resolve<MediaFileProvider>().ImportFile(fakeSeries, fileName);
//Assert
Assert.IsNull(result);
result.Should().BeNull();
mocker.GetMock<IDatabase>().Verify(r => r.Insert(result), Times.Never());
mocker.VerifyAllMocks();
}
@ -296,7 +279,7 @@ public void import_file_with_no_episode()
//Assert
mocker.VerifyAllMocks();
Assert.IsNull(result);
result.Should().BeNull();
mocker.GetMock<IDatabase>().Verify(r => r.Insert(result), Times.Never());
ExceptionVerification.ExcpectedWarns(1);
}
@ -311,7 +294,7 @@ public void scan_series_should_update_last_scan_date()
mocker.GetMock<EpisodeProvider>()
.Setup(c => c.GetEpisodeBySeries(It.IsAny<long>()))
.Returns(new List<Episode>{new Episode()});
.Returns(new List<Episode> { new Episode() });
mocker.Resolve<MediaFileProvider>().Scan(new Series());

View File

@ -69,8 +69,12 @@ public virtual EpisodeFile ImportFile(Series series, string filePath)
{
Logger.Trace("Importing file to database [{0}]", filePath);
try
if (_database.Exists<EpisodeFile>("Path =@0", Parser.NormalizePath(filePath)))
{
Logger.Trace("[{0}] already exists in the database. skipping.", filePath);
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
@ -80,9 +84,6 @@ public virtual EpisodeFile ImportFile(Series series, string filePath)
return null;
}
//Check to see if file already exists in the database
if (!_database.Exists<EpisodeFile>("Path =@0", Parser.NormalizePath(filePath)))
{
var parseResult = Parser.ParseEpisodeInfo(filePath);
if (parseResult == null)
@ -151,16 +152,7 @@ public virtual EpisodeFile ImportFile(Series series, string filePath)
episodeList);
return episodeFile;
}
Logger.Trace("[{0}] already exists in the database. skipping.", filePath);
}
catch (Exception ex)
{
Logger.ErrorException("An error has occurred while importing file " + filePath, ex);
throw;
}
return null;
}
/// <summary>
@ -311,7 +303,7 @@ public virtual List<EpisodeFile> ImportNewFiles(string path, Series series)
return result;
}
public virtual string GetNewFilename(IList<Episode> episodes, string seriesName, QualityTypes quality)
public virtual string GetNewFilename(IList<Episode> episodes, string seriesTitle, QualityTypes quality)
{
var separatorStyle = EpisodeSortingHelper.GetSeparatorStyle(_configProvider.SeparatorStyle);
var numberStyle = EpisodeSortingHelper.GetNumberStyle(_configProvider.NumberStyle);
@ -322,7 +314,7 @@ public virtual string GetNewFilename(IList<Episode> episodes, string seriesName,
if (_configProvider.SeriesName)
{
result += seriesName + separatorStyle.Pattern;
result += seriesTitle + separatorStyle.Pattern;
}
result += numberStyle.Pattern.Replace("%0e", String.Format("{0:00}", episodes[0].EpisodeNumber));
@ -369,25 +361,36 @@ public virtual string GetNewFilename(IList<Episode> episodes, string seriesName,
return result.Trim();
}
public virtual FileInfo CalculateFilePath(Series series, int seasonNumber, string fileName, string extention)
{
var path = series.Path;
if (series.SeasonFolder)
{
path = Path.Combine(path, "Season " + seasonNumber);
}
path = Path.Combine(path, fileName + extention);
return new FileInfo(path);
}
public virtual bool RenameEpisodeFile(EpisodeFile episodeFile)
{
if (episodeFile == null)
throw new ArgumentNullException("episodeFile");
var series = _seriesProvider.GetSeries(episodeFile.SeriesId);
var folder = new FileInfo(episodeFile.Path).DirectoryName;
var ext = _diskProvider.GetExtension(episodeFile.Path);
var episodes = _episodeProvider.GetEpisodesByFileId(episodeFile.EpisodeFileId);
var newFileName = GetNewFilename(episodes, series.Title, episodeFile.Quality);
var newFile = folder + Path.DirectorySeparatorChar + newFileName + ext;
var newFile = CalculateFilePath(series, episodes.First().SeasonNumber, newFileName, ext);
//Do the rename
_diskProvider.RenameFile(episodeFile.Path, newFile);
_diskProvider.RenameFile(episodeFile.Path, newFile.FullName);
//Update the filename in the DB
episodeFile.Path = newFile;
episodeFile.Path = newFile.FullName;
Update(episodeFile);