diff --git a/src/NzbDrone.Common/Disk/DiskProviderBase.cs b/src/NzbDrone.Common/Disk/DiskProviderBase.cs index f494b7bbb..9fbb3ff48 100644 --- a/src/NzbDrone.Common/Disk/DiskProviderBase.cs +++ b/src/NzbDrone.Common/Disk/DiskProviderBase.cs @@ -9,7 +9,6 @@ using NzbDrone.Common.EnsureThat; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Extensions; using NzbDrone.Common.Instrumentation; -using NzbDrone.Common.Instrumentation.Extensions; namespace NzbDrone.Common.Disk { @@ -390,7 +389,10 @@ namespace NzbDrone.Common.Disk public virtual List GetMounts() { - return GetDriveInfoMounts(); + return GetDriveInfoMounts().Where(d => d.DriveType == DriveType.Fixed || d.DriveType == DriveType.Network || d.DriveType == DriveType.Removable) + .Select(d => new DriveInfoMount(d)) + .Cast() + .ToList(); } public virtual IMount GetMount(string path) @@ -411,13 +413,10 @@ namespace NzbDrone.Common.Disk } } - protected List GetDriveInfoMounts() + protected List GetDriveInfoMounts() { return DriveInfo.GetDrives() - .Where(d => d.DriveType == DriveType.Fixed || d.DriveType == DriveType.Network || d.DriveType == DriveType.Removable) .Where(d => d.IsReady) - .Select(d => new DriveInfoMount(d)) - .Cast() .ToList(); } diff --git a/src/NzbDrone.Common/Disk/DriveInfoMount.cs b/src/NzbDrone.Common/Disk/DriveInfoMount.cs index 31523db96..5d53817a2 100644 --- a/src/NzbDrone.Common/Disk/DriveInfoMount.cs +++ b/src/NzbDrone.Common/Disk/DriveInfoMount.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; +using System.IO; using NzbDrone.Common.Extensions; namespace NzbDrone.Common.Disk @@ -9,10 +6,12 @@ namespace NzbDrone.Common.Disk public class DriveInfoMount : IMount { private readonly DriveInfo _driveInfo; + private readonly DriveType _driveType; - public DriveInfoMount(DriveInfo driveInfo) + public DriveInfoMount(DriveInfo driveInfo, DriveType driveType = DriveType.Unknown) { _driveInfo = driveInfo; + _driveType = driveType; } public long AvailableFreeSpace @@ -27,7 +26,15 @@ namespace NzbDrone.Common.Disk public DriveType DriveType { - get { return _driveInfo.DriveType; } + get + { + if (_driveType != DriveType.Unknown) + { + return _driveType; + } + + return _driveInfo.DriveType; + } } public bool IsReady diff --git a/src/NzbDrone.Mono/Disk/DiskProvider.cs b/src/NzbDrone.Mono/Disk/DiskProvider.cs index 88ad3adf3..fc2a4e33d 100644 --- a/src/NzbDrone.Mono/Disk/DiskProvider.cs +++ b/src/NzbDrone.Mono/Disk/DiskProvider.cs @@ -86,10 +86,11 @@ namespace NzbDrone.Mono.Disk public override List GetMounts() { - return base.GetMounts() - .Concat(_procMountProvider.GetMounts()) - .DistinctBy(v => v.RootDirectory) - .ToList(); + return GetDriveInfoMounts().Select(d => new DriveInfoMount(d, FindDriveType.Find(d.DriveFormat))) + .Where(d => d.DriveType == DriveType.Fixed || d.DriveType == DriveType.Network || d.DriveType == DriveType.Removable) + .Concat(_procMountProvider.GetMounts()) + .DistinctBy(v => v.RootDirectory) + .ToList(); } public override long? GetTotalSize(string path) diff --git a/src/NzbDrone.Mono/Disk/FindDriveType.cs b/src/NzbDrone.Mono/Disk/FindDriveType.cs new file mode 100644 index 000000000..3125469d0 --- /dev/null +++ b/src/NzbDrone.Mono/Disk/FindDriveType.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; +using System.IO; +using NzbDrone.Common.Extensions; + +namespace NzbDrone.Mono.Disk +{ + public static class FindDriveType + { + private static readonly Dictionary DriveTypeMap = new Dictionary + { + { "afpfs", DriveType.Network }, + { "zfs", DriveType.Fixed } + }; + + public static DriveType Find(string driveFormat) + { + return DriveTypeMap.GetValueOrDefault(driveFormat); + } + } +} diff --git a/src/NzbDrone.Mono/Disk/ProcMountProvider.cs b/src/NzbDrone.Mono/Disk/ProcMountProvider.cs index 61b111051..94edb3456 100644 --- a/src/NzbDrone.Mono/Disk/ProcMountProvider.cs +++ b/src/NzbDrone.Mono/Disk/ProcMountProvider.cs @@ -103,8 +103,8 @@ namespace NzbDrone.Mono.Disk var type = split[2]; var options = ParseOptions(split[3]); - var driveType = DriveType.Unknown; - + var driveType = FindDriveType.Find(type); + if (name.StartsWith("/dev/") || GetFileSystems().GetValueOrDefault(type, false)) { // Not always fixed, but lets assume it. @@ -116,11 +116,6 @@ namespace NzbDrone.Mono.Disk driveType = DriveType.Network; } - if (type == "zfs") - { - driveType = DriveType.Fixed; - } - return new ProcMount(driveType, name, mount, type, options); } diff --git a/src/NzbDrone.Mono/NzbDrone.Mono.csproj b/src/NzbDrone.Mono/NzbDrone.Mono.csproj index 15857beb5..2b45f5748 100644 --- a/src/NzbDrone.Mono/NzbDrone.Mono.csproj +++ b/src/NzbDrone.Mono/NzbDrone.Mono.csproj @@ -68,13 +68,14 @@ - - - - - + + + + + + - + diff --git a/src/NzbDrone.Windows/NzbDrone.Windows.csproj b/src/NzbDrone.Windows/NzbDrone.Windows.csproj index 1e60898ed..20b2cc564 100644 --- a/src/NzbDrone.Windows/NzbDrone.Windows.csproj +++ b/src/NzbDrone.Windows/NzbDrone.Windows.csproj @@ -63,8 +63,8 @@ - - + +