mirror of
https://github.com/Radarr/Radarr.git
synced 2024-11-04 10:02:40 +01:00
Speedier unmapped folders lookup.
This commit is contained in:
parent
f9437baf80
commit
0c2a1c60b1
@ -5,9 +5,9 @@ namespace NzbDrone.Api.RootFolders
|
|||||||
{
|
{
|
||||||
public class RootFolderModule : NzbDroneRestModule<RootFolderResource>
|
public class RootFolderModule : NzbDroneRestModule<RootFolderResource>
|
||||||
{
|
{
|
||||||
private readonly RootFolderService _rootFolderService;
|
private readonly IRootFolderService _rootFolderService;
|
||||||
|
|
||||||
public RootFolderModule(RootFolderService rootFolderService)
|
public RootFolderModule(IRootFolderService rootFolderService)
|
||||||
{
|
{
|
||||||
_rootFolderService = rootFolderService;
|
_rootFolderService = rootFolderService;
|
||||||
|
|
||||||
|
@ -91,6 +91,7 @@
|
|||||||
<Compile Include="Exceptions\NzbDroneException.cs" />
|
<Compile Include="Exceptions\NzbDroneException.cs" />
|
||||||
<Compile Include="Instrumentation\GlobalExceptionHandlers.cs" />
|
<Compile Include="Instrumentation\GlobalExceptionHandlers.cs" />
|
||||||
<Compile Include="Instrumentation\ExceptronTarget.cs" />
|
<Compile Include="Instrumentation\ExceptronTarget.cs" />
|
||||||
|
<Compile Include="PathEqualityComparer.cs" />
|
||||||
<Compile Include="TPL\LimitedConcurrencyLevelTaskScheduler.cs" />
|
<Compile Include="TPL\LimitedConcurrencyLevelTaskScheduler.cs" />
|
||||||
<Compile Include="Security\IgnoreCertErrorPolicy.cs" />
|
<Compile Include="Security\IgnoreCertErrorPolicy.cs" />
|
||||||
<Compile Include="StringExtensions.cs" />
|
<Compile Include="StringExtensions.cs" />
|
||||||
|
20
NzbDrone.Common/PathEqualityComparer.cs
Normal file
20
NzbDrone.Common/PathEqualityComparer.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace NzbDrone.Common
|
||||||
|
{
|
||||||
|
public class PathEqualityComparer : IEqualityComparer<String>
|
||||||
|
{
|
||||||
|
public bool Equals(string x, string y)
|
||||||
|
{
|
||||||
|
return x.PathEquals(y);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetHashCode(string obj)
|
||||||
|
{
|
||||||
|
return obj.CleanFilePath().GetHashCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -35,11 +35,12 @@ public static string CleanFilePath(this string path)
|
|||||||
return info.FullName.TrimEnd('/').Trim('\\', ' ');
|
return info.FullName.TrimEnd('/').Trim('\\', ' ');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static bool PathEquals(this string firstPath, string secondPath)
|
public static bool PathEquals(this string firstPath, string secondPath)
|
||||||
{
|
{
|
||||||
Ensure.That(() => firstPath).IsValidPath();
|
if (OsInfo.IsLinux)
|
||||||
Ensure.That(() => secondPath).IsValidPath();
|
{
|
||||||
|
return String.Equals(firstPath.CleanFilePath(), secondPath.CleanFilePath());
|
||||||
|
}
|
||||||
|
|
||||||
return String.Equals(firstPath.CleanFilePath(), secondPath.CleanFilePath(), StringComparison.InvariantCultureIgnoreCase);
|
return String.Equals(firstPath.CleanFilePath(), secondPath.CleanFilePath(), StringComparison.InvariantCultureIgnoreCase);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System.Linq;
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
@ -40,14 +41,14 @@ public RootFolderService(IBasicRepository<RootFolder> rootFolderRepository,
|
|||||||
_configService = configService;
|
_configService = configService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual List<RootFolder> All()
|
public List<RootFolder> All()
|
||||||
{
|
{
|
||||||
var rootFolders = _rootFolderRepository.All().ToList();
|
var rootFolders = _rootFolderRepository.All().ToList();
|
||||||
|
|
||||||
return rootFolders;
|
return rootFolders;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual List<RootFolder> AllWithUnmappedFolders()
|
public List<RootFolder> AllWithUnmappedFolders()
|
||||||
{
|
{
|
||||||
var rootFolders = _rootFolderRepository.All().ToList();
|
var rootFolders = _rootFolderRepository.All().ToList();
|
||||||
|
|
||||||
@ -63,7 +64,7 @@ public virtual List<RootFolder> AllWithUnmappedFolders()
|
|||||||
return rootFolders;
|
return rootFolders;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual RootFolder Add(RootFolder rootFolder)
|
public RootFolder Add(RootFolder rootFolder)
|
||||||
{
|
{
|
||||||
var all = All();
|
var all = All();
|
||||||
|
|
||||||
@ -87,12 +88,12 @@ public virtual RootFolder Add(RootFolder rootFolder)
|
|||||||
return rootFolder;
|
return rootFolder;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void Remove(int id)
|
public void Remove(int id)
|
||||||
{
|
{
|
||||||
_rootFolderRepository.Delete(id);
|
_rootFolderRepository.Delete(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual List<UnmappedFolder> GetUnmappedFolders(string path)
|
public List<UnmappedFolder> GetUnmappedFolders(string path)
|
||||||
{
|
{
|
||||||
Logger.Debug("Generating list of unmapped folders");
|
Logger.Debug("Generating list of unmapped folders");
|
||||||
if (String.IsNullOrEmpty(path))
|
if (String.IsNullOrEmpty(path))
|
||||||
@ -107,13 +108,13 @@ public virtual List<UnmappedFolder> GetUnmappedFolders(string path)
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (string seriesFolder in _diskProvider.GetDirectories(path))
|
var seriesFolders = _diskProvider.GetDirectories(path).ToList();
|
||||||
|
var unmappedFolders = seriesFolders.Except(series.Select(s => s.Path), new PathEqualityComparer()).ToList();
|
||||||
|
|
||||||
|
foreach (string unmappedFolder in unmappedFolders)
|
||||||
{
|
{
|
||||||
if (!series.Any(s => s.Path.PathEquals(seriesFolder)))
|
var di = new DirectoryInfo(unmappedFolder.Normalize());
|
||||||
{
|
results.Add(new UnmappedFolder { Name = di.Name, Path = di.FullName });
|
||||||
var di = new DirectoryInfo(seriesFolder.Normalize());
|
|
||||||
results.Add(new UnmappedFolder { Name = di.Name, Path = di.FullName });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Path.GetPathRoot(path).Equals(path, StringComparison.InvariantCultureIgnoreCase))
|
if (Path.GetPathRoot(path).Equals(path, StringComparison.InvariantCultureIgnoreCase))
|
||||||
@ -126,7 +127,7 @@ public virtual List<UnmappedFolder> GetUnmappedFolders(string path)
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual Dictionary<string, long> FreeSpaceOnDrives()
|
public Dictionary<string, long> FreeSpaceOnDrives()
|
||||||
{
|
{
|
||||||
var freeSpace = new Dictionary<string, long>();
|
var freeSpace = new Dictionary<string, long>();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user