diff --git a/frontend/src/Settings/MediaManagement/MediaManagement.js b/frontend/src/Settings/MediaManagement/MediaManagement.js index c5e7e56be..e5b9b9620 100644 --- a/frontend/src/Settings/MediaManagement/MediaManagement.js +++ b/frontend/src/Settings/MediaManagement/MediaManagement.js @@ -147,6 +147,23 @@ class MediaManagement extends Component { } + + Minimum Free Space + + + + c.FileChmod).NotEmpty(); SharedValidator.RuleFor(c => c.FolderChmod).NotEmpty(); SharedValidator.RuleFor(c => c.RecycleBin).IsValidPath().SetValidator(pathExistsValidator).When(c => !string.IsNullOrWhiteSpace(c.RecycleBin)); + SharedValidator.RuleFor(c => c.MinimumFreeSpaceWhenImporting).GreaterThanOrEqualTo(100); } protected override MediaManagementConfigResource ToResource(IConfigService model) diff --git a/src/Lidarr.Api.V1/Config/MediaManagementConfigResource.cs b/src/Lidarr.Api.V1/Config/MediaManagementConfigResource.cs index b2abd60d5..f4ef5574e 100644 --- a/src/Lidarr.Api.V1/Config/MediaManagementConfigResource.cs +++ b/src/Lidarr.Api.V1/Config/MediaManagementConfigResource.cs @@ -24,6 +24,7 @@ namespace Lidarr.Api.V1.Config public string ChownGroup { get; set; } public bool SkipFreeSpaceCheckWhenImporting { get; set; } + public int MinimumFreeSpaceWhenImporting { get; set; } public bool CopyUsingHardlinks { get; set; } public bool ImportExtraFiles { get; set; } public string ExtraFileExtensions { get; set; } @@ -52,6 +53,7 @@ namespace Lidarr.Api.V1.Config ChownGroup = model.ChownGroup, SkipFreeSpaceCheckWhenImporting = model.SkipFreeSpaceCheckWhenImporting, + MinimumFreeSpaceWhenImporting = model.MinimumFreeSpaceWhenImporting, CopyUsingHardlinks = model.CopyUsingHardlinks, ImportExtraFiles = model.ImportExtraFiles, ExtraFileExtensions = model.ExtraFileExtensions, diff --git a/src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/FreeSpaceSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/FreeSpaceSpecificationFixture.cs index dab5fe358..e7e997378 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/FreeSpaceSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/FreeSpaceSpecificationFixture.cs @@ -66,8 +66,12 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications } [Test] - public void should_reject_when_there_isnt_enough_space_for_file_plus_100mb_padding() + public void should_reject_when_there_isnt_enough_space_for_file_plus_min_free_space() { + Mocker.GetMock() + .Setup(s => s.MinimumFreeSpaceWhenImporting) + .Returns(100); + GivenFileSize(100.Megabytes()); GivenFreeSpace(150.Megabytes()); diff --git a/src/NzbDrone.Core/Configuration/ConfigService.cs b/src/NzbDrone.Core/Configuration/ConfigService.cs index cbed9c7e1..b3631f131 100644 --- a/src/NzbDrone.Core/Configuration/ConfigService.cs +++ b/src/NzbDrone.Core/Configuration/ConfigService.cs @@ -196,6 +196,13 @@ namespace NzbDrone.Core.Configuration set { SetValue("SkipFreeSpaceCheckWhenImporting", value); } } + public int MinimumFreeSpaceWhenImporting + { + get { return GetValueInt("MinimumFreeSpaceWhenImporting", 100); } + + set { SetValue("MinimumFreeSpaceWhenImporting", value); } + } + public bool CopyUsingHardlinks { get { return GetValueBoolean("CopyUsingHardlinks", true); } diff --git a/src/NzbDrone.Core/Configuration/IConfigService.cs b/src/NzbDrone.Core/Configuration/IConfigService.cs index 7720e2e00..7430f7a7b 100644 --- a/src/NzbDrone.Core/Configuration/IConfigService.cs +++ b/src/NzbDrone.Core/Configuration/IConfigService.cs @@ -32,6 +32,7 @@ namespace NzbDrone.Core.Configuration bool DeleteEmptyFolders { get; set; } FileDateType FileDate { get; set; } bool SkipFreeSpaceCheckWhenImporting { get; set; } + int MinimumFreeSpaceWhenImporting { get; set; } bool CopyUsingHardlinks { get; set; } bool ImportExtraFiles { get; set; } string ExtraFileExtensions { get; set; } diff --git a/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/FreeSpaceSpecification.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/FreeSpaceSpecification.cs index b287cee4d..22c7c0a42 100644 --- a/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/FreeSpaceSpecification.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/FreeSpaceSpecification.cs @@ -46,7 +46,7 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Specifications return Decision.Accept(); } - if (freeSpace < localTrack.Size + 100.Megabytes()) + if (freeSpace < localTrack.Size + _configService.MinimumFreeSpaceWhenImporting.Megabytes()) { _logger.Warn("Not enough free space ({0}) to import: {1} ({2})", freeSpace, localTrack, localTrack.Size); return Decision.Reject("Not enough free space");