Fixed: Renaming Episodes will never overwrite existing files.

This commit is contained in:
Taloth Saldono 2014-07-31 00:00:55 +02:00 committed by Mark McDowall
parent 125e69da6d
commit e5e00fd346
5 changed files with 41 additions and 10 deletions

View File

@ -63,7 +63,7 @@ namespace NzbDrone.Common.Test.DiskProviderTests
File.WriteAllText(source2, "SourceFile2"); File.WriteAllText(source2, "SourceFile2");
Subject.MoveFile(source1, destination); Subject.MoveFile(source1, destination);
Subject.MoveFile(source2, destination); Subject.MoveFile(source2, destination, true);
File.Exists(destination).Should().BeTrue(); File.Exists(destination).Should().BeTrue();
} }
@ -75,7 +75,7 @@ namespace NzbDrone.Common.Test.DiskProviderTests
File.WriteAllText(source, "SourceFile1"); File.WriteAllText(source, "SourceFile1");
Subject.MoveFile(source, source); Subject.MoveFile(source, source, true);
File.Exists(source).Should().BeTrue(); File.Exists(source).Should().BeTrue();
ExceptionVerification.ExpectedWarns(1); ExceptionVerification.ExpectedWarns(1);
@ -148,7 +148,7 @@ namespace NzbDrone.Common.Test.DiskProviderTests
File.SetAttributes(source, FileAttributes.ReadOnly); File.SetAttributes(source, FileAttributes.ReadOnly);
File.SetAttributes(destination, FileAttributes.ReadOnly); File.SetAttributes(destination, FileAttributes.ReadOnly);
Subject.MoveFile(source, destination); Subject.MoveFile(source, destination, true);
} }
[Test] [Test]

View File

@ -220,7 +220,7 @@ namespace NzbDrone.Common.Disk
} }
case TransferAction.Move: case TransferAction.Move:
{ {
MoveFile(sourceFile.FullName, destFile); MoveFile(sourceFile.FullName, destFile, true);
break; break;
} }
} }
@ -251,7 +251,7 @@ namespace NzbDrone.Common.Disk
File.Copy(source, destination, overwrite); File.Copy(source, destination, overwrite);
} }
public void MoveFile(string source, string destination) public void MoveFile(string source, string destination, bool overwrite = false)
{ {
Ensure.That(source, () => source).IsValidPath(); Ensure.That(source, () => source).IsValidPath();
Ensure.That(destination, () => destination).IsValidPath(); Ensure.That(destination, () => destination).IsValidPath();
@ -262,7 +262,7 @@ namespace NzbDrone.Common.Disk
return; return;
} }
if (FileExists(destination)) if (FileExists(destination) && overwrite)
{ {
DeleteFile(destination); DeleteFile(destination);
} }

View File

@ -29,7 +29,7 @@ namespace NzbDrone.Common.Disk
void MoveFolder(string source, string destination); void MoveFolder(string source, string destination);
void DeleteFile(string path); void DeleteFile(string path);
void CopyFile(string source, string destination, bool overwrite = false); void CopyFile(string source, string destination, bool overwrite = false);
void MoveFile(string source, string destination); void MoveFile(string source, string destination, bool overwrite = false);
void DeleteFolder(string path, bool recursive); void DeleteFolder(string path, bool recursive);
string ReadAllText(string filePath); string ReadAllText(string filePath);
void WriteAllText(string filename, string contents); void WriteAllText(string filename, string contents);

View File

@ -47,7 +47,23 @@ namespace NzbDrone.Core.Test.ProviderTests.RecycleBinProviderTests
Mocker.Resolve<RecycleBinProvider>().DeleteFile(path); Mocker.Resolve<RecycleBinProvider>().DeleteFile(path);
Mocker.GetMock<IDiskProvider>().Verify(v => v.MoveFile(path, @"C:\Test\Recycle Bin\S01E01.avi".AsOsAgnostic()), Times.Once()); Mocker.GetMock<IDiskProvider>().Verify(v => v.MoveFile(path, @"C:\Test\Recycle Bin\S01E01.avi".AsOsAgnostic(), true), Times.Once());
}
[Test]
public void should_use_alternative_name_if_already_exists()
{
WithRecycleBin();
var path = @"C:\Test\TV\30 Rock\S01E01.avi".AsOsAgnostic();
Mocker.GetMock<IDiskProvider>()
.Setup(v => v.FileExists(@"C:\Test\Recycle Bin\S01E01.avi".AsOsAgnostic()))
.Returns(true);
Mocker.Resolve<RecycleBinProvider>().DeleteFile(path);
Mocker.GetMock<IDiskProvider>().Verify(v => v.MoveFile(path, @"C:\Test\Recycle Bin\S01E01_2.avi".AsOsAgnostic(), true), Times.Once());
} }
[Test] [Test]

View File

@ -84,10 +84,25 @@ namespace NzbDrone.Core.MediaFiles
else else
{ {
var destination = Path.Combine(recyclingBin, new FileInfo(path).Name); var fileInfo = new FileInfo(path);
var destination = Path.Combine(recyclingBin, fileInfo.Name);
var index = 1;
while (_diskProvider.FileExists(destination))
{
index++;
if (fileInfo.Extension.IsNullOrWhiteSpace())
{
destination = Path.Combine(recyclingBin, fileInfo.Name + "_" + index);
}
else
{
destination = Path.Combine(recyclingBin, Path.GetFileNameWithoutExtension(fileInfo.Name) + "_" + index + fileInfo.Extension);
}
}
logger.Debug("Moving '{0}' to '{1}'", path, destination); logger.Debug("Moving '{0}' to '{1}'", path, destination);
_diskProvider.MoveFile(path, destination); _diskProvider.MoveFile(path, destination, true);
_diskProvider.FileSetLastWriteTimeUtc(destination, DateTime.UtcNow); _diskProvider.FileSetLastWriteTimeUtc(destination, DateTime.UtcNow);
logger.Debug("File has been moved to the recycling bin: {0}", destination); logger.Debug("File has been moved to the recycling bin: {0}", destination);
} }