mirror of
https://github.com/lidarr/lidarr.git
synced 2025-08-19 13:10:13 -07:00
Fixed: USB drives mounted to folders are treated as different mounts
Closes #3368 (cherry picked from commit 75378f7bde90b9d3d9b72404c25c017da2cd147c)
This commit is contained in:
parent
8228f11345
commit
eab4134434
3 changed files with 73 additions and 1 deletions
|
@ -360,7 +360,7 @@ namespace NzbDrone.Common.Disk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetPathRoot(string path)
|
public virtual string GetPathRoot(string path)
|
||||||
{
|
{
|
||||||
Ensure.That(path, () => path).IsValidPath();
|
Ensure.That(path, () => path).IsValidPath();
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,22 @@ namespace NzbDrone.Windows.Disk
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override IMount GetMount(string path)
|
||||||
|
{
|
||||||
|
var reparsePoint = GetReparsePoint(path);
|
||||||
|
|
||||||
|
return reparsePoint ?? base.GetMount(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string GetPathRoot(string path)
|
||||||
|
{
|
||||||
|
Ensure.That(path, () => path).IsValidPath();
|
||||||
|
|
||||||
|
var reparsePoint = GetReparsePoint(path);
|
||||||
|
|
||||||
|
return reparsePoint?.RootDirectory ?? base.GetPathRoot(path);
|
||||||
|
}
|
||||||
|
|
||||||
public override long? GetAvailableSpace(string path)
|
public override long? GetAvailableSpace(string path)
|
||||||
{
|
{
|
||||||
Ensure.That(path, () => path).IsValidPath();
|
Ensure.That(path, () => path).IsValidPath();
|
||||||
|
@ -182,5 +198,23 @@ namespace NzbDrone.Windows.Disk
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private IMount GetReparsePoint(string path)
|
||||||
|
{
|
||||||
|
var di = new DirectoryInfo(path);
|
||||||
|
var isReparsePoint = di.Attributes.HasFlag(FileAttributes.ReparsePoint);
|
||||||
|
|
||||||
|
while (!isReparsePoint && (di = di.Parent) != null)
|
||||||
|
{
|
||||||
|
isReparsePoint = di.Attributes.HasFlag(FileAttributes.ReparsePoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isReparsePoint)
|
||||||
|
{
|
||||||
|
return new FolderMount(di);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
38
src/NzbDrone.Windows/Disk/FolderMount.cs
Normal file
38
src/NzbDrone.Windows/Disk/FolderMount.cs
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
using System.IO;
|
||||||
|
using NzbDrone.Common.Disk;
|
||||||
|
using NzbDrone.Common.Extensions;
|
||||||
|
|
||||||
|
namespace NzbDrone.Windows.Disk
|
||||||
|
{
|
||||||
|
public class FolderMount : IMount
|
||||||
|
{
|
||||||
|
private readonly DirectoryInfo _directoryInfo;
|
||||||
|
|
||||||
|
public FolderMount(DirectoryInfo directoryInfo)
|
||||||
|
{
|
||||||
|
_directoryInfo = directoryInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long AvailableFreeSpace => 0;
|
||||||
|
|
||||||
|
public string DriveFormat => "NTFS";
|
||||||
|
|
||||||
|
public DriveType DriveType => DriveType.Removable;
|
||||||
|
|
||||||
|
public bool IsReady => true;
|
||||||
|
|
||||||
|
public MountOptions MountOptions { get; private set; }
|
||||||
|
|
||||||
|
public string Name => _directoryInfo.Name;
|
||||||
|
|
||||||
|
public string RootDirectory => _directoryInfo.FullName;
|
||||||
|
|
||||||
|
public long TotalFreeSpace => 0;
|
||||||
|
|
||||||
|
public long TotalSize => 0;
|
||||||
|
|
||||||
|
public string VolumeLabel => _directoryInfo.Name;
|
||||||
|
|
||||||
|
public string VolumeName => Name;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue