Special folders also apply to RootFolder unmapped folders

This commit is contained in:
Mark McDowall 2013-08-04 10:04:36 -07:00
parent 26dbafee08
commit 19906e0350
3 changed files with 22 additions and 6 deletions

View File

@ -35,8 +35,8 @@ namespace NzbDrone.Common
if (Path.GetPathRoot(path).Equals(path, StringComparison.InvariantCultureIgnoreCase)) if (Path.GetPathRoot(path).Equals(path, StringComparison.InvariantCultureIgnoreCase))
{ {
var setToRemove = new HashSet<string> { "$Recycle.Bin", "System Volume Information" }; var setToRemove = _diskProvider.SpecialFolders;
dirsList.RemoveAll(x => setToRemove.Contains(new DirectoryInfo(x).Name)); dirsList.RemoveAll(x => setToRemove.Contains(new DirectoryInfo(x.ToLowerInvariant()).Name));
} }
dirs = dirsList; dirs = dirsList;

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
@ -11,6 +12,7 @@ namespace NzbDrone.Common
{ {
public interface IDiskProvider public interface IDiskProvider
{ {
HashSet<string> SpecialFolders { get; }
DateTime GetLastFolderWrite(string path); DateTime GetLastFolderWrite(string path);
DateTime GetLastFileWrite(string path); DateTime GetLastFileWrite(string path);
void EnsureFolder(string path); void EnsureFolder(string path);
@ -36,14 +38,14 @@ namespace NzbDrone.Common
void FolderSetLastWriteTimeUtc(string path, DateTime dateTime); void FolderSetLastWriteTimeUtc(string path, DateTime dateTime);
bool IsFileLocked(FileInfo file); bool IsFileLocked(FileInfo file);
string GetPathRoot(string path); string GetPathRoot(string path);
void SetPermissions(string filename, string account, FileSystemRights Rights, AccessControlType ControlType); void SetPermissions(string filename, string account, FileSystemRights rights, AccessControlType controlType);
bool IsParent(string parentfolder, string subfolder); bool IsParent(string parentfolder, string subfolder);
FileAttributes GetFileAttributes(string path); FileAttributes GetFileAttributes(string path);
} }
public class DiskProvider : IDiskProvider public class DiskProvider : IDiskProvider
{ {
enum TransferAction enum TransferAction
{ {
Copy, Copy,
Move Move
@ -58,6 +60,14 @@ namespace NzbDrone.Common
private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public HashSet<string> SpecialFolders
{
get
{
return new HashSet<string> { "$recycle.bin", "system volume information", "recycler" };
}
}
public DateTime GetLastFolderWrite(string path) public DateTime GetLastFolderWrite(string path)
{ {
Ensure.That(() => path).IsValidPath(); Ensure.That(() => path).IsValidPath();

View File

@ -99,7 +99,7 @@ namespace NzbDrone.Core.RootFolders
throw new ArgumentException("Invalid path provided", "path"); throw new ArgumentException("Invalid path provided", "path");
var results = new List<UnmappedFolder>(); var results = new List<UnmappedFolder>();
var series = _seriesRepository.All(); var series = _seriesRepository.All().ToList();
if (!_diskProvider.FolderExists(path)) if (!_diskProvider.FolderExists(path))
{ {
@ -116,6 +116,12 @@ namespace NzbDrone.Core.RootFolders
} }
} }
if (Path.GetPathRoot(path).Equals(path, StringComparison.InvariantCultureIgnoreCase))
{
var setToRemove = _diskProvider.SpecialFolders;
results.RemoveAll(x => setToRemove.Contains(new DirectoryInfo(x.Path.ToLowerInvariant()).Name));
}
Logger.Debug("{0} unmapped folders detected.", results.Count); Logger.Debug("{0} unmapped folders detected.", results.Count);
return results; return results;
} }