1
0
Fork 0
mirror of https://github.com/lidarr/Lidarr synced 2025-02-23 14:30:49 +00:00

Fixed: Ignore special folders inside Blackhole watch folders

(cherry picked from commit e79dd6f8e689617b1fd9f96c639ac300669112c5)
This commit is contained in:
Mark McDowall 2025-01-30 18:50:48 -08:00 committed by Bogdan
parent 3c4b438d27
commit 45e8ecffa0
4 changed files with 72 additions and 33 deletions

View file

@ -17,37 +17,6 @@ public class FileSystemLookupService : IFileSystemLookupService
private readonly IDiskProvider _diskProvider;
private readonly IRuntimeInfo _runtimeInfo;
private readonly HashSet<string> _setToRemove = new HashSet<string>
{
// Windows
"boot",
"bootmgr",
"cache",
"msocache",
"recovery",
"$recycle.bin",
"recycler",
"system volume information",
"temporary internet files",
"windows",
// OS X
".fseventd",
".spotlight",
".trashes",
".vol",
"cachedmessages",
"caches",
"trash",
// QNAP
".@__thumb",
// Synology
"@eadir",
"#recycle"
};
public FileSystemLookupService(IDiskProvider diskProvider, IRuntimeInfo runtimeInfo)
{
_diskProvider = diskProvider;
@ -158,7 +127,7 @@ private List<FileSystemModel> GetDirectories(string path)
})
.ToList();
directories.RemoveAll(d => _setToRemove.Contains(d.Name.ToLowerInvariant()));
directories.RemoveAll(d => SpecialFolders.IsSpecialFolder(d.Name));
return directories;
}

View file

@ -0,0 +1,47 @@
using System.Collections.Generic;
namespace NzbDrone.Common.Disk;
public static class SpecialFolders
{
private static readonly HashSet<string> _specialFolders = new HashSet<string>
{
// Windows
"boot",
"bootmgr",
"cache",
"msocache",
"recovery",
"$recycle.bin",
"recycler",
"system volume information",
"temporary internet files",
"windows",
// OS X
".fseventd",
".spotlight",
".trashes",
".vol",
"cachedmessages",
"caches",
"trash",
// QNAP
".@__thumb",
// Synology
"@eadir",
"#recycle"
};
public static bool IsSpecialFolder(string folder)
{
if (folder == null)
{
return false;
}
return _specialFolders.Contains(folder.ToLowerInvariant());
}
}

View file

@ -99,5 +99,22 @@ public void GetItems_should_considered_changing_files_queued()
VerifySingleItem(DownloadItemStatus.Completed);
}
[TestCase("@eaDir")]
[TestCase(".@__thumb")]
public void GetItems_should_not_include_special_subfolders(string folderName)
{
GivenCompletedItem();
var targetDir = Path.Combine(_completedDownloadFolder, folderName);
Mocker.GetMock<IDiskProvider>()
.Setup(c => c.GetDirectories(_completedDownloadFolder))
.Returns(new[] { targetDir });
var items = Subject.GetItems(_completedDownloadFolder, TimeSpan.FromMilliseconds(50)).ToList();
items.Count.Should().Be(0);
}
}
}

View file

@ -52,7 +52,13 @@ private IEnumerable<WatchFolderItem> GetDownloadItems(string watchFolder, Dictio
{
foreach (var folder in _diskScanService.FilterPaths(watchFolder, _diskProvider.GetDirectories(watchFolder)))
{
var title = FileNameBuilder.CleanFileName(Path.GetFileName(folder));
var folderName = Path.GetFileName(folder);
var title = FileNameBuilder.CleanFileName(folderName);
if (SpecialFolders.IsSpecialFolder(folderName))
{
continue;
}
var newWatchItem = new WatchFolderItem
{